第一周作业

1 练习题
1、简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释型

1.编译型:类似于百度翻译,执行效率高  (c,java)
2.解释型:类似于同声传译,开发效率高 (python: 后出现的能使用前出现的(资源),反过来不行)

2、执行 Python 脚本的两种方式是什么

交互模式和脚本文件方式

3、Pyhton 单行注释和多行注释分别用什么?

单行注释    #
多行注释    ,,, ,,,   """ """

4、布尔值分别有什么?

一个True一个False

5、声明变量注意事项有那些?

1. 可以由数字、字母、下划线组合
2. 不能以数字开头
3. 不能与系统关键字保留字重名
4. 见名知意,建议使用_连接语法(驼峰 owenName OwenName | _连接  owen_name),一般_开头或结尾都有特殊含义

6.如何查看变量在内存中的地址?

id(x)

7.写代码

  • 1.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!
usr = input('usr:')
pwd = input('pwd:')
if usr == 'seven' and pwd == '123':
    print('登录成功')
else:
    print('登录失败')
  • 2.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
count = 1
# while True:
#     if count > 3:
#         break
while count <= 3:
    usr = input('usr:')
    pwd = input('pwd:')
    if usr == 'seven' and pwd == '123':
        print('登录成功')
        break
    else:
        print('登录失败')
        count += 1
  • 3.实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
users = ['seven', 'alex']

# 新增用户的接口
users.append('abc')

count = 1
# while True:
#     if count > 3:
#         break
while count <= 3:
    usr = input('usr:')
    pwd = input('pwd:')
    if usr in users and pwd == '123':
        print('登录成功')
        break
    else:
        print('登录失败')
        count += 1

8.写代码
a. 使用while循环实现输出2-3+4-5+6…+100 的和

count=2
sum=0
sum_ji=0
while count < 101:
    if count%2 == 0:
        sum = sum + count
    else:
        sum_ji = sum_ji + count
    count+=1
print(sum-sum_ji)

b. 使用 while 循环实现输出 1,2,3,4,5, 7,8,9, 11,12 使用 while 循环实现输出 1-100 内的所有奇数

count=1
while count < 13:
    if count == 6:
        pass
    else:
        print(count)
    count+=1
count = 1
while count < 101:
    if count%2 == 1:
        print("奇数",count)
    count += 1

e. 使用 while 循环实现输出 1-100 内的所有偶数

count = 1
while count < 101:
    if count%2 == 0:
        print("偶数",count)
    count += 1

9.现有如下两个变量,请简述 n1 和 n2 是什么关系?

n1 = 123456
n2 = n1

print(id(n2))
print(id(n1))

# n1和n2共用同一个内存地址

2 作业:编写登陆接口

基础需求:

让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序

dic={
    'egon1':{'password':'123','count':0},
    'egon2':{'password':'123','count':0},
    'egon3':{'password':'123','count':0},
}

while True:
    name=input('username>>: ')

    if not name in dic:
        print('用户不存在')
        continue
    if dic[name]['count'] > 2:
        print('尝试次数过多,锁定')
        continue

    password=input('password>>: ')


    if password == dic[name]['password']:
        print('登录成功')
        break
    else:
        print('用户名或密码错误')
        dic[name]['count']+=1

升级需求:

可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)

#db.txt内容:egon1|egon2|
dic={
    'egon1':{'password':'123','count':0},
    'egon2':{'password':'123','count':0},
    'egon3':{'password':'123','count':0},
}

count=0
while True:
    name=input('u>>: ')
    if name not in dic:
        print('用户不存在')
        continue

    with open('db.txt','r') as f:
        lock_users=f.read().split('|')
        if name  in lock_users:
            print('用户%s已经被锁定' %name)
            break

    if dic[name]['count'] > 2:
        print('尝试次数过多,锁定')
        with open('db.txt','a') as f:
            f.write('%s|' %name)
        break

    password=input('p>>: ')

    if password == dic[name]:
        print('登录成功')
        break
    else:
        print('用户名或密码错误')
        dic[name]['count']+=1

综合题

读用户信息文件:用什么数据结构存储用户信息
写用户信息文件:写什么内容到用户信息文件
用户登录逻辑


