1.读取一个python源码文件,显示除了以#号开头的行以外的所有行。并打印输出#号开头的行数。
# 创建test1.py文件,并写入内容
f = open('test1.py', 'w', encoding='utf-8')
f.write("# @Time:2022/1/28 15:57\n# @Author: LA\n"
"key_list = []\nvalue_list = []")
f.close()
# 方法一
# 打开test1.py文件
f = open('test1.py', 'r', encoding='utf-8')
ls = f.readlines()
f.close()
f = open('test1.py', encoding='utf-8')
j = len(ls)
for i in range(j):
line = f.readline()
if line[0] == '#':
print(f'以 #号 开头行行数:{i+1}')
else:
print(line, end="")
f.close()
# 方法二
f = open('test1.py', encoding='utf-8')
ls = f.readlines()
for index,line in enumerate(ls):
if line.startswith('#'):
print(f'以 #号 开头行行数:{index+1}')
else:
print(line, end="")
f.close()
2.写一个加法计算器。提示用户输入两个数字,再将它们相加并打印结果。在用户输入的任何一个值不是数字时都捕获异常,并打印一条友好的错误消息。应用异常处理和循环语句,直到用户输入”N“结束程序。
对编写的程序测试:先输入两个数字,再输入一些文本而不是数字。
def addtion(m, n):
'''
加法计算器
:param m:第一个数字
:param n: 第二个数字
:return: 两数和
'''
while True:
try:
result = int(m) + int(n)
print("结果:", result)
m = input("请输入第一个数字,输入'N'程序终止:")
if m == 'N':
break
else:
n = input("请输入第二个数字,输入'N'程序终止:")
if n == 'N':
break
except BaseException:
print("输入错误,请重新输入!")
m = input("请输入第一个数字:")
n = input("请输入第二个数字:")
m = input("请输入第一个数字:")
n = input("请输入第二个数字:")
addtion(m, n)
3.有文件 t1.txt 里面的内容为
1,吴彦祖,22,13812346543,警察
2,金城武,23,13698763214,学生
3,彭于晏,18,13565478921,运动员
利用文件操作,将其构造成如下数据类型。输出到文件t2.txt中。
[
{'id':'1','name':'吴彦祖','age':'22','phone':'13812346543','job':'警察'},
{'id':'2','name':'金城武','age':'23','phone':'13698763214','job':'学生'},
... ...
]
# 写入文件
f = open('t1.txt', 'w', encoding='utf-8')
f.write('1,吴彦祖,22,13812346543,警察\n2,金城武,23,13698763214,学生\n3,彭于晏,18,13565478921,运动员')
f.close()
f1 = open('t1.txt', encoding='utf-8')
f2 = open('t2.txt', 'w', encoding='utf-8')
ls =[]
content = f1.readlines()
for line in content:
info = dict()
# print(f'{line}', end="")
line = line.split(',')
info['id'] = line[0]
info['name'] = line[1]
info['age'] = line[2]
info['phone'] = line[3]
info['job'] = line[4].strip('\n')
ls.append(info)
f2.write('[\n')
for l in ls :
f2.write(str(l)+'\n')
f2.write(']')
f1.close()
f2.close()
# 测试
print(ls)
补充:【综合练习】
完成用户注册/登陆功能。
****************************** 操作编码 操作 [0] 注册 [1] 登录 ****************************** 请输入你要进行的操作编码:
注册:
(1)提示用户输入,用户名和密码,其中密码需要输入2次。
提示用户名只能为字母、下划线和数字;密码不能超过8位,密码只能为数字或大小写字母
(2)注册成功后,账户密码记录在文件中 (user.txt)
内容格式可以为 姓名:密码
(3)用户名不能重复。输入用户名重复,需要提示用户重新输入。
--------------注册-------------- 请输入用户名:abc 用户名已存在 请重新输入用户名:
(4)检测两次密码如果不同,提示两次密码不一致,
检测两次密码如果相同,确认注册成功。
--------------注册-------------- 请输入用户名:abc 请输入密码:123456 请再次输入密码:654321 密码不一致 请再次输入密码:
登陆:
(1)用户登录时,进行三次校验,都不对,记录黑名单。
黑名单保存在文件中:blacklist.txt
--------------登陆-------------- 请输入用户名:abc 请输入密码:123456 密码不正确 请再次输入密码:654321 密码不正确 您还有1次机会 请再次输入密码:987654 密码3次错误,禁止登陆,请联系管理员。
(2)如果是黑名单的用户,则禁止再次登录
def register():
print('注册'.center(30, '-'))
print("【提示用户名只能为字母、下划线和数字;密码不能超过8位,密码只能为数字或大小写字母】")
f = open('user.txt', 'a+', encoding='utf-8') # 追加写
f.seek(0)
# 处理用户名输入
while True:
count = 0
userName = input("请输入用户名:")
# 判断用户名输入是否符合标准
for s in list(userName):
if s.isalnum() or s == "_":
continue
else:
print("【用户名只能为字母、下划线和数字!】")
count = count + 1
break
# 验证用户名是否存在
content = f.readlines()
for user in content:
if userName == user.split(':')[0]:
print("【用户名已经存在】")
count = count + 1
break
# while循环的终止条件
if count == 0:
break
f.close()
# 处理密码输入
while True:
passWord1 = input("请输入密码:")
if len(passWord1) <= 8 and passWord1.isalnum():
passWord2 = input("请再次输入密码:")
if passWord2 != passWord1:
print("【密码不一致,请重新输入密码】")
else:
print("注册成功!")
break
else:
print("【密码格式有误:密码不能超过8位,密码只能为数字或大小写字母】")
continue
# 将用户名和密码写入到user2.txt文件中
f = open('user.txt', 'a+', encoding='utf-8')
f.write(f'{userName}:{passWord1}\n')
f.close()
# register() 注册测试
def login():
print("登入".center(30, '-'))
list1 = []
list2 = []
blacklist = []
f = open('user.txt', 'r', encoding='utf-8')
content = f.readlines()
for cont in content:
list1.append(cont.split(":")[0].replace('\n', ""))
list2.append(cont.split(":")[1].replace('\n', ""))
f.close()
f = open('blacklist.txt', 'a+', encoding='utf-8')
f.seek(0)
content = f.readlines()
userName = input("请输入用户名:")
for cont in content:
cont = cont.replace('\n', "")
blacklist.append(cont)
if userName in blacklist:
print("【账号在黑名单中,请联系管理员】")
elif userName not in list1:
print("【找不到用户名,请检查用户名是否有误,或重新注册】")
else:
count = 3
while True:
passWord = input("请输入密码:")
if userName in list1:
i = list1.index(userName)
if passWord == list2[i]:
print("【登入成功!】")
break
else:
if count == 2:
count -= 1
print("【密码输入错误,请重新输入密码】")
print(f'您还有{count}次机会')
continue
elif count == 1:
print("【密码3次错误,禁止登陆,请联系管理员】")
f.write(str(userName) + '\n')
break
else:
count = count - 1
print("【密码错误,请重新输入密码】")
continue
else:
print(f'【用户名{userName}不存在】')
f.close()
# login() 登入测试
def main():
while True:
print("*" * 30)
print("操作编码\t\t操作")
print("[0]\t\t\t注册")
print("[1]\t\t\t登入")
print("*" * 30)
opera = input("请输入您要进行的操作编码:")
if opera == '0':
register() # 调用register()函数
elif opera == '1':
login() # 调用login()函数
else:
print("【输入错误,请重新输入操作编码】")
main()