入门级练习题(16-22)
Q16:1.系统随机生成4位数,作为登录验证,2.用户输入用户名和密码还有验证码,3.共3次登录机会,但如果是验证码错误,不扣次数
重点:理解验证码的循环
from random import randint
num=0
verify_code = ''
while num < 4:
verify_code += chr(randint(65,90))
num += 1
print(verify_code)
username='zong'
password='123'
num=1
while 1:
uname = input("请输入账号:")
upwd = input("请输入密码:")
vi_code = input(f"请输入验证码{verify_code}:")
if vi_code.upper() == verify_code:
print("验证码正确")
if num == 3:
print("次数已经用完,账号被冻结")
break
elif uname == username and upwd == password:
print("登陆成功")
break
else:
print(f"用户名或密码错误,你还有{3-num}次机会")
num += 1
continue
else:
print("验证码错误,请重新输入")
continue
Q17:使用遍历的方法,判断元素是否在列表中
重点:利用for...else语句
lst=[11,22,33,44,55]
while 1:
num = int(input("请输入一个两位数:"))
for i in lst:
if num == i:
print("运气真好,你的数字是幸运数字")
else:
print("你的数字不是幸运数字")
Q18: 让列表中的每一个导师都打分,如果5<=分数<=10,就单独保存到另一个列表中,如果分数不合规,则让导师从新打分
重点:用while去循环,因为不确定循环的次数
lst=["jay","汪峰","林俊杰","林夕"]
count=0
score_lst=[]
while count < len(lst):
score = input(f"请{lst[count]}输入分数(1~10):")
if score.isdigit():
fen=int(score)
if fen <= 10 and fen >= 5:
score_lst.append(fen)
count += 1
else:
print("分数不合规,请重新打分")
else:
print("分数格式有误.请重新输入")
print(score_lst)
Q19: 使用冒泡排序
# 要求:给出一个纯数字列表,对列表进行升序
# 思路:核心就是数据交换
# 1.完成a和b的数据交换,例如a = 10,b = 11,交换之后,a=11,b=10
# 2.循环列表,比较a[i]和a[i+1]的大小,如果a[i]>a[i+1],则进行数据交换,本次循环结束时,列表中最大的
# 元素会移动到列表最右端
# 3.反复执行2的操作,就可以把整个列表进行升序排列,也就是简单的冒泡排序
lst=[66,23,4,5,6,7,888,6,2,4,554,658,8,54444,]
for j in range(len(lst)):
for i in range(len(lst)-1):
if lst[i] > lst[i+1]:
lst[i],lst[i+1] = lst[i+1],lst[i]
print(lst)
# Q20: 统计各个省的车牌出现的次数
重点:复习字典的查询,dict.get(key,返回值=None),有就返回value,没有就返回None
cars=['鲁***','鲁***','京***','黑***','沪***','黑***']
locals={'沪':'上海','京':'北京','黑':'黑龙江','鲁':'山东'}
result={}
for c in cars:
name=c[0]
prov=locals[name]
if result.get(prov):
result[prov] += 1
else:
result[prov] = 1
print(result)
# Q21: 现有一个名为t1的文件,内容如下:
apple 10 3
tesla 10000 1
chicken 10 3
需求:把这些信息通过文件读取的方式写到一个列表中,格式如[{'name': 'apple', 'price': '10', 'amount': '3'},..]
重点:巧用解构来提取list里面的内容,不要用老思维去新建一个空的dic!
f = open("t1",mode="r",encoding="utf-8")
lst=[]
for line in f:
a,b,c=line.strip().split()
dic={"name":a,"price":b,"amount":c}
lst.append(dic)
print(lst)
# Q22:现有一个名为t2的文件,内容如下:
name:apple price:10 amount:3 year:2012
name:tesla price:100000 amount:2 year:2013
需求:处理t2,构建成如下数据类型:[{'name':'apple','price':10,'amount':3},,,,]并计算出总价钱
重点:每一行都是一个dic,理解在什么地方新建空dic;对每一行的每一个元素进行循环;再次利用列表的解构;怎么样去掉year?
f = open("t2",mode="r",encoding="utf-8")
lst=[]
for line in f:
data=line.strip().split()
dic={}
for el in data:
k,v = el.split(':')
if k != "year":
dic[k] = v
lst.append(dic)
print(lst)
sum = 0
for i in lst:
sum += int(i["price"])*int(i["amount"])
print(sum)