usr = one
[[one, 123, 0], [two, 000, 0]]
{"one": [123, 0], "two": [000, 0]}
{"one": {"pwd": 123, "locked": 0}, "two": {"pwd": 000, "locked": 0}}
def read_user():
    dic = {}
    with open('user.info', 'r', encoding='utf-8') as f:
        data = f.read()  # 所有内容
        if data:  # 读到了信息,才进行数据分析
            user_infos = data.split('\n')  # 换行分割成一个个用户的信息
            for info in user_infos:
                if info:  # 用户信息正常
                    usr, pwd, lock = info.split('|')  # 每个用户的三个信息分别取出
                    # 为什么要这样转化: "one": {"pwd": 123, "locked": 0}
                    dic[usr] = {"pwd": pwd, "locked": int(lock)}
    return dic
# print(read_user())

def write_user(dic):
    info = ''
    for key, value in dic.items():  # "one", {"pwd": 123, "locked": 0}
        usr = key
        pwd = value['pwd']
        lock = value['locked']
        info += '%s|%s|%s\n' % (usr, pwd, lock)
    # print(info)
    with open('user.info', 'w', encoding='utf-8') as f:
        f.write(info)

# dic = read_user()
# dic['one']['locked'] = 1
# dic['one']['pwd'] = 456
# write_user(dic)


is_over = False
while not is_over:
    usr = input('usr:')

    user_dic = read_user()  # 拿到用户信息

    if usr in user_dic:  # 账号存在
        count = 1
        while True:
            if user_dic[usr]['locked']:  # 锁定了
                print('该账号已锁定')
                break

            if count > 3:
                user_dic[usr]['locked'] = 1  # 改内存信息并不能持久化锁定状态
                # 持久化锁定状态一定要写入文件
                write_user(user_dic)
                print('该账号已被锁定')
                # 内存循环体要停止外层循环,通过改变bool类型变量的值
                is_over = True
                break
            pwd = input('pwd:')
            if pwd == user_dic[usr]['pwd']:
                print('登录成功')
                is_over = True
                break
            else:
                print('密码错误')
                count += 1

第二周作业

1.统计元组中所有数据属于字符串的个数,提示:isinstance()
数据:t1 = (1, 2, ‘3’, ‘4’, 5, ‘6’)
结果:3

法一:

t1 = (1, 2, '3', '4', 5, '6')
count = 0
for i in t1:
    if type(i) == str:
        # print(">>>",i,type(i))
        count += 1
print(count)

法二:

t1 = (1, 2, '3', '4', 5, '6')
count = 0
for v in t1:
    if isinstance(v, str):
        count += 1
print(count)

2.将以下数据存储为字典类型
数据:info = “name:Owen|age:18|gender:男”
结果:{‘name’: ‘Owen’, ‘age’: 18, ‘gender’: ‘男’}
注:年龄存储为数字类型

#字符串的split、join
#list、dict的增删改查
user = "name:Owen|age:18|gender:男"
dic = {}
for info in user.split('|'):
    key, value = info.split(":")
    if value.isdigit():
        value = int(value)
    dic[key] = value
print(dic)

3.完成数据的去重
数据:t3 = (1, 2, 1, 2, 3, 5, 9)
结果:t3 = (1, 2, 3, 5, 9)
注:从不考虑顺序、考虑顺序两方面完成

t3 = (3, 1, 2, 1, 2, 3, 5, 9)
print(tuple(set(t3)))

t = []
for v in t3:
    if v not in t:
        t.append(v)
print(tuple(t))

考虑排序

t3 = (1, 2, 1, 2, 3, 5, 9)
t3 = list(t3)
t3.sort()   #sort 排序
t3 = list(set(t3))  #集合去重
t3 = tuple(t3)
print(t3)

4.计算元组中所有可以转换为数字的数据的总和
数据:t4 = (10, ‘abc’, ‘100’, ‘3’)
运算结果:113

t4 = (10, 'abc', '100', '3')
sum = 0
#遍历每一个元素,把每个元素都转为字符串,然后用它isdigit判断是否为数字,判断通过的转为数字进行计算
for num in t4:
    num = str(num)
    if num.isdigit():   #判断数字
        num = int(num)
        # print(num,type(num))
        sum += num
print(sum)
t4 = (10, 'abc', '100', '3')
sum = 0
for v in t4:
    # if isinstance(v, int):
    #     sum += v
    # elif v.isdigit():
    #     sum += int(v)

    # if isinstance(v, int) or v.isdigit():
    #     sum += int(v)

    if not (isinstance(v, int) or v.isdigit()):
        continue
    sum += int(v)
