Python之基础练习题
1、执行Python脚本的两种方式
# python3 hello.py Hello World! 你好 # cat hello.py |python Hello World! 你好
2、简述位、字节的关系
位:计算机的计算单位,代表0或者1
字节:一字节相当于8位
3、简述ascii、unicode、utf-8、gbk的关系
4、请写出"李杰"分别用utf-8和gbk编码所占的位数
>>> len(bytes(name,encoding='utf-8')) 6 >>> len(bytes(name,encoding='gbk')) 4
5、Python单行注释和多行注释分别用什么?
单行注释: # 被注释内容 多行注释: ''' 被注释内容 '''
6、声明变量注意事项有哪些?
1)由字母、数字和下划线构成,不能以数字开头,不能任意特殊字符 2)变量定义规范,使用驼峰式或者下划线式格式 3)变量定义尽量简明,易懂,方便使用者应用
7、利用内置函数chr(),ord()以及random模块写一个简单随机4位验证码
import random
tmp='' # 最后生成的随机码
for i in range(4):
n=random.randrange(0,2) # 生成随机数1或0,用来判断下面,是生成随机数字,还是字母
if n==0:
num = random.randrange(65, 91) # 为0时候,生成大写字母
tmp+=chr(num)
else:
k=random.randrange(0,10) # 为1时候,生成数字
tmp+=str(k)
print(tmp) # 这里运行的时候每次生成的4为随机码都不同
8、如何查看变量在内存中的地址?
>>> name = 'Alex' >>> id(name) 3071018080
9、执行Python程序时,自动生成的.pyc文件的作用是什么?
Python执行前生成的编译字节码文件
10、写代码
a.实现用户输入用户名和密码,当用户名为 seven且密码为123时,显示登陆成功,否则登陆失败!
#!/usr/bin/env python # _*_ coding:utf-8 _*_ username = input("请输入用户名:") password = input("请输入密码:") if username == 'seven' and password == '123': print("登录成功") else: print("登录失败")
b.实现用户输入用户名和密码,当用户名为 seven且密码为123时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
# cat a.py #!/usr/bin/env python # _*_ coding:utf-8 _*_ error_num = 0 while True: username = input("请输入用户名:") password = input("请输入密码:") if username == 'seven' and password == '123': print("登录成功") break else: print("登录失败") error_num += 1 if error_num == 3: exit() else: continue # python3 a.py 请输入用户名:1 请输入密码:1 登录失败 请输入用户名:1 请输入密码:1 登录失败 请输入用户名:1 请输入密码:1 登录失败 mads@mads-virtual-machine:~$ python3 a.py 请输入用户名:seven 请输入密码:123 登录成功
c.实现用户输入用户名和密码,当用户名为 seven或alex且 密码为123时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
# cat a.py #!/usr/bin/env python # _*_ coding:utf-8 _*_ error_num = 0 while True: username = input("请输入用户名:") password = input("请输入密码:") if username == 'seven' or username == 'alex' and password == '123': print("登录成功") break else: print("登录失败") error_num += 1 if error_num == 3: exit() else: continue # python3 a.py 请输入用户名:3 请输入密码:3 登录失败 请输入用户名:3 请输入密码:3 登录失败 请输入用户名:33 请输入密码:33 登录失败 # python3 a.py 请输入用户名:seven 请输入密码:123 登录成功 # python3 a.py 请输入用户名:alex 请输入密码:123 登录成功
11、写代码
1)使用while循环实现输出2-3+4-5+6.....+100的和
#!/usr/bin/env python sum = 0 for i in range(2,101): if i % 2 == 0: sum += i else: sum -= i print(i,sum) print("sum:",sum)
2)求1-2+3-4+5 ... 99的所有数的和
方法1:傻逼到家的方法 sum1 =0 sum2 = 0 for i in range(1,100,2): sum1 += i for j in range(2,100,2): sum2 +=j sum3 = sum1 -sum2 print(sum3) 方法2:正常程序猿的方法 sum=0 for i in range(0,100): if i%2==0: sum-=i else: sum+=i print(sum)
3)使用while循环输入 1 2 3 4 5 6 8 9 10
i=0 while i<10: i += 1 if i == 7: continue else: print(i)
4)输出 1-100 内的所有奇数
for i in range(1,100,2): print(i)
5)输出 1-100 内的所有偶数
for i in range(2,100,2): print(i)
12、分别书写数字5,10,32,7的二进制表示
bin() # 二进制 oct() # 八进制 hex() # 十六进制 >>> a = [5,10,32,7] >>> for i in a: ... print(i,":",bin(i)) ... 5 : 0b101 10 : 0b1010 32 : 0b100000 7 : 0b111
13、简述对象和类的关系
对象是类的实例化
14、现有如下两个变量,请简述n1和n2是什么关系?
# 两个变量引用同一个内存地址 >>> n1 = 123 >>> n2 = 123 >>> print(id(n1),id(n2)) 1582456464 1582456464
15、现有如下两个变量,请简述n1和n2是什么关系?
# 两个变量引用同一个内存地址 >>> n1 = 123456 >>> n2 = n1 >>> print(id(n1),id(n2)) 1990112 1990112
16、如有一个变量n1 = 5,请使用int的提供的方法,得出该变量至少可以用多少个二进制位表示?
>>> n1 = 5 >>> bytes(n1) b'\x00\x00\x00\x00\x00' >>> len(bytes(n1)) 5
17、布尔值分别有什么?
真 假
True False
0 1
18、阅读代码,请写出执行结果
a = "alex"
b = a.capitalize()
print(a)
print(b)
结果:
>>> a = "alex" >>> b = a.capitalize() >>> print(a) alex >>> print(b) Alex
19、写代码,有如下变量,请按照要求实现每个功能
name = " aleX "
a.移除name变量对应的值两边的空格,并输入移除有的内容
b.判断name变量对应的值是否以 "al"开头,并输出结果
c.判断name变量对应的值是否以 "X"结尾,并输出结果
d.将name变量对应的值中的 " l" 替换为 " p",并输出结果
e.将name变量对应的值根据 " l" 分割,并输出结果。
f.请问,上一题 e分割之后得到值是什么类型?
g.将name变量对应的值变大写,并输出结果
h.将name变量对应的值变小写,并输出结果
i.请输出name变量对应的值的第2个字符?
j.请输出name变量对应的值的前3个字符?
k.请输出name变量对应的值的后2个字符?
l.请输出name变量对应的值中 "e" 所在索引位置?
>>> name = " aleX " >>> name.strip() 'aleX' >>> name.startswith("al") False >>> name.endswith("X") False >>> name.replace("l","p") ' apeX ' >>> name.split('l') [' a', 'eX '] >>> type(name.split('l')) <class 'list'> >>> name.upper() ' ALEX ' >>> name.lower() ' alex ' >>> name[1] 'a' >>> name[:2] ' a' >>> name[-2:] 'X ' >>> name.index("e") 3
20、字符串是否可迭代?如可以请使用for循环每一个元素?
>>> name = " aleX " >>> for i in name: ... print(i) ... a l e X >>>
21、请代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex','eric','rain']
>>> li = ['alex','eric','rain'] >>> "_".join(li) 'alex_eric_rain'
22、写代码,有如下列表,按照要求实现每一个功能(所有练习题同样适用于元组)
li = ['alex','eric','rain']
a.计算列表长度并输出
b.列表中追加元素"seven",并输出添加后的列表
c.请在列表的第1个位置插入元素 "Tony",并输出添加后的列表
d.请修改列表第2个位置的元素为 "Kelly",并输出修改后的列表
e.请删除列表中的元素"eric",并输出修改后的列表
f.请删除列表中的第2个元素,并输出删除的元素的值和删除元素后的列表
g.请删除列表中的第3个元素,并输出删除元素后的列表
h.请删除列表中的第2至4个元素,并输出删除元素后的列表
i.请将列表所有的元素反转,并输出反转后的列表
j.请使用for、len、range 输出列表的索引
k.请使用enumrate输出列表元素和序号(序号从 100 开始)
l.请使用for循环输出列表的所有元素
>>> li = ['alex','eric','rain'] >>> print(len(li)) 3 >>> li.append("seven") >>> li ['alex', 'eric', 'rain', 'seven'] >>> li.insert(0,"Tony") >>> li ['Tony', 'alex', 'eric', 'rain', 'seven'] >>> li[1] = 'Kelly' >>> li ['Tony', 'Kelly', 'eric', 'rain', 'seven'] >>> li.remove('eric') >>> li ['Tony', 'Kelly', 'rain', 'seven'] f: >>> li[1] 'Kelly' >>> del li[1] >>> li ['Tony', 'rain', 'seven'] g: >>> del li[2] >>> li ['Tony', 'rain'] h: >>> li ['Tony', 'alex', 'eric', 'rain'] >>> li[1:3] ['alex', 'eric'] >>> del li[1:3] >>> li ['Tony', 'rain'] i: >>> li[::-1] ['Tony', 'alex', 'eric', 'rain'] >>> li = ['alex','eric','rain'] >>> li.reverse() >>> li ['rain', 'eric', 'alex'] j: >>> li ['rain', 'eric', 'alex'] >>> for i in range(len(li)): ... print(i) ... 0 1 2 k: >>> li ['rain', 'eric', 'alex'] >>> for k,v in enumerate(li,100): ... print(k,".",v) ... 100 . rain 101 . eric 102 . alex l: >>> li ['rain', 'eric', 'alex'] >>> for i in li: ... print(i) ... rain eric alex
22、写代码,有如下列表,请按照功能要求实现每一个功能
li = ["hello",'seven',["mon",["h","kelly"],'all'],123,446]
a.请输出"Kelly"
b.请使用索引找到 'all'元素并将其修改为"ALL"
>>> li = ["hello",'seven',["mon",["h","kelly"],'all'],123,446] >>> li[2][1][1] 'kelly' >>> s = li[2][1][1] >>> s.capitalize() 'Kelly'
>>> index = li[2].index("all")
>>> li[2][index] = "ALL"
>>> li
['hello', 'seven', ['mon', ['h', 'kelly'], 'ALL'], 123, 446]
25、有如下变量,请实现要求的功能
tu=("alex",[11,22,{"k1":'v1',"k2":["age","name"],"k3":(11,22,33)},44])
a. 讲述元祖的特性
b. 请问 tu 变量中的第一个元素 "alex" 是否可被修改?
c. 请问 tu 变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven"
d. 请问 tu 变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven"
a:元组具有列表的全部特性,不同的是,元组的元素不能修改 b:不能 >>> tu[0] = 'cc' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment c:列表,能被修改 >>> tu ('alex', [11, 22, {'k2': ['age', 'name'], 'k1': 'v1', 'k3': (11, 22, 33)}, 44]) >>> tu[1][2]["k2"].append("cc") >>> tu ('alex', [11, 22, {'k2': ['age', 'name', 'cc'], 'k1': 'v1', 'k3': (11, 22, 33)} 44]) d:元组,不能 >>> tu=("alex",[11,22,{"k1":'v1',"k2":["age","name"],"k3":(11,22,33)},44]) >>> tu[1][2]["k3"].append("cc") Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'append'
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,输出修改后的字典
>>> dic={'k1':"v1","k2":"v2","k3":[11,22,33]} >>> for k in dic.keys(): ... print(k) ... k2 k1 k3 >>> for v in dic.values(): ... print(v) ... v2 v1 [11, 22, 33]
>>> for k,v in dic.items(): ... print(k,v) ... k2 v2 k1 v1 k3 [11, 22, 33] >>> dic {'k2': 'v2', 'k1': 'v1', 'k3': [11, 22, 33]} >>> dic["k4"] = "v4" >>> dic {'k2': 'v2', 'k1': 'v1', 'k4': 'v4', 'k3': [11, 22, 33]} >>> dic["k1"] = "alex" >>> dic {'k2': 'v2', 'k1': 'alex', 'k4': 'v4', 'k3': [11, 22, 33]} >>> dic["k3"].append(44) >>> dic {'k2': 'v2', 'k1': 'alex', 'k4': 'v4', 'k3': [11, 22, 33, 44]} >>> dic["k3"].insert(0,18) >>> dic {'k2': 'v2', 'k1': 'alex', 'k4': 'v4', 'k3': [18, 11, 22, 33, 44]}
27、转换
a. 将字符串 s="alex" 转换成列表
b. 将字符串 s="alex" 转换成元祖
b. 将列表 li=["alex","seven"] 转换成元组
c. 将元祖 tu=('Alex',"seven") 转换成列表
d. 将列表 li=["alex","seven"] 转换成字典且字典的 key 按照 10 开始向后递增
>>> s = "alex" >>> list(s) ['a', 'l', 'e', 'x'] >>> tuple(s) ('a', 'l', 'e', 'x') >>> li=["alex","seven"] >>> tuple(li) ('alex', 'seven') >>> tu=('Alex',"seven") >>> list(tu) ['Alex', 'seven'] >>> li=["alex","seven"] >>> li_dic = {} >>> for k,v in enumerate(li,10): ... li_dic[k] = v ... >>> li_dic {10: 'alex', 11: 'seven'}
27、转码
n="老男孩"
a. 将字符串转换成 utf-8 编码的字节,并输出,然后将该字节再转换成 utf-8 编码字符串,再输出
a. 将字符串转换成 gbk 编码的字节,并输出,然后将该字节再转换成 gbk 编码字符串,再输出
>>> n = "老男孩" >>> n.encode("utf-8") b'\xe8\x80\x81\xe7\x94\xb7\xe5\xad\xa9' >>> n.encode().decode("utf-8") '老男孩' >>> n = "老男孩" >>> n.encode('gbk') b'\xc0\xcf\xc4\xd0\xba\xa2' >>> n.encode('gbk').decode('gbk') '老男孩'
28、求 1-100 内的所有数的和
>>> sum = 0 >>> for i in range(1,101): ... sum += i ... >>> sum 5050
29、元素分类
有如下值集合 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个 key 中,将小于 66 的值保存至第二个 key 的值中。
即: {'k1': 大于 66 的所有值,'k2': 小于 66 的所有值}
# 自定义方法实现 def f1(args): result = [] for item in args: if item > 66: result.append(item) return result li = [11, 22, 33, 44, 55] ret = f1(li) print(ret) # 通过filter功能实现需求 def f2(a): if a > 66: return True li = [11, 22, 33, 44, 55] res = filter(f2, li) print(list(res))
30、购物车
功能要求:
要求用户输入总资产,例如: 2000
显示商品列表,让用户根据序号选择商品,加入购物车
购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
goods=[
{"name":"电脑","price":1999},
{"name":"鼠标","price":10},
{"name":"游艇","price":20},
{"name":"美女","price":998},
]
31、查找元素,移除空格,并查找以 a或A开头 并且以 c 结尾的所有元素
li = ["alec", " aric", "Alex", "Tony", "rain"]
tu = ("alec", " aric", "Alex", "Tony", "rain")
dic = {'k1': "alex", 'k2': ' aric', "k3": "Alex", "k4": "Tony"}
for i in li: if i.strip().capitalize().startswith('A') and i.strip().endswith('c'): print(i) for i in tu: if i.strip().capitalize().startswith('A') and i.strip().endswith('c'): print(i) for i in dic.values(): if i.strip().capitalize().startswith('A') and i.strip().endswith('c'): print (i)
32、用户交互,显示省市县三级联动的选择
dic = {
"河北": {
"石家庄": ["鹿泉", "藁城", "元氏"],
"邯郸": ["永年", "涉县", "磁县"],
},
"湖南": {
"长沙":['a','b','c'],
"株洲":['d','e','f']
},
"湖北": {
"武汉":['g','h','i'],
"黄石":['j','k','l']
}
}
出处:http://www.cnblogs.com/madsnotes/
声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。