python 显示报错 :未解释的引用。。。。和答案应该是一样的吧。。为什么还是报错
我的程序是:dict1 = {}# 函数内部存储的字典是否全局可以使用?
def Newbuilding():
amount=input('请输入用户名:')
while 1:
if amount not in dict1 : #检索是否存在(在整个范围内的键)用key的方法
keys = input('请输入密码:')
dict1={amount:keys}
print('注册成功,赶紧试试登陆吧(*^_^*)!')
break
else:
amount=input('此用户名已经被使用,请重新输入:')
def Examination():
amount=input('请输入用户名:')
while 1:
if amount in dict1.keys():
keys= input('请输入密码:')
while 1:
if keys==dict1.get(amount):
print('欢迎进入系统,请点击右上角的X结束程序!')
break
else:
keys=input('密码错误,请重新输入')
break
else:
amount=input('用户名不存在,请重新输入')
while 1:
print('''|---新建用户:N/n---|
|---登陆账号:E/e---|
|---推出程序:Q/q---|''')
sign=input('请输入指令代码:')
if sign=='N'or'n':
Newbuilding()
elif sign=='E'or'e':
Examination()
答案的程序是:user_data = {}
def new_user():
prompt = '请输入用户名:'
while True:
name = input(prompt)
if name in user_data:
prompt = '此用户名已经被使用,请重新输入:'
continue
else:
break
passwd = input('请输入密码:')
user_data = passwd
print('注册成功,赶紧试试登录吧^_^')
def old_user():
prompt = '请输入用户名:'
while True:
name = input(prompt)
if name not in user_data:
prompt = '您输入的用户名不存在,请重新输入:'
continue
else:
break
passwd = input('请输入密码:')
pwd = user_data.get(name)
if passwd == pwd:
print('欢迎进入XXOO系统,请点右上角的X结束程序!')
else:
print('密码错误!')
def showmenu():
prompt = '''
|--- 新建用户:N/n ---|
|--- 登录账号:E/e ---|
|--- 推出程序:Q/q ---|
|--- 请输入指令代码:'''
while True:
chosen = False
while not chosen:
choice = input(prompt)
if choice not in 'NnEeQq':
print('您输入的指令代码错误,请重新输入:')
else:
chosen = True
if choice == 'q' or choice == 'Q':
break
if choice == 'n' or choice == 'N':
new_user()
if choice == 'e' or choice == 'E':
old_user()
showmenu()
我的第七行,和答案的第八行 同样是检索 全局变量字典。。为什么我的就报错了{:5_100:} {:5_100:}
请忽略我的注释!
感谢亲爱的鱼油帮我解答。。多谢多谢 本帖最后由 jackz007 于 2021-1-25 17:18 编辑
def Newbuilding():
while 1:
amount=input('请输入用户名:') # 必须把此句放入循环
if amount not in dict1 : #检索是否存在(在整个范围内的键)用key的方法
keys = input('请输入密码:')
dict1 = keys
print('注册成功,赶紧试试登陆吧(*^_^*)!')
break
else:
amount=input('此用户名已经被使用,请重新输入:')
def Examination():
while 1:
amount = input('请输入用户名:')# 必须把此句放入循环
if amount in dict1.keys():
keys = input('请输入密码:')
if keys == dict1 . get(amount):
print('欢迎进入系统,请点击右上角的X结束程序!')
break
else:
keys = input('密码错误,请重新输入')
else:
amount=input('用户名不存在,请重新输入')
dict1 = {}
while 1:
print('''|---新建用户:N/n---|
|---登陆账号:E/e---|
|---推出程序:Q/q---|''')
sign = input('请输入指令代码:')
if sign in ('N','n'):
Newbuilding()
elif sign in ('E' , 'e'):
Examination()
elif sign in ('Q' , 'q'):
break jackz007 发表于 2021-1-25 17:05
这是一个死循环,你得把改变 amount 的手段 amount=input('请输入用户名:') 放进循环呀,否则,什么 ...
1.我本想的是运行else后 (给amount 赋值),再循环一次,只要此时的amount 是字典里的key,那就可以跳出循环啦!
2.我主要想知道我的第七行的 dict1应该怎么改{:10_266:}
谢谢帮我指出问题 香喷喷的咸鱼 发表于 2021-1-25 17:16
1.我本想的是运行else后 (给amount 赋值),再循环一次,只要此时的amount 是字典里的key,那就可以跳 ...
试试我修改的代码 jackz007 发表于 2021-1-25 17:18
试试我修改的代码
试了你修改的代码了。。太感谢了!
刚刚我的回复太想当然了,抱歉!
{:10_254:}{:10_254:}{:10_254:} 错误在第9行:
不能用dict1={amount:keys}。你这样对dict1重新赋值,dict1指向了新的内存地址,Python会认为dict1是个局部变量(因为函数内部不能直接修改全局变量),所以报局部变量未定义错误。
应该这样写:
dict1.update({amount:keys}),调用字典的方法来修改dict1的值,这样dict1并没有指向新的内存地址。
jackz007 发表于 2021-1-25 17:18
试试我修改的代码
可以帮我解释一下为什么要放在循环内吗 hrp 发表于 2021-1-25 17:22
错误在第9行:
不能用dict1={amount:keys}。你这样对dict1重新赋值,dict1指向了新的内存地址,Python会认 ...
明白了,谢谢!
再问一下:在函数内部,给一个 全局变量的 字典,序列 增添新的元素。就是对全局变量修改了吗?{:10_254:} 香喷喷的咸鱼 发表于 2021-1-25 17:30
明白了,谢谢!
再问一下:在函数内部,给一个 全局变量的 字典,序列 增添新的元素。就是对全 ...
值变了就是修改了呗,修改方式有两种,1是直接赋值,这要求先用global声明要重新赋值的变量是全局变量,否则Python默认是局部变量;2是调用全局变量的方法来修改全局变量的值,这不需要global声明。 hrp 发表于 2021-1-25 18:03
值变了就是修改了呗,修改方式有两种,1是直接赋值,这要求先用global声明要重新赋值的变量是全局变量, ...
好的,谢谢
页:
[1]