Skip to main content
 首页 » 编程设计

Python 字符串比较不起作用

2025年05月04日22qq78292959

所以我在 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'