Python全栈考试(一)
1、执行 Python 脚本的两种方式
答:
1)python x.py
2)../x.py
2、简述位、字节的关系
答:
1)位:二进制位(bit)是计算机存储信息的基本单位,代表1个二进制数位,其值为0或1.
2)字节:8个连续的二进制位为一个字节,可以存放1个西文字符的编码.
3)字:2个字节为一个字.
3、简述 ascii、unicode、utf-8、gbk 的关系
答:
1) ASCII码使用一个字节编码,所以它的范围基本是只有英文字母、数字和一些特殊 符号 ,只有256个字符。
2) Unicode能够表示全世界所有的字节
3)GBK是只用来编码汉字的,GBK全称《汉字内码扩展规范》,使用双字节编码。
4)UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。英语占1个字节,汉语占3个字节.
4、请写出 “李杰” 分别用 utf-8 和 gbk 编码所占的位数
答:
1)UTF - 8 “李杰” 占6个字节
2)gbk “李杰” 占4个字节
5、Pyhton 单行注释和多行注释分别用什么?
答:
1)单行注释 #注释一行
2)多行注释 ’’’注释多行’’’
6、声明变量注意事项有那些?
答:
1)变量命名可以包括字母、数字、下划线。变量不可以数字开头。
2).变量名不能以数字为第一个字符
3).内置函数名不能用
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
8、如何查看变量在内存中的地址?
答:
1)id(变量名)
9、执行 Python 程序时,自动生成的 .pyc 文件的作用是什么?
1).pyc文件是由.py文件经过编译后生成的字节码文件,其加载速度相对于之前的.py文件有所提高,而且还可以实现源码隐藏,以及一定程度上的反编译。比如,Python3.3编译生成的.pyc文件,Python3.4就别想着去运行
10、写代码
a.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!
1 import getpass 2 username = input("用户名:") #getpass模块会报错 3 4 password = getpass.getpass("密码:") 5 6 print(username,password) 7 8 if username == "seven" and password == "123": 9 10 print("欢迎",username,"!") 11 12 else: 13 print("错误的用户名或密码!")
b.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
1 import getpass #getpass模块会报错 2 username = ("seven") #设定一个用户名 3 password = 123 #设定一个密码 4 cance = 0 #设置一个计数 5 while cance < 3: #循环大于3停止 6 username = input("用户名:") #提示用户输入 7 cance+=1 #循环计数 8 password = getpass.getpass("密码:") #提示用户输入密码 9 print(username,password) 10 11 if username == "seven" and password == "123": #判断用户名和密码是否相等 12 13 print("欢迎",username,"!") #欢迎用户 14 break 15 16 else: 17 print("错误的用户名或密码!")
c.实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
1 import getpass #getpass模块会报错 2 cance = 0 3 while cance < 3: #循环3次 4 username = input("用户名:") #输入用户名 5 cance+=1 #循环计数 6 password = getpass.getpass("密码:") #输入密码 7 8 print(username,password) #打印用户输入 9 10 if username == "seven" or username== "alex": #判断用户名是否相等 11 if password == "123": #判断密码是否相等 12 13 print("欢迎",username,"!") #登录成功欢迎他 14 break 15 16 else: 17 print("错误的用户名或密码!") #提示用户是否正确
11、写代码
a. 使用while循环实现输出2-3+4-5+6...+100 的和
1 i,b = 2,0 2 while i <= 100:#i取2-100 3 if i%2 == 0:#判断是偶数 4 b = b + i #结果加当前的i 0+2 5 print(b) 6 7 else:#奇数 8 b = b - i #结果减当前i 9 i += 1 #判断完自增一 10 print(b) #结果为51
b. 使用for循环和range实现输出 1-2+3-4+5-6...+99 的和
1 a = 0 2 for i in range(1,100): 3 if i%2 == 0: #判断偶数 4 5 a = a - i #a - 当前的i 6 else: 7 a = a + i #a + 当前的i 8 i += 1 #判断i+1 9 print(a) #结果为50
c. 使用 while 循环实现输出 1,2,3,4,5, 7,8,9, 11,12 d. 使用 while 循环实现输出 1-100 内的所有奇数
1 a = 1 2 while a < 13: 3 if a == 6 or a == 10: 4 pass #相等就跳过 5 else: 6 print(a) 7 a += 1
e. 使用 while 循环实现输出 1-100 内的所有偶数
1 a = 1 2 while a <100: 3 if a%2 == 0: #判断偶数 4 pass 5 else: 6 print(a) 7 a += 1 #打印奇数
12、分别书写数字 5,10,32,7 的二进制表示
答:
1)5 == 00000101
2)10 == 00010010
3)32 == 00100000
4)7 == 00000111
13、简述对象和 类的关系(可以用手比喻)
答:
1)类就是手掌,对象就是手指纹.类(手)有几个手指,分别是列表,元组,字典等里面的元素就是对象(指纹)
14、现有如下两个变量,请简述 n1 和 n2 是什么关系?
n1 = 123
n2 = 123
答:n1和n2是2个不同的标签相同的ID号,数值指向同一个内存地址.
15、现有如下两个变量,请简述 n1 和 n2 是什么关系?
n1 = 123456
n2 = 123456
答:n1和n2是2个不同的标签不同的ID号,数值指向同一个内存地址
16、现有如下两个变量,请简述 n1 和 n2 是什么关系?
n1 = 123456
n2 = n1
答:n1是123456的标签,n2是贴在n1上的标签.两者代表的都是123456
17、如有一下变量 n1 = 5,请使用 int 的提供的方法,得到该变量最少可以用多少个二进制位表示?
1 n1 = 5
2 print(n1.bit_length())
18、布尔值分别有什么?
答:True 真 1 and False 假 0
19、阅读代码,请写出执行结果
a = "alex"
b = a.capitalize()
print(a)
print(b)
请写出输出结果: a = alex b = Alex
20、写代码,有如下变量,请按照要求实现每个功能 name = " aleX"
name = " aleX"
a. 移除 name 变量对应的值两边的空格,并输入移除有的内容
1 name = " aleX"
2 print(name.strip())
b. 判断 name 变量对应的值是否以 "al" 开头,并输出结果
1 name = " aleX"
2 print(name.startswith("al"))
c. 判断 name 变量对应的值是否以 "X" 结尾,并输出结果
1 name = " aleX"
2 print(name.endswith("X"))
d. 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
1 name = " aleX" 2 3 name = name[:2]+"p"+name[-2:] 4 5 print(name)
e. 将 name 变量对应的值根据 “l” 分割,并输出结果。
1 name = " aleX" 2 3 name1 = name[:2] 4 5 name2 = name[-2:] 6 7 print(name1,name2)
f. 请问,上一题 e 分割之后得到值是什么类型?
答:字符串
g. 将 name 变量对应的值变大写,并输出结果
1 name = " aleX"
2 print(name.upper())
h. 将 name 变量对应的值变小写,并输出结果
1 name = " aleX"
2 print(name.lower())
i. 请输出 name 变量对应的值的第 2 个字符?
1 name = " aleX"
2 print(name[1:2])
j. 请输出 name 变量对应的值的前 3 个字符?
1 name = " aleX"
2 print(name[:3])
k. 请输出 name 变量对应的值的后 2 个字符?
1 name = " aleX"
2 print(name[-2:])
l. 请输出 name 变量对应的值中 “e” 所在索引位置?
1 name = " aleX" 2 3 for i,v in enumerate(name): 4 5 if v == "e": 6 7 print("e的索引是:%s"%i)
21、字符串是否可迭代?如可以请使用 for 循环每一个元素?
1 name = "xiaoming" 2 3 for i in name: 4 5 print(i)
22、请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex', 'eric', 'rain'] 22、写代码,有如下列表,按照要求实现每一个功能
1 li = ['alex', 'eric', 'rain'] 2 3 b = li[0]+”_"+li[1]+"_"+li[2] 4 5 print(b)
a. 计算列表长度并输出
1 print(len(li))
b. 列表中追加元素 “seven”,并输出添加后的列表
1 li = ['alex', 'eric', 'rain'] 2 3 li.append("seven") 4 5 print(li)
c. 请在列表的第 1 个位置插入元素 “Tony”,并输出添加后的列表
1 li = ['alex', 'eric', 'rain', 'seven'] 2 3 li.insert(0,"Tony") 4 5 print(li)
d. 请修改列表第 2 个位置的元素为 “Kelly”,并输出修改后的列表
1 li = ['Tony', 'alex', 'eric', 'rain', 'seven'] 2 3 li[1] = "kelly" 4 5 print(li)
e. 请删除列表中的元素 “eric”,并输出修改后的列表
1 li = ['Tony', 'kelly', 'eric', 'rain', 'seven'] 2 3 li.remove('eric') 4 5 print(li)
f. 请删除列表中的第 2 个元素,并输出删除的元素的值和删除元素后的列表
1 li = ['Tony', 'kelly', 'eric', 'rain', 'seven'] 2 3 print(li.pop(1)) 4 5 print(li)
g. 请删除列表中的第 3 个元素,并输出删除元素后的列表
1 li = ['Tony', 'eric', 'rain', 'seven'] 2 3 li.pop(2) 4 5 print(li)
h. 请删除列表中的第 2 至 4 个元素, 并输出删除元素后的列表
1 li = ['Tony', 'eric', ‘rain’] #列表元素不够了 2 3 li.pop(2) 4 5 print(li)
i. 请将列表所有的元素反转,并输出反转后的列表
1 li = ['Tony', 'eric'] 2 3 b=list(reversed(li)) 4 5 print (b)
j. 请使用 for、len、range 输出列表的索引
1 li = ['eric', 'Tony'] 2 3 for i,name in enumerate(li,100): 4 5 print(i,name)
k. 请使用 enumrate 输出列表元素和序号(序号从 100 开始) l. 请使用 for 循环输出列表的所有元素
1 li = ['eric', 'Tony'] 2 3 for i,name in enumerate(li,100): 4 5 print(i,name)
23、写代码,有如下列表,请按照功能要求实现每一个功能 li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446] a. 请输出 “Kelly”
1 li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446] 2 3 name = str(li[2][1][1]) 4 5 print(name.capitalize())
b. 请使用索引找到 'all' 元素并将其修改为 “ALL”
1 li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446] 2 3 name = str(li[2][2]) 4 5 print(name.upper())
24、写代码,有如下元组,按照要求实现每一个功能 tu = ('alex', 'eric', 'rain')
a. 计算元组长度并输出
1 tu = ('alex', 'eric', 'rain') 2 3 print(len(tu))
b. 获取元组的第 2 个元素,并输出
1 tu = ('alex', 'eric', 'rain') 2 3 print(tu[1])
c. 获取元组的第 1-2 个元素,并输出
1 tu = ('alex', 'eric', 'rain') 2 3 print(tu[:2])
d. 请使用 for 输出元组的元素
1 tu = ('alex', 'eric', 'rain') 2 3 for i in tu: 4 5 print(i)
e. 请使用 for、len、range 输出元组的索引
1 tu = ('alex', 'eric', 'rain') 2 3 for i in range(len(tu)): 4 5 print(i)
f. 请使用 enumrate 输出元祖元素和序号(序号从 10 开始)
1 tu = ('alex', 'eric', 'rain') 2 3 for i,name in enumerate(tu,10): 4 5 print(i,name)
25、有如下变量,请实现要求的功能
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
- 讲述元祖的特性 答:不可修改
- 请问 tu 变量中的第一个元素 “alex” 是否可被修改? 答:不可以修改
- c. 请问 tu 变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”
- 1.可以修改
- tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
- b = tu[1][2]["k2"] = [].append("Seven")
- print(tu)
- d. 请问 tu 变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”
26、字典
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
a. 请循环输出所有的 key b. 请循环输出所有的 value
c. 请循环输出所有的 key 和 value
d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
e. 请在修改字典中 “k1” 对应的值为 “alex”,输出修改后的字典 f. 请在 k3 对应的值中追加一个元素 44,输出修改后的字典
g. 请在 k3 对应的值的第 1 个位置插入个元素 18,输出修改后的字典
27、转换
a. 将字符串 s = "alex" 转换成列表
b. 将字符串 s = "alex" 转换成元祖
b. 将列表 li = ["alex", "seven"] 转换成元组
c. 将元祖 tu = ('Alex', "seven") 转换成列表
d. 将列表 li = ["alex", "seven"] 转换成字典且字典的 key 按照 10 开始向后递增
27、转码
n = "老男孩"
a. 将字符串转换成 utf-8 编码的字节,并输出,然后将该字节再转换成 utf-8 编码字符串,再输出 a. 将字符串转换成 gbk 编码的字节,并输出,然后将该字节再转换成 gbk 编码字符串,再输出
28、求 1-100 内的所有数的和
1 b = 0 2 for i in range(0,101): 3 b = b + i 4 print(b) 5 结果:5050
29、元素分类
有如下值集合 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个 key 中,将小于 66 的值保存至第二个 key 的值中。
即: {'k1': 大于 66 的所有值, 'k2': 小于 66 的所有值}
1 li = [11,22,33,44,55,66,77,88,99] 2 l1 = [] 3 l2 = [] 4 for i in li: 5 if i >66: 6 l1.append(i) 7 else: 8 l2.append(i) 9 dict = {"k1":l1,"k2":l2} 10 print(dict)
30、购物车 功能要求:
要求用户输入总资产,例如:2000 显示商品列表,让用户根据序号选择商品,加入购物车 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998},
]
代码如下:
1 商品列表 = [ 2 3 {"name": "电脑", "price": 1999}, 4 5 {"name": "鼠标", "price": 10}, 6 7 {"name": "游艇", "price": 20}, 8 9 {"name": "美女", "price": 998}, 10 11 ] 12 13 总金额 = int(input("请输入金额:")) 14 15 while True:#用于循环购买 16 17 for i,商品 in enumerate(商品列表, 1):#循环商品信息 18 19 print(i, 商品列表[i - 1]["name"], 商品列表[i - 1]["price"])#打印列表 20 21 余额 = int(input("请选择商品:"))#输入商品序号 22 23 if 余额 >0 and 余额 <=len(商品列表):#判断输入是否在列表中 24 25 if int(商品列表[余额-1]["price"]) <= 总金额:#余额大于商品金额 26 27 总金额 = 总金额 - int(商品列表 28 29 [余额 - 1]["price"])#减商品金额 30 31 print("购买 %s 成功,余额为 %s" % (商品列表[余额 - 1]["name"] 32 33 , 总金额))#打印成功信息 34 35 else: 36 37 print("余额不足,请及时充值.再见!") 38 39 break #退出 40 41 else: 42 43 print("无此商品!") 44 45 continue