print(sum)

5.将数据转换类型存储
原数据:dic = {‘name’: ‘Owen’, ‘age’: 18, ‘gender’: ‘男’}
处理后:info = [(‘name’, ‘Owen’), (‘age’, 18), (‘gender’, ‘男’)]

dic = {'name': 'Owen', 'age': 18, 'gender': '男'}
info = []

for k, v in dic.items():
    info.append((k, v))

print(info)  # [('name', 'Owen'), ('age', 18), ('gender', '男')]
print(list(dic.items()))

info = [['name', 'Owen'], ('age', 18), ('gender', '男')]
print(dict(info))

拓展:选做
1.计算元组中所有可以转换为数字的数据的总和
数据:t4 = (10, ‘abc’, ‘100’, ‘3’, ‘壹’, ‘肆’, [1000], (10000,))
运算结果:11118
提示:

  • 利用字符串isnumeric()判断汉字
  • 利用字典{‘壹’: 1 …}将汉字转换为数字
  • 利用isinstance()将list和tuple中数据取出来
  • 先将所有转化为数字的数据存放在一个单列集合中,在做运算
num_map = {
    '壹': 1,
    # ...
    '肆': 4
}
t4 = (10, 'abc', '100', '3', '壹', '肆', [1000, 0], (10000,))
# print(t4)
sum = 0
for v in t4:
    if isinstance(v, int):
        sum += v
    elif isinstance(v, (list, tuple)):
        for num in v:
            sum += num
    elif v.isdigit():
        sum += int(v)
    elif v in num_map:
        sum += num_map[v]

print(sum)
t4 = (10, 'abc', '100', '3', '壹', '肆', [1000], (10000,))
num_map = {'壹': 1, '贰': 2, '仨': 3,
           '肆': 4, '伍': 5, '陆': 6,
           '柒': 7, '捌': 8, '玖': 9, '拾': 10}
nums = []
for v in t4:
    if isinstance(v, int):
        nums.append(v)
    elif isinstance(v, str):
        if v.isdigit():
            nums.append(int(v))
        elif v.isnumeric():
            nums.append(num_map[v])
    elif isinstance(v, tuple) or isinstance(v, list):
        # 只考虑该具体数据,不考虑更复杂情况
        for n in v:
            nums.append(n)
total = sum(nums)  # python内置方法
print(total)

2.完成录入电话本
需求:

-- 从键盘中录入姓名(不区分大小写):
    -- 姓名必须是全英文组成,不是则重新录入姓名,如果是q,代表退出
-- 从键盘中再录入电话:
    -- 电话必须为数字且长度必须是11位(不能转换为数字)
-- 如果出现姓名相同,则保留最后一次电话号码
-- 形成的数据是有电话分组的,如:第一次录入Owen,13355667788,则会形成
    -- {
        'O': {
            'Owen': '13355667788'
        }
    }

最终数据,分组名一定大写:
{
    'E': {
        'egon': '17788990000',
        'engo': '16633445566'
    },
    'O': {
        'Owen': '13355667788'
    }
}

法一:

phone_dic = {}
while True:
    name = input('name: ')
    if name == 'q':
        break
    if not name.isalpha():
        continue

    while True:
        phone = input('phone: ')
        if not (phone.isdigit() and len(phone) == 11):
            continue

        # 根据名字拿到分组
        group = name[0].upper()
        # 分组第一次出现,新建分组,不是第一次出现,什么都不做
        # phone_dic.setdefault(group, {})
        if group not in phone_dic:
            phone_dic[group] = {}
        else:
            pass
        # 默认值为什么要采用字典:每个分组下可以存放多个
        # 人与电话对对象关系,这种对象关系自然采用字典存储
        phone_dic[group][name] = phone
        print('添加成功')
        break

print(phone_dic)

法二:

