关于Python中用户输入字符串(与变量名相同)无法作为变量名引用的理解以及解决方案

在用户登录账号时,我需要在字典中查找是否存在其账号名称以及密码是否正确。

所以,我想将用户输入的账号赋值给变量,在字典中查找是否有此指值。

代码如下:

 1 Ya = {'姓名': 'Ya', 'password': '123', '性别': '', '职业': '学生'}
 2 user_message = {'Ya': Ya}
 3 
 4 in_name = input("输入:")
 5 in_password = input("输入:")
 6 
 7 if in_name in user_message:
 8     print("存在")
 9     # 重点在这下面这句!
10     if in_password == in_name['password']:
11         print("正确")
12 else:
13     print("滚犊子")

按照我的预想,用户输入Ya,赋值给了in_name   ,相当于

 9     # 重点在这下面这句!
10     if in_password == Ya['password']:

我想这样能行,提出字典Ya中的password与用户输入的password进行匹配。

但结果确实意料之外的,报错如下

输入:Ya
输入:123
存在
Traceback (most recent call last):
  File "D:\AAAAA\20211007try\user_message.py", line 16, in <module>
    if in_password == in_name['password']:
TypeError: string indices must be integers

#TypeError:字符串索引必须是整数

用户输入的字符串“Ya”虽然和变量Ya看起来相同,但其起到的作用在程序中是完全不同的

变量名是变量名,字符串是字符串,格式很重要

这种傻的离谱的想法最好还是不要有,亦或者是因为我还不太懂

原理我还是没特别清楚,希望大神可以留言解释。


然后,事情总要解决的,我随意的换了一种方式,代码如下:

 1 Ya = {'姓名': 'Ya', 'password': '123', '性别': '', '职业': '学生'}
 2 user_message = {'Ya': Ya}
 3 
 4 in_name = input("输入:")
 5 in_password = input("输入:")
 6 
 7 if in_name in user_message:
 8     print("存在")
 9     if in_password == user_message[in_name]['password']:
10     # if in_password == in_name['password']:
11         print("Y")
12 else:
13     print("滚犊子")

字符串有字符串的去处,这次我将in_name作为查找字典的键,而非变量。

于是,user_message[in_name] == 变量Ya

再从Ya中查找出password与输入的进行对比匹配

这次成功了


认真的思考这两次的对比,

我妄图将字符串用成变量名,这是出现这次事故的原因

print(type(Ya),type(in_name))

<class 'dict'> <class 'str'>

 

 

也许有其他办法能解决

 

posted @ 2021-10-07 19:14  往上落白  阅读(292)  评论(0)    收藏  举报