Saint_HUFS 发表于 2020-4-20 07:14:22

关于第26课课后习题

本帖最后由 Saint_HUFS 于 2020-4-20 07:56 编辑

dict={}
def N():
    while 1:
      user=input('请输入用户名n:')
      if userin dict:
            print('此用户名已经被使用,请重新输入:')
            continue
      else:
            break

    pw = input('请输入密码:')
    dict = pw
    print('注册成功,赶紧试试登录吧!')

def E():
    while 1:
      user = input('请输入用户名e:')
      if user not in dict:
            print('您输入的用户名不存在,请重新输入:',end="")
            continue
      else:
            while 0:
                pw=input('请输入密码:')
                if pw==dict.get(user):
                  print('欢迎进入XXOO系统,请点击右上角的x结束程序')
                  break
                else:
                  print('您输入的密码错误,请重新输入。',end="")
while 1:
    print('新建用户:N/n')
    print('登录账号: E/e')
    print('退出程序:Q/q')
    code = input('请输入指令代码m:')
    if code == 'N' or 'n':
      N()
      continue
    if code == 'E' or 'e':
      E()
      continue
    if code == 'Q' or 'q':
      break


请问 为什么已经写了
if code == 'N' or 'n':
      N()
      continue
    if code == 'E' or 'e':
      E()
      continue
    if code == 'Q' or 'q':
      break

但是每次运行之后即使输入E或者 e 也还是从开头 N()开始运行,if 条件句根本没有用一样,只是按顺序运行,麻烦大神解答一下,谢谢
(为了区别,特地用input(‘请输入用户名n ’) 和input('请输入用户名e')来区分 N( )函数 新用户注册和 E() 函数老用户登录

txxcat 发表于 2020-4-20 07:25:14

本帖最后由 txxcat 于 2020-4-20 07:29 编辑

if code == 'N' or 'n':,你的表达式错了,这个是code与'N'比对后的结果再和'n'比对,当code是'N'以外的情况下,是False or 'n',结果是'n',非空字符,相当于if True,当然就运行N()了。
>>> code='n'
>>> code == 'N' or 'n'
'n'
>>> code='N'
>>> code == 'N' or 'n'
True
>>> code='e'
>>> code == 'N' or 'n'
'n'
应该改成:if code == 'N' or code == 'n',这样才能返回你需要的值,后面的都要这样改。不过我喜欢另一种写法:if code.strip().lower() == 'n',我感觉这样严谨简洁一些,尤其是碰到长字符串比对,如'exit'、'quit'这一类的时候。

Saint_HUFS 发表于 2020-4-20 07:47:49

txxcat 发表于 2020-4-20 07:25
if code == 'N' or 'n':,你的表达式错了,这个是code与'N'比对后的结果再和'n'比对,当code是'N'以外的情 ...

啊 懂了,谢谢!!!!
页: [1]
查看完整版本: 关于第26课课后习题