Python字符串比较不起作用

2024-06-01 01:28:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 文件字符串代码txtinputraw数组enter
3条回答

尝试:

UserArray[i].strip(' \n') == userinput.strip(' \n')

因为您的输入方法不同,您可能在其中一个中有尾随空格和/或换行符,而在另一个中没有。

好吧,如果founduser等于1,为了测试它是否工作,您是否试图跳出循环?每次在while循环中运行代码时,这段代码都会让用户重置。或许说一会儿(我和founduser!=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'

相关问题 更多 >