鱼C论坛

 找回密码
 立即注册
查看: 2099|回复: 7

[已解决]这是个课后题 能运行 但是无法达到老师那样的程度 而且还会在运行的时候出错

[复制链接]
发表于 2021-1-2 15:46:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
dict = {}
def new():
    x = "请输入要注册的用户名:"
    while True:
        name = input(x)
        if name in dict:
            print("用户名存在请重新输入:")
            continue
        else:
            break

    mima = input("请输入密码:")
    dict[name] = mima
    print("注册成功!!")


def old():
    y = "请输入用户名:"
    while True:
        t = input(y)
        if t not in dict():
            print("没有找到给用户名!")
            continue
        else:
            break
            
    h = input("请输入密码:")
    if h == dict.get(y):
        print("登录成功")
    else:
        print("密码错误!")

def show():
    m = ''' 请选择需要执行的命令
            新建用户:A/a
            登录请输入:B/b
            退出程序:C/c
            请输入命令:'''
    while True:
        i = input(m)
        if i not in 'AaBbCc':
            print("您输入的命令有问题,请重新输入:")
            continue
        if i =='C' or 'c':
            break
        

    if i =='A' or 'a':
        new()
    if i =='B' or 'b':
        old()
   

show()

跪求大佬 指正
最佳答案
2021-1-2 16:45:58
user = {}       # 变量名应该避开 Python 保留字、函数名 

def new():
    print()
    print('【创建用户】')
    while True:
        name = input("请输入要注册的用户名:") . strip()
        if name and name in user . keys():
            print("用户名已经存在,请重新输入:")
        else:
            break
    if name :
        user[name] = input("请输入密码:") . strip()
        print("注册成功!!")

def old():
    if user :
        print()
        print('【用户登录】')
        while True:
            t = input("请输入用户名:") . strip()
            if t and t not in user . keys():
                print("没有找到给此用户['%s']!" % t)
            else:
                break
        if t:
            if user[t] == input("请输入密码:") . strip():
                print("登录成功")
            else:
                print("*** 抱歉,密码错误!")
    else:
        print('\n*** 抱歉,当前用户列表为空!\n')
      
def show():
    m = ''' 请选择需要执行的命令
            新建用户:A/a
            登录请输入:B/b
            退出程序:C/c
            请输入命令:'''
    while True:
        print()
        i = input(m) . strip()
        if i not in 'AaBbCc':
            print("您输入的命令有问题,请重新输入:")
        elif i == 'C' or i == 'c':
            break
        elif i == 'A' or i == 'a':
            new()
        else :
            old()
   
show()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-2 16:32:31 | 显示全部楼层
dict = {}
def new():
    x = "请输入要注册的用户名:"
    while True:
        name = input(x)
        if name in dict:
            print("用户名存在请重新输入:")
            continue
        else:
            break

    mima = input("请输入密码:")
    dict[name] = mima
    print("注册成功!!")


def old():
    y = "请输入用户名:"
    while True:
        t = input(y)
        if t not in dict():
            print("没有找到给用户名!")
            continue
        else:
            break
            
    h = input("请输入密码:")
    if h == dict.get(y):
        print("登录成功")
    else:
        print("密码错误!")

def show():
    m = ''' 请选择需要执行的命令
            新建用户:A/a
            登录请输入:B/b
            退出程序:C/c
            请输入命令:'''
    while True:
        i = input(m)
        if i not in 'AaBbCc':
            print("您输入的命令有问题,请重新输入:")
            continue
        if i =='C' or i=='c':  #if 判断条件需要改
            break
        #下面这一段缩进后移一格就好了
        if i =='A' or i== 'a':
            new()
        if i =='B' or i== 'b':
            old()
   

show()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-2 16:36:59 | 显示全部楼层
本帖最后由 昨非 于 2021-1-2 16:40 编辑


(修改在44行以后)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2021-1-2 16:41:41 | 显示全部楼层
昨非 发表于 2021-1-2 16:36
i == 'A' or 'a'这样的写法是不对的
==优先级高于or的

if i =='A' or 'a':  并不是因为==优先级的问题而是因为
if i =='A' or 'a':==>其实相当于 if i =='A'   和 if 'a'  ,也就是说这样的条件结果永远都是True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-2 16:45:58 | 显示全部楼层    本楼为最佳答案   
user = {}       # 变量名应该避开 Python 保留字、函数名 

def new():
    print()
    print('【创建用户】')
    while True:
        name = input("请输入要注册的用户名:") . strip()
        if name and name in user . keys():
            print("用户名已经存在,请重新输入:")
        else:
            break
    if name :
        user[name] = input("请输入密码:") . strip()
        print("注册成功!!")

def old():
    if user :
        print()
        print('【用户登录】')
        while True:
            t = input("请输入用户名:") . strip()
            if t and t not in user . keys():
                print("没有找到给此用户['%s']!" % t)
            else:
                break
        if t:
            if user[t] == input("请输入密码:") . strip():
                print("登录成功")
            else:
                print("*** 抱歉,密码错误!")
    else:
        print('\n*** 抱歉,当前用户列表为空!\n')
      
def show():
    m = ''' 请选择需要执行的命令
            新建用户:A/a
            登录请输入:B/b
            退出程序:C/c
            请输入命令:'''
    while True:
        print()
        i = input(m) . strip()
        if i not in 'AaBbCc':
            print("您输入的命令有问题,请重新输入:")
        elif i == 'C' or i == 'c':
            break
        elif i == 'A' or i == 'a':
            new()
        else :
            old()
   
show()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-2 16:47:48 | 显示全部楼层
qq1151985918 发表于 2021-1-2 16:41
if i =='A' or 'a':  并不是因为==优先级的问题而是因为
if i =='A' or 'a':==>其实相当于 if i =='A'  ...

这不是优先级问题吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-2 16:52:19 | 显示全部楼层
昨非 发表于 2021-1-2 16:47
这不是优先级问题吗

不是优先级而是逻辑根本错误  if 'a' : 和  if True : 是划等号的也就是他所有的判断全部满足if条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-5 23:30:49 | 显示全部楼层
楼主记得及时结帖设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 20:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表