Python文件读写和异常处理练习题

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()

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值