# 电话本
phone_map = {}
# 是否退出系统
is_over = False
while not is_over:
    # 姓名初始制空,完成只有姓名输入正确才录入电话
    name = ''
    while True:
        # 姓名必须录入正确
        if not name:
            name = input("name:")
            if name == 'q':
                # 退出系统
                is_over = True
                break
            elif not name.isalpha():
                # 录入错误,置空名字
                print('name error')
                name = ''
                continue
        # 录入电话,保证是11位的数字字符串
        phone = input("phone:")
        if not (phone.isdigit() and len(phone) == 11):
            continue

        # 取组名
        group = name[0:1].upper()
        # 对于组名的操作:无组名,添加分组 | 有组名,不操作
        phone_map.setdefault(group, {})
        phone_map[group][name] = phone
        # 一条信息添加完毕,重置信息
        name = ''
        phone = ''
        print('录入成功')
print(phone_map)

第三周作业

1.统计文件数据中字母e出现的次数(不区分大小写)
文件内容:hello friend, can you speak English!
结果:4
分析:将文件内容读出,然后统计读出的字符串串中字符e的个数(字符串串count功能)

with open('1', 'r', encoding='utf-8') as f:
    data = f.read().lower()
    print(data.count('e'))

2.统计文件数据中出现的的所有字符与该字符出现的个数(不区分大小写,标点与空格也算)
文件内容:hello friend, can you speak English!
结果:

{
'h': 1,
'e': 4,
'l': 3,
'o': 2,
' ': 5,
...
}

分析:将文件内容读出,然后统计读出的字符串中每个字符的个数,形成字段(for遍历读取的字符串)

with open('zuoye.txt', 'r', encoding='utf-8') as f:
    data = f.read()
# print(data)   #hello friend, can you speak English!
s=set()    #集合
for i in data:
    s.add(i)
# print(s)  #{'l', 's', 'd', 'o', '!', 'k', 'f', 'p', ' ', 'E', 'h', 'y', 'g', 'i', 'a', 'c', 'r', 'u', 'e', ',', 'n'}

dic = {}  #字典
for t in s:
    # print(t,data.count(t))
    dic[t] = data.count(t)

print(dic)  #{'d': 1, 'e': 3, 'E': 1, 'g': 1, 'k': 1, 's': 2, '!': 1, ',': 1, 'a': 2, 'p': 1, 'c': 1, 'y': 1, 'l': 3, 'i': 2, 'h': 2, 'r': 1, 'o': 2, ' ': 5, 'n': 3, 'u': 1, 'f': 1}
dic = {}
with open('1', 'r', encoding='utf-8') as f:
    data = f.read().lower()
    for v in data:
        # if v not in dic:
        #     dic[v] = 1
        # else:
        #     dic[v] += 1
        # 如果dic中没有v这个key,就添加并设置默认值,如果有啥事不干
        # dic.setdefault(v, 0)
        if v not in dic:
            dic[v] = 0
        else:
            pass
        dic[v] += 1

print(dic)

3.读取文件内容,分析出所有的账号及对应的密码
文件内容:owen:123456|egon:123qwe|liuxx:000000
结果:

{
'owen': '123456',
'egon': '123qwe',
'liuxx': '000000'
}

分析:将文件内容读出,然后按|拆分出 账号:密码 格式的子字符串,再按:拆分成 账号及密码,存放到字典中

法一:

with open('zuoye03.txt', 'r', encoding='utf-8') as f:
    data = f.read()

data = (data.split('|'))   #['owen:123456', 'egon:123qwe', 'liuxx:000000']

info_dic = {}
for msg in data:
    k,v = msg.split(':')
    info_dic[k] = v
print(info_dic)    #{'owen': '123456', 'egon': '123qwe', 'liuxx': '000000'}

法二:

info = 'owen:123456|egon:123qwe|liuxx:000000'
dic = {}
for user in info.split('|'):
    usr, pwd = user.split(':')
    dic[usr] = pwd
print(dic)

4.在题3的基础上,账号密码已经被存储在文件中,完成用户登录成功或失败(只做一次性判断)
⽂文件内容:owen:123456|egon:123qwe|liuxx:000000
需求:输入账号、密码,然后进行登录判断,账号密码均正确打印登录成功,否则打印登录失败
分析:先完成题3,分析出账号密码字典,然后拿输⼊入的账号密码与字典中数据进行校验

法一:

with open('zuoye03.txt', 'r', encoding='utf-8') as f:
    data = f.read()

data = (data.split('|'))   #['owen:123456', 'egon:123qwe', 'liuxx:000000']

info_dic = {}
for msg in data:
    k,v = msg.split(':')
    info_dic[k] = v
