当前位置: 首页 > 面试题库 >

为什么我的两个python字符串在程序中不相等但在解释器中相等?[重复]

百里疏珂
2023-03-14
问题内容

这个问题已经在这里有了答案

2个相同的字符串“不相等” [Python] (1个答案)

Python两个相同的字符串被视为不同 (1个答案)

去年关闭。

我正在尝试使用python编写聊天服务器。我正在使用SHA1哈希来验证用户,并将用户存储的哈希与给定密码的哈希进行比较,如果它们相同,则应该验证用户。

我的哈希函数如下所示:

def sha1_encode(string):
    import hashlib
    return hashlib.sha1(bytes(string)).hexdigest()

我的验证用户如下所示:

def validate_user(self, user, password):
    if user in self.users:
        print "user exists"
        #Get the saved SHA1 hash and see if it matches the hash of the given
        #password
        print "sha", sha1_encode(password)
        print "stored", self.users[user]
        print "equal", self.users[user] == sha1_encode(password)
        print type(self.users[user])
        print type(sha1_encode(password))
        if str(self.users[user]) == str(sha1_encode(password)):
            print "validate loop entered"
            return True
    else:
        return False

当我与一个我知道在列表中的用户一起运行时,得到以下输出:

user exists
sha 61503cfe0803f3a3b964b46a405f7828fd72b1f7
stored 61503cfe0803f3a3b964b46a405f7828fd72b1f7

equal False
<type 'str'>
<type 'str'>

所以我知道它们都是字符串,而且我知道它们都是同一件事,但出于某种原因返回false。我最初是在质疑不同类型的对象,但事实并非如此。

因此,我尝试将这些字符串复制到解释器中,并检查它们是否实际上相等:

In [1]: x = '61503cfe0803f3a3b964b46a405f7828fd72b1f7'

In [2]: y = '61503cfe0803f3a3b964b46a405f7828fd72b1f7'

In [3]: x == y 
Out[3]: True

在这一点上,我感到困惑,为什么它在函数中没有报告true,而在解释器中却没有报告true,特别是因为似乎我只是用不同的变量名在做同样的事情。谁能告诉我发生了什么事?任何帮助将不胜感激。


问题答案:

只是在这里刺了一下,但根据您的输出,看起来您存储的密码列表中可能会有尾随的’\ n’,因此输出之后的空白行

print "stored", self.users[user]

你可以试试

print "equal", self.users[user].strip() == sha1_encode(password)

看看是否能解决您的问题。该呼叫将删除尾随字符。



 类似资料:
  • 问题内容: 通过搜索发现了类似的问题,但我是一位新的(糟糕的)程序员,无法理解答案。 我有一个.txt文件,其中包含多个字符串,以’-‘分隔。我使用拆分将一些字符串分成变量,其中两个相等,但是在if语句中它们不相等。 这将产生以下结果: 瑞典 瑞典 没有 在两个“ Sweden”字符串之前和之后都有一个空格,并且它们都用大写字母“ S”编写,但不相等吗?我在哪里搞砸了? 问题答案: 最后一个元素包

  • 本文向大家介绍python不相等的两个字符串的 if 条件判断为True详解,包括了python不相等的两个字符串的 if 条件判断为True详解的使用技巧和注意事项,需要的朋友参考一下 今天遇到一个非常基础的问题,结果搞了好久好久.....赶快写一篇博客记录一下: 本来两个不一样的字符串,在if 的条件判断中被判定为True,下面是错误的代码: 这是正确的代码: 补充知识:python基础(if

  • 问题内容: 似乎以下代码应返回true,但返回false。 这有什么意义? 问题答案: 常规()和严格()相等之间的唯一区别是,严格相等运算符禁用类型转换。由于已经在比较两个相同类型的变量,因此使用的相等运算符的类型无关紧要。 不管您使用常规相等还是严格相等,对象比较仅 在您比较相同的精确对象时得出 。 也就是说,给定,,,但。 两个不同的对象(即使它们都具有零或相同的精确属性)也永远不会相等地进

  • 本文向大家介绍js中怎么判断两个字符串相等的实例,包括了js中怎么判断两个字符串相等的实例的使用技巧和注意事项,需要的朋友参考一下 在javascript判断两个变量值是否相等,可以使用 ==(等同)操作符 或者 ===(恒等)操作符 == 操作符 “等同”操作符,简单判断2个变量值是否相等,变量类型不一致时,会做类型转换,即忽略变量的类型进行比较 例子1 var str1 = "123456"

  • 我正在使用Microsoft Visual C将以下程序编译为C 20程序: 当我运行它时,我看到以下输出: 元组是相同的,那么为什么它有错误的比较结果呢?我该如何解决这个问题?

  • 为什么下面的和对象不同,当尝试在字符串池中创建时,它检查内容已经有相同的内容,所以引用字符串池中的对象。但我的假设是错误的,那么任何人都会纠正我。