Python中判断两个字符串内容相同却返回了False的原因是什么?

发送了一个很不可思议的事情,两个相同的字符串,缺返回 flase。先上图 1

整块代码

#coding=gbk
time = []
arrayA = []
inputfrist =[]
arrayB = []

returnfirst = [] inputsecond = [] resultone = [] resulttwo = [] resultwhree = [] result = []

a = 0

def returnfirstMethod(word): if word == ‘有’: return ‘沒’ else: return ‘有’ def resultoneMethod(inputfrist,arrayA,inputsecond,returnfirst): if inputfrist ==’’ or inputfrist ==0: return ‘’ else: if arrayA == inputsecond: return inputfrist else: return returnfirst

def resulttwoMethod(inputsecond): if inputsecond == ‘A’: return ‘B’ else: return ‘A’

def resultthreeMethod(rethodone): if rethodone == ‘’: return ‘’ else: if rethodone ==‘有’: return ‘沒’ else: return ‘有’

def resultMethod(inpultfirst,preresultone,resultone): if inputfrist == ‘’ or inputfrist == 0: return ‘’ else: if preresultone==resultone: return ‘平’ else: return ‘跳’

def start(a): print(“正在进行第%d 次试验” %a) arrayA.append(‘A’) print(arrayA[a]) time.append(a) print(time[a]) print(“请输入有或没:”) inputfrist.append(input()) print(inputfrist[a]) arrayB.append(‘B’) print(arrayB[a]) returnfirst.append(returnfirstMethod(inputfrist[a])) print(returnfirst[a]) print(‘请输入 A 和 B:’) inputsecond.append(input()) print(inputsecond[a]) resultone.append(resultoneMethod(inputfrist[a], arrayA[a], inputsecond[a], returnfirst[a])) print(resultone[a]) resulttwo.append(resulttwoMethod(inputsecond[a])) print(resulttwo[a]) resultwhree.append(resultthreeMethod(resultone[a])) print(resultwhree[a]) if a > 0: result.append(resultMethod(inputfrist[a], resultone[a],resultone[a-1])) print(‘第%d 次的结果是:%s’ % ((a), result[a])) else: result.append(’’) a = a + 1 print(‘输入任意字符继续’) stop = input() if stop == ‘y’: return 0 else: return start(a)

start(a)

第一轮输入:没 B 第二轮输入:没 A 输出 跳 正确 第三轮输入:有 B 输出 跳 错了 原因是 进入了这个函数,传入的是一个数组,分别是 a 和 a-1,内容都是 '没',但是判断下来怎么返回 false?


Python中判断两个字符串内容相同却返回了False的原因是什么?

19 回复

来个大佬帮帮忙呗


这通常是因为字符串看起来一样,但编码或隐藏字符不同。最常见的情况是:

  1. 编码问题:一个字符串是Unicode,另一个是字节串
s1 = "hello"  # Unicode字符串
s2 = b"hello"  # 字节串
print(s1 == s2)  # False
print(s1 == s2.decode())  # True
  1. 空白字符:包含不可见的空格、制表符或换行符
s1 = "hello"
s2 = "hello\u200b"  # 包含零宽空格
print(s1 == s2)  # False
print(repr(s1), repr(s2))  # 查看实际内容
  1. 大小写或全半角:看起来相同但字符编码不同
s1 = "A"  # 全角A
s2 = "A"   # 半角A
print(s1 == s2)  # False

快速排查方法

# 1. 打印repr()查看真实内容
print(repr(string1), repr(string2))

# 2. 检查长度
print(len(string1), len(string2))

# 3. 检查每个字符
for i, (c1, c2) in enumerate(zip(string1, string2)):
    if c1 != c2:
        print(f"位置{i}: {ord(c1)} vs {ord(c2)}")

建议先用repr()看看字符串里到底有什么。

发生了不可思议的事情,通常情况下是你程序写错了。

程序逻辑一团乱就不看了 ,但是两个一样? 一个是繁体’沒’,一个是简体’没’,这么低级的错误 .encode()出来一看就知道了,

没 沒 这是两个字.

inputfrist flase 感人

随便取的

我的天啊。搞了 2 个多小时,我的智商受到了冲击。什么破输入法,气死我了

#3 感觉楼主是在 反面证明 这两天几个帖子里面讨论的中文编程…

没有没有 ,测试用例随便的。嘻嘻嘻嘻嘻嘻嘻嘻嘻嗝

为什么用 GBK 不用 UTF ?

字符处理 py2 的话都转成 utf-8 再试比较好

因为我听百度说 utf 输入中文会报错,所以没有尝试就用了 gbk

百度害人

False 和 false

#8
以后还得分简体中文编程,繁体中文编程

看来你真的只是听说,好多基础教程开头就是 :
#!/usr/bin/python
# -- coding: UTF-8 --

不好意思,我还真没学过

#15 哈哈哈哈哈哈哈哈哈哈真实

回到顶部