# print(info_dic)    #{'owen': '123456', 'egon': '123qwe', 'liuxx': '000000'}

count = 0
while count < 3:
    name = input('>>>请输入用户:')
    if name not in info_dic:
        print('用户不存在')
        continue
    count += 1

    password = input('>>>请输入密码:')
    if password == info_dic[name]:
        print('登录成功')
        break
    else:
        print("用户名或密码错误")

法二

info = 'owen:123456|egon:123qwe|liuxx:000000'
dic = {}
for user in info.split('|'):
    usr, pwd = user.split(':')
    dic[usr] = pwd

usr = input('usr:')
pwd = input('pwd:')
if usr in dic and pwd == dic[usr]:
    print('登录成功')
else:
    print('登录失败')

# if usr in dic:
#     if pwd == dic[usr]:
#         print('登录成功')
#     else:
#         print('密码错误')
# else:
#     print('账号不存在')

5.在题3的基础上,完成用户注册的功能(只做一次性判断)
文件内容:owen:123456|egon:123qwe|liuxx:000000
需求:输入注册的账号、密码,账号已存在的打印账号已存在,注册失败,反正打印注册成功,并将新账号密码录入文件
结果:如果输入mac、123123 => owen:123456|egon:123qwe|liuxx:000000|mac:123123
分析:先完成题3,分析出账号密码字典,然后拿输⼊入的注册账号与字典中数据进行校验,如果校验没有新账号
– 1.采用 w 模式写文件,可以在读取文件的内容后拼接 |mac:123123 字符串,将拼接后的总字符串一次性写入
– 2.采用 a 模式写文件,可以直接追加写入 |mac:123123 字符串

with open('zuoye03.txt', 'r', encoding='utf-8') as f:
    data = f.read()

data = (data.split('|'))   #['owen:123456', 'egon:123qwe', 'liuxx:000000']

info_dic = {}
for msg in data:
    k,v = msg.split(':')
    info_dic[k] = v
# print(info_dic)    #{'owen': '123456', 'egon': '123qwe', 'liuxx': '000000'}

while True:
    name = input(">>> 请输入要注册的用户:")
    if name not in info_dic:
        password = input(">>> 请输入注册用户的密码:")
        with open('zuoye03.txt', 'a', encoding='utf-8') as f:
            f.write('|')
            f.write(name)
            f.write(':')
            f.write(password)
            f.flush()

        user_info = "恭喜,您的用户已创建成功。\n 用户:%s ,密码:%s" %(name,password)
        print(user_info)
        break
    else:
        print("用户已存在,请输入其他用户名!!!")
        continue

拓展1.统计文件中大写字母、小写字母、数字及其他字符出现的次数
文件内容:Abc123,-+XYZopq000.?/
结果:
{
‘大写字母’: 4,
‘小写字母’: 5,
‘数字’: 6,
‘其他字符’: 6
}
分析:利用ASCII表,for循环遍历每一个字符value,eg:’a’ <= value <= ‘z’就代表是小写字母

dic = {}
info = 'Abc123,-+XYZopq000.?/'
for v in info:
    if 'a' <= v <= 'z':
        dic.setdefault('小写字母', 0)
        dic['小写字母'] += 1
    elif  'A' <= v <= 'Z':
        dic.setdefault('大写字母', 0)
        dic['大写字母'] += 1
    elif v.isdigit():
        dic.setdefault('数字', 0)
        dic['数字'] += 1
    else:
        dic.setdefault('其他', 0)
        dic['其他'] += 1
print(dic)

字符串比较:按从左到右,逐个字符进行ASCII值比较
print('a' > 'A')  # 97 > 65
print('呵呵abc'.encode('utf-8'))
print('\x61')
print('bc' > 'ad')
print('ab' > 'a')

拓拓展2.完成登录注册系统(从空⽂文件开始做)
需求分析:

1.可以循环登录注册,输入1代表选择登录功能,输入2代表注册功能,输入0代表退出,其他输入代表
输入有误,重输
2.用户的账号密码信息存放在usr.txt文件中,保证⽤用户注册成功后,重启系统,用户信息仍然保存
3.登录在账号验证通过才输入密码验证登录,账号验证三次失败自动进入注册功能,登录三次验证失败
自动退出系统
4.第一次注册,文件写入 账号:密码 信息,再次注册追加写入 |账号:密码 信息

so = int(input(">>登录请输入1"))

