所以我在python中有下面的代码块,它基本上打开一个文本文件,用文件的文本内容组成一个数组(逐行拆分),然后从用户那里获取输入,并将该输入与数组中的每个项进行比较。尽管usersubmitted字符串与键入的字符串完全相同,但程序无法判断这两个字符串是否相等。我如何比较这些弦?如果这个符号是正确的,不平等的原因可能是什么?我试着用“is”代替“==”,但也没用。
userinput
的输入是frogeyedpeas
,而UserArray[0]
的输入是frogeyedpeas
文件Usernames.txt
frogeyedpeas
vsauce
(在vsauce之后还有一行是完全空白的)
代码发布在下面:
Usernames = open('Usernames.txt', 'r+')
UserArray = Usernames.read().split("\n")
userinput = raw_input("Enter Username: ")
passinput = raw_input("Enter Password: ")
i = 0
q = len(UserArray)
while(i < q):
founduser = 0
print userinput, UserArray[i], UserArray #out
if(UserArray[i] == userinput):
founduser = 1
if(PassArray[i] == passinput):
userstatus = i
founduser = 2
i = i + 1
尝试:
因为您的输入方法不同,您可能在其中一个中有尾随空格和/或换行符,而在另一个中没有。
好吧,如果founduser等于1,为了测试它是否工作,您是否试图跳出循环?每次在while循环中运行代码时,这段代码都会让用户重置。或许说一会儿(我和founduser!=1)作为循环头?
您正在测试对象标识:
你真的想用等式代替:
is
测试两个对象引用是否指向同一个对象。==
测试两个对象的值是否相等。具有相同内容(相等)的两个字符串不一定是同一个对象:
CPython确实使用了一些技巧来节省内存和提高性能,其中小整数和一些字符串是interned;每次尝试创建一个新的字符串或整数,而不是一个新对象时,都会得到一个已经缓存的值。在这些情况下,
is
测试只返回True
,因为您确实有相同的对象,由解释器重用。请注意,相等测试仍然可能不正确。值周围可能有额外的空格,或其他在打印到屏幕上时不明显的字符:
相关问题 更多 >
编程相关推荐