Python基础题
1、 执行Python脚本的两种方式:
Chmod +x 脚本
./脚本(路径的方式)
Python 脚本
2、 简述位、字节的关系
一个字节=8位
3、 简述ASCII、unicode、utf-8/gbk的关系
Ascii:由一个字节组成,共能表示256个字符
Unicode万国码,
Utf-32: 32位,表示每个字符占32位
Utf-16: 16位,表示每个字符占16位
Utf-8: 可边长的字符编码,一个英文字母和数字占位8位,欧洲文字占16位,汉字占24位
GBK:汉字的编码扩展规范,GBK2312---GBK1.0----GB18030
4、请写出“李杰”分别用UTF-8和gbk编码所占的位数
gbk:4个字节====32位
utf-8:六个字节===48位
5、Python单行注释和多行注释分别用什么
单行:#
多行:''' '''或""" """
6、声明变量注意哪些事项
1)、变量是由数字、字母和下划线组成
2)、变量不能有数字开头
3)、变量尽量不要以下划线开头
4)、不能以python内置变量命名变量名
5)、变量名尽量做到见名知意
8、如何查看变量在内存中的地址?
id(变量)
9、执行Python程序时,自动生产的.pyc文件的作用是什么?
.pyc文件是二进制文件,有python文件编译后生成的字节码文件,作用:能加快文件的执行
10、写代码
a、实现用户输入用户名和密码,当用户名为sever且密码为123时,显示登录成功,否则登录失败!
#!/usr/bin/env python
import getpass
name = input("please input username:")
password = getpass.getpass("please input pwd:")
if name == "server" and password == "123":
print("welcome to server")
else:
print("username or password error")
b、实现用户输入用户名和密码,当用户名为sever且密码为123时,显示登录成功,否则登录失败,允许用户输入三次
#!/usr/bin/env python
import getpass
name = input("please input username:")
password = getpass.getpass("please input pwd:")
count = 0
while True
count += 1
if name == "server" and password == "123":
print("welcome to server")
else:
print("username or password error")
if count == 3:
break
c、实现用户输入用户名和密码,当用户名为sever或alex且密码为123时,显示登录成功,否则登录失败,允许用户输入三次
#!/usr/bin/env python
import getpass
name = input("please input username:")
password = getpass.getpass("please input pwd:")
count = 0
while True
count += 1
if name == "server" or name == "alex" and password == "123":
print("welcome to server")
else:
print("username or password error")
if count == 3:
break
11、写代码
a、使用while循环,实现2-3+4-5+6-7+8.....+100的和
#/usr/bin/env python
#-*- coding:utf-8 -*-
start = 1
sum = 0
while n > 1 and n < 100:
temp = start % 2
if temp == 1:
sum = sum - start
else:
sum = sum + start
start += 1
print(sum)
b、使用for循环和range,实现1-2+3-4+5-6.......+99的和
#!/usr/bin/env python
sum = 0
for i in range(99):
if i%2 == 1:
sum = sum + i
else:
sum = sum - i
print(sum)
c、使用while循环实现输出1,2,3,4,5,7,8,9,11,12
#!/usr/bin/env python
n = 0
while n < 12:
n += 1
if n == 6 or n == 10:
continue
print(n)
d、使用while循环,实现1-100内所有奇数
#!/usr/bin/env python
n = 0
while n < 100:
n += 1
if n%2 == 1:
print(n)
e、使用while循环,实现1-100内所有偶数
#!/usr/bin/env python
n = 0
while n < 100:
n += 1
if n%2 == 0:
print(n)
12、分别书写出5,10,32,7的二进制表示:
5: 0000 0101
10:0000 1010
32:0010 0000
7: 0000 0111
13、
14、现有两个如下变量,请简述n1和n2是什么关系?
n1 = 123
n2 = 123
n1和n2值相同,且指向同一个内存地址(255以内Python自动做)
15、现有如下两个变量,请简述n1和n2是什么关系?
n1 = 123456
n2 = 123456
只是两个值相等的变量,其他没有任何关系
16、现有如下两个变量,请简述n1 n2是什么关系?
n1 = 123456
n1 = n2
n1和n2 值相同,且指向同一个内存地址,但是修改后相互不影响
17、如有以下变量n1 = 5,请使用int提供的方法,得到该变量最少可以有多少个二进制位表示?
>>> print(n1.bit_length())
3
18、布尔值分别有什么?
True 和 False
19、阅读代码,请写出执行结果
a = "alex"
b = a.capitalize() #首字母大写
print(a)
print(b)
alex
Alex
20、写代码,有如下变量,请按照要求实现每个功能
name = "alex"
a、移除name变量对应的值两边的空格,并输入移除有内存
print(name.strip())
b、判断name变量对应的值是否以"al"开头,并输出结果
>>> name = "alex"
>>> print(name.startswith("al"))
True
c、判断变量name是否以"X"结尾
>>> print(name.endswith("X"))
False
d、将name便量对应的值根据“I”替换为“P”,并输出结果
>>> name = "alex"
>>> print(name.replace('l','p'))
apex
e、将name变量对应的值根据"l"分割,并输出结果
>>> print(name.partition('l'))
('a', 'l', 'ex')
f、请问,上一题e分割之后得到的是什么类型
列表
g、将name变量对应的值变大写,并输出结果
>>> print(name.swapcase())
ALEX
h、将name变量对应的值变小写,并输出结果
>>> name = "ALEX"
>>> print(name.lower())
alex
i:请输出name变量对应值的第二个字符
>>> name[1]
'L'
j、请输出name变量对应的值得前三个字符?
>>> name[0:3]
'ALE'
k、请输出name变量的后两个字符
>>> name[-2:]
'EX'
l、请输出name变量中“e”所在的索引位置
>>> print(name.find('E'))
2
21、字符串是否可迭代?如可以请用for循环没一个元素
可以迭代
>>> for i in name:
... print(i)
...
A
L
E
X
22、请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex', 'eric', 'rain']
>>> print("_".join(li))
alex_eric_rain
22、写代码,有如下列表,按照要求实现每一个功能 li = ['alex', 'eric', 'rain']
a. 计算列表长度并输出
>>> print(len(li))
3
b. 列表中追加元素 “seven”,并输出添加后的列表
>>> li.append("seven")
>>> print(li)
['alex', 'eric', 'rain', 'seven', 'seven']
c. 请在列表的第 1 个位置插入元素 “Tony”,并输出添加后的列表
>>> li.insert(1,"Tony")
>>> print(li)
['alex', 'Tony', 'eric', 'rain', 'seven', 'seven']
d. 请修改列表第 2 个位置的元素为 “Kelly”,并输出修改后的列表
>>> li[2]="Kelly"
>>> print(li)
['alex', 'Tony', 'Kelly', 'rain', 'seven', 'seven']
e. 请删除列表中的元素 “eric”,并输出修改后的列表
>>> li.append("eric")
>>> print(li)
['alex', 'Tony', 'Kelly', 'rain', 'seven', 'seven', 'eric']
>>> li.remove("eric")
>>> print(li)
['alex', 'Tony', 'Kelly', 'rain', 'seven', 'seven']
f. 请删除列表中的第 2 个元素,并输出删除的元素的值和删除元素后的列表
>>> li.pop(1)
'Tony'
g. 请删除列表中的第 3 个元素,并输出删除元素后的列表
>>> li.pop(2)
'seven'
>>> print(li)
['alex', 'rain', 'seven']
h. 请删除列表中的第 2 至 4 个元素,并输出删除元素后的列表
>>> del li[1:4]
>>> print(li)
['alex']
i. 请将列表所有的元素反转,并输出反转后的列表
>>> li = ['alex', 'eric', 'rain']
>>> li.reverse()
>>> print(li)
['rain', 'eric', 'alex']
j. 请使用 for、len、range 输出列表的索引
>>> for i in li:
... print(li.index(i))
...
0
1
2
>>> for i in range(len(li)):
... print(i)
...
0
1
2
k. 请使用 enumerate 输出列表元素和序号(序号从 100 开始)
>>> for index,key in enumerate(li,100):
... print(index,key)
...
100 alex
101 eric
102 rain
l. 请使用 for 循环输出列表的所有元素
>>> for i in li:
... print(i)
...
rain
eric
alex
23、写代码,有如下列表,请按照功能要求实现每一个功能 li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446]
a. 请输出 “Kelly”
>>> li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446]
>>> li[2][1][1]
'kelly
b. 请使用索引找到 'all' 元素并将其修改为 “ALL”
>>> li[2][2] = "ALL"
>>> print(li)
['hello', 'seven', ['mon', ['h', 'kelly'], 'ALL'], 123, 446]
24、写代码,有如下元组,按照要求实现每一个功能 tu = ('alex', 'eric', 'rain')
a. 计算元组长度并输出
>>> tu = ('alex', 'eric', 'rain')
>>> len(tu)
3
b. 获取元组的第 2 个元素,并输出
>>> tu[1]
'eric'
c. 获取元组的第 1-2 个元素,并输出
>>> tu[0:2]
('alex', 'eric')
d. 请使用 for 输出元组的元素
>>> for i in tu:
... print(i)
...
alex
eric
rain
e. 请使用 for、len、range 输出元组的索引
>>> for i in range(len(tu)):
... print(i)
...
0
1
2
f. 请使用 enumerate 输出元祖元素和序号(序号从 10 开始)
>>> for index,key in enumerate(tu):
... print(index,key)
...
0 alex
1 eric
2 rain
25、有如下变量,请实现要求的功能 tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
a. 讲述元祖的特性
除了元素不能修改外,其他和列表一样
b. 请问 tu 变量中的第一个元素 “alex” 是否可被修改?
不能
c. 请问 tu 变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”
k2是列表,可以被修改,
>>> print(tu[1][2]["k2"].append("server"))
None
>>> print(tu[1][2]["k2"])
['age', 'name', 'server']
d. 请问 tu 变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”
k3是元组
不能被修改
26、字典 dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
a. 请循环输出所有的 key
>>> for i in dic:
... print(i)
...
k3
k1
k2
b. 请循环输出所有的 value
>>> for i in dic:
... print(dic[i])
...
[11, 22, 33]
v1
v2
c. 请循环输出所有的 key 和 value
>>> dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
>>> for i in dic.items():
... print(i)
...
('k3', [11, 22, 33])
('k1', 'v1')
('k2', 'v2'
d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
>>> dic["k4"]= "v4"
>>> print(dic)
{'k4': 'v4', 'k3': [11, 22, 33], 'k1': 'v1', 'k2': 'v2'}
e. 请在修改字典中 “k1” 对应的值为 “alex”,输出修改后的字典
>>> dic["k1"]="alex"
>>> print(dic["k1"])
alex
f. 请在 k3 对应的值中追加一个元素 44,输出修改后的字典
>>> dic["k3"].append("44")
>>> print(dic["k3"])
[11, 22, 33, '44']
g. 请在 k3 对应的值的第 1 个位置插入个元素 18,输出修改后的字典
>>> dic["k3"].insert(1,"18")
>>> print(dic["k3"])
[11, '18', 22, 33, '44']
27、转换
a. 将字符串 s = "alex" 转换成列表
>>> list(s)
b. 将字符串 s = "alex" 转换成元祖
>>>tuple(s)
b. 将列表 li = ["alex", "seven"] 转换成元组
>>>tuple(li)
c. 将元祖 tu = ('Alex', "seven") 转换成列表
>>>list(tu)
d. 将列表 li = ["alex", "seven"] 转换成字典且字典的 key 按照 10 开始向后递增
li = ["alex","seven"]
dic = {}
for i,v in enumerate(li,10):
dic.setdefault(i,v)
print(dic)
27、转码 n = "老男孩"
a. 将字符串转换成 utf-8 编码的字节,并输出,然后将该字节再转换成 utf-8 编码字符串,再输出
print(n.encode(encoding="utf-8"))
执行结果
b'\xe8\x80\x81\xe7\x94\xb7\xe5\xad\xa9'
print("\xe8\x80\x81\xe7\x94\xb7\xe5\xad\xa9".encode(encoding="utf-8"))
执行结果
b'\xc3\xa8\xc2\x80\xc2\x81\xc3\xa7\xc2\x94\xc2\xb7\xc3\xa5\xc2\xad\xc2\xa9'
b. 将字符串转换成 gbk 编码的字节,并输出,然后将该字节再转换成 gbk 编码字符串,再输出
print(n.encode(encoding="gbk"))
执行结果
b'\xc0\xcf\xc4\xd0\xba\xa2'
print("\xc0\xcf\xc4\xd0\xba\xa2".encode(encoding="gbk"))
执行结果
UnicodeEncodeError: 'gbk' codec can't encode character '\xc0' in position 0: illegal multibyte sequence
28、求 1-100 内的所有数的和
#!/usr/bin/env python
sum = 0
for i in range(101):
sum += i
print(sum)
29、元素分类 有如下值集合 [11,22,33,44,55,66,77,88,99,90],
将所有大于 66 的值保存至字典的第一个 key 中,
将小于 66 的值保存至第二个 key 的值中。 即: {'k1': 大于 66 的所有值, 'k2': 小于 66 的所有值}
#!/usr/bin/env python
d1 = {"k1":[],"k2":[]}
li = [11,22,33,44,55,66,77,88,99,90]
for i in li:
if i > 66:
d1["k1"].append(i)
else:
d1["k2"].append(i)
print(d1)
30、购物车 功能要求: 要求用户输入总资产,例如:2000 显示商品列表,让用户根据序号选择商品,加入购物车 购买,
如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
goods = [ {"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998}, ]
#!/usr/bin/env python
#-*- coding:utf-8 -*-
shopping_car = {}
goods = [ {"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998}, ]
print("---------------欢迎光临本商场-----------------------")
salary = int(input("input your salary:"))
while True:
index = 0
for product in goods:
print(index,product)
index += 1
choice = input("请输入选择的商品序号:").strip() #输入商品序号,去除空格
if choice.isdigit(): #判断输入的序号是否是数字
choice=int(choice)
if choice >=0 and choice < len(goods): #判断输入数字是否在产品列表范围内
product = goods[choice] #选择的商品
if product["price"] <= salary: #买的起
if product["name"] in shopping_car:
shopping_car[product["name"]]["price"] += 1
else:
shopping_car[product["name"]] = [product["price"],1]
salary -= product["price"]
print("您购物车里添加了" + product["name"] + "余额是:" + str(salary))
else:
print("您的余额不足,请选择其他便宜的商品!!")
else:
print("您输入的商品序号不存在,请重新选择!!")
elif choice == "q":
print("------------已购买商品----------")
id_counter = 1
total_cost = 0
print("ID 商品 数量 单价 总价")
for key in shopping_car: #循环所有的购物车列表
print("%s%10s%10s%10s%10s" %(id_counter,
key,
shopping_car[key][1],
shopping_car[key][0],
shopping_car[key][1]*shopping_car[key][0]))
id_counter +=1
total_cost += shopping_car[key][1]*shopping_car[key][0]
print("总花费为:"+str(total_cost))
print("余额为:"+ str(salary))
break
else:
print("无此选项")