鱼C论坛

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

[已解决]【视频26】 课后作业

[复制链接]
发表于 2017-11-15 15:36:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 payton24 于 2017-11-15 16:58 编辑

题目要求建立一个用户登录程序。
逻辑还是比较简单的,但是有一段程序一直没跑出来,烦请看看。

while 1:
    print('''\n|---新建用户:N/n ---|
|---登陆账户:E/e ---|
|---退出程序:Q/q ---|''')
    Mydict = {}
    letter = input('|---请输入指令代号 :')
    if letter== 'N' or 'n':
        while True:
            name = input('请输入用户名:')
            if name in Mydict:        #第一次输入'小甲鱼',不执行。第二次输入‘小甲鱼’, 没弹出重新输入的提示。
                #name = input('此用户已经被使用,请重新输入:')      #此处重复了,已修改
                print('此用户已经被使用,',end='')
                continue  
            else:
                break
        password = input('请输入密码:')
        Mydict[name] = password
        print('注册成功,赶紧试试登陆吧(* ̄︶ ̄)')

#由于第一部分没完成,后面就没继续写了。
最佳答案
2017-11-15 16:45:40
本帖最后由 阿撩 于 2017-11-15 16:51 编辑

是因为楼主你的循环里面Mydict = {}
当把Mydict[name]=password第一次存入时,第二次循环,Mydict = {}时就清空了,所以不会出现提示已经有这个名字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-15 16:02:17 | 显示全部楼层
如果不在,你应该把它加到你的字典中去
在下面的else分支里面添加
Mydict.get(name)
或直接写
Mydict[name] = None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-15 16:22:55 | 显示全部楼层
BngThea 发表于 2017-11-15 16:02
如果不在,你应该把它加到你的字典中去
在下面的else分支里面添加
Mydict.get(name)

谢谢回答,不过我的意思是:
if name in Mydict:
    name = input('此用户已经被使用,请重新输入:')   
这段代码一直没有执行,不知道是怎么回事。

期望结果:
第一次输入'小甲鱼', 已通过Mydict[name] = password 的语句导入字典。
第二次输入'小甲鱼', 提示'此用户已经被使用,请重新输入:'。

实际运行:第二次输入没显示期望结果。

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

使用道具 举报

发表于 2017-11-15 16:45:10 | 显示全部楼层
payton24 发表于 2017-11-15 16:22
谢谢回答,不过我的意思是:
if name in Mydict:
    name = input('此用户已经被使用,请重新输入:') ...

仔细检查你的缩进,Mydict[name] = password 根本不在while循环中,当你第一次输入完以后,没有执行这样的操作,所以Mydict不会添加这个name作为键值,你可以将这一句移动到else中才能达到目的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-15 16:45:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 阿撩 于 2017-11-15 16:51 编辑

是因为楼主你的循环里面Mydict = {}
当把Mydict[name]=password第一次存入时,第二次循环,Mydict = {}时就清空了,所以不会出现提示已经有这个名字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-15 16:46:44 | 显示全部楼层
阿撩 发表于 2017-11-15 16:45
是因为楼主你的循环里面Mydict = {}
当把Mydict[name]=password第一次存入时,第二次循环,Mydict = {}时就 ...

我觉得是这样的 不知道对不对{:10277:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-15 16:50:43 | 显示全部楼层
while 1:
    user_data ={}
    prompt='请输入用户名:'
    while True:   
      name = input(prompt)
      if name in user_data:
         prompt = '此用户已经被使用,请重新输入:'
         continue
      else:
         break
    password = input('请输入密码:')
    user_data[name] = password
    print('注册成功,赶紧试试登陆吧(* ̄︶ ̄)')

把标准答案的第一部分单独提取出来运行了一下,发现还是不行。
但是运行全部代码,却能全部运行,难道是编译器出错了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-15 16:59:23 | 显示全部楼层
本帖最后由 payton24 于 2017-11-15 17:00 编辑
阿撩 发表于 2017-11-15 16:46
我觉得是这样的 不知道对不对{:10277:}


太感谢了,原来是没放置好字典的作用域,谢谢!
把Mydict = {}提到  while 1: 就能完美解决。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-16 21:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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