# 登录
if so == 1:
    with open('zuoye03.txt', 'r', encoding='utf-8') as f:
        data = f.read()

    data = (data.split('|'))   #['owen:123456', 'egon:123qwe', 'liuxx:000000']

    info_dic = {}
    for msg in data:
        k,v = msg.split(':')
        info_dic[k] = v
    # print(info_dic)    #{'owen': '123456', 'egon': '123qwe', 'liuxx': '000000'}

    count = 0
    while count < 3:
        name = input('>>>请输入用户:')
        if name not in info_dic:
            print('用户不存在')
            continue
        count += 1

        password = input('>>>请输入密码:')
        if password == info_dic[name]:
            print('登录成功')
            break
        else:
            print("用户名或密码错误")

if so == 2:
    # 注册
    with open('zuoye03.txt', 'r', encoding='utf-8') as f:
        data = f.read()

    data = (data.split('|'))   #['owen:123456', 'egon:123qwe', 'liuxx:000000']

    info_dic = {}
    for msg in data:
        k,v = msg.split(':')
        info_dic[k] = v
    # print(info_dic)    #{'owen': '123456', 'egon': '123qwe', 'liuxx': '000000'}

    while True:
        name = input(">>> 请输入要注册的用户:")
        if name not in info_dic:
            password = input(">>> 请输入注册用户的密码:")
            with open('zuoye03.txt', 'a', encoding='utf-8') as f:
                f.write('|')
                f.write(name)
                f.write(':')
                f.write(password)
                f.flush()

            user_info = "恭喜,您的用户已创建成功。\n 用户:%s ,密码:%s" %(name,password)
            print(user_info)
            break
        else:
            print("用户已存在,请输入其他用户名!!!")
            continue

if so == 0:
    quit()

法二:

def read_user():
    dic = {}
    with open('2', 'r', encoding='utf-8') as f:
        data = f.read()
        if data:  # 读到了信息,才进行数据分析
            user_infos = data.split('|')
            for info in user_infos:
                if info:  # 用户信息正常
                    usr, pwd = info.split(':')
                    dic[usr] = pwd
    return dic


def write_user(dic):
    info = ''
    for usr, pwd in dic.items():  # "one", {"pwd": 123, "locked": 0}
        info += '%s:%s|' % (usr, pwd)
    if info:
        info = info[:-1]  # 去掉最末尾的|
    with open('2', 'w', encoding='utf-8') as f:
        f.write(info)


# 一次性注册
# user_dic = read_user()
# usr = input('usr:')
# if usr not in user_dic:
#     pwd = input('pwd:')
#     user_dic[usr] = pwd
#     write_user(user_dic)
#     print('注册成功')
# else:
#     print('账号已存在')

is_over = False
while not is_over:
    cmd = input("""请输入:
0:<退出>  1:<登录>  2:<注册>
>>>: """)
    if cmd == '0':
        print('退出系统')
        break
    elif cmd in ['1', '2']:
        # 登录与注册都需要用户信息
        user_dic = read_user()

        if cmd == '1':
            print('登录功能')

            count = 1
            while True:
                if count > 3:
                    print('账号多次错误,去注册吧,孩子!')
                    cmd = '2'
                    break

                usr = input('usr:')
                if usr not in user_dic:
                    print('账号不存在,请查证')
                    count += 1
                    continue

                # 如果能往下走,代表账号输对了
                count = 1  # 重置账号失败的次数

                tag = 1
                while True:
                    if tag > 3:
                        print('密码错误次数过多,退出系统')
                        is_over = True
                        break

                    pwd = input('pwd:')
                    if user_dic[usr] != pwd:
                        print('密码错误')
                        tag += 1
                        continue

                    # 如果能接着往下,代表账号密码均正确
                    print('登录成功')
                    is_over = True
                    break
                break


        if cmd == '2':
            print('注册功能')

            usr = input('usr:')
            if usr not in user_dic:
                pwd = input('pwd:')
                user_dic[usr] = pwd
                write_user(user_dic)
                print('注册成功')
            else:
                print('账号已存在')
    else:
        print('指令有误,重新输入')
        continue

知识点:

while is_over:
    while True:
        # usr
        is_over = True
        while True:
            # pwd
            is_over = True
            break
        break
文档更新时间: 2019-05-09 14:38   作者:李延召