Python中判断两个字符串内容相同却返回了False的原因是什么?
发送了一个很不可思议的事情,两个相同的字符串,缺返回 flase。先上图

整块代码
#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的原因是什么?
来个大佬帮帮忙呗
这通常是因为字符串看起来一样,但编码或隐藏字符不同。最常见的情况是:
- 编码问题:一个字符串是Unicode,另一个是字节串
s1 = "hello" # Unicode字符串
s2 = b"hello" # 字节串
print(s1 == s2) # False
print(s1 == s2.decode()) # True
- 空白字符:包含不可见的空格、制表符或换行符
s1 = "hello"
s2 = "hello\u200b" # 包含零宽空格
print(s1 == s2) # False
print(repr(s1), repr(s2)) # 查看实际内容
- 大小写或全半角:看起来相同但字符编码不同
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 个多小时,我的智商受到了冲击。什么破输入法,气死我了
没有没有 ,测试用例随便的。嘻嘻嘻嘻嘻嘻嘻嘻嘻嗝
为什么用 GBK 不用 UTF ?
字符处理 py2 的话都转成 utf-8 再试比较好
因为我听百度说 utf 输入中文会报错,所以没有尝试就用了 gbk
百度害人
False 和 false
#8
以后还得分简体中文编程,繁体中文编程
看来你真的只是听说,好多基础教程开头就是 :
#!/usr/bin/python
# -- coding: UTF-8 --
不好意思,我还真没学过
#15 哈哈哈哈哈哈哈哈哈哈真实


