所以我在 python 中有以下代码块,它基本上打开一个文本文件,从文件的文本内容中创建一个数组(逐行拆分)然后继续从用户那里获取输入并将该输入与数组中的每一项。尽管用户提交的字符串在数组中,与输入的完全一样,但程序无法判断这两个字符串是否相等。我如何比较字符串?如果这个符号是正确的,那么不平等的原因可能是什么?我尝试用“is”代替“==”,但这也不起作用。
userinput 的输入都是 frogeyedpeas 和 UserArray[0] 都是 frogeyedpeas
文件用户名.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
请您参考如下方法:
您正在测试对象身份:
UserArray[i] is userinput:
你真的想用相等代替:
UserArray[i] == userinput:
is 测试两个对象引用是否指向同一个对象。 == 测试两个对象的值是否相等。
具有相同内容(相等)的两个字符串不一定是同一个对象:
>>> spam = 'foo bar baz'
>>> ham = 'foo bar baz'
>>> spam is ham
False
>>> spam == ham
True
>>> eggs = ham
>>> eggs is ham
True
CPython 确实使用了一些技巧来节省内存和提高性能,其中小整数和一些字符串被interned;每次您尝试创建一个新的驻留字符串或整数而不是新对象时,您都会得到一个已经缓存的值。在那些情况下,is 测试返回 True 仅 因为你确实有相同的对象,由解释器为你重用。
请注意,相等性测试仍然可能不正确。值周围可能有额外的空格,或者在打印到屏幕上时不会立即出现的其他字符:
>>> val1 = 'frogeyedpeas'
>>> val2 = 'frogeyedpeas\t'
>>> val1 == val2
False
>>> print val1, val2
frogeyedpeas frogeyedpeas
>>> print repr(val1), repr(val2)
'frogeyedpeas' 'frogeyedpeas\t'
