【发布时间】:2021-04-07 07:12:18
【问题描述】:
问题来了:
用户输入了两个字符串。
分别对两个字符串相同位置的每个字符:
1 和 1 表示 0, 2 和 2 表示 0, 3 和 x 表示 2, 没有任何意义 2
【问题讨论】:
-
您的代码示例的缩进很糟糕,但您似乎在第一次迭代后从循环中返回。
标签: string
问题来了:
用户输入了两个字符串。
分别对两个字符串相同位置的每个字符:
1 和 1 表示 0, 2 和 2 表示 0, 3 和 x 表示 2, 没有任何意义 2
【问题讨论】:
标签: string
主要问题是您可能想在逻辑值之间使用== 比较,但是您没有将两个表达式放入()。
试试例如
if (ord(x) in range(48,57)) == (ord(y) in range(48,57)):
same_type += 1
另一方面,您将条件用作独立的if 语句,因此spec_dist2 中的多个此类条件将为真。我不认为这是你的意图。
【讨论】:
spec_dist2,字符只能在一个范围内,当然对于所有其他范围,not in 将导致 False。例如。你有字符'a'和'e'在range(97,122)中,你会得到True它们不属于的所有其他范围,因为False==False等于True。另一个问题是如果字符串长度不相等会发生什么。
这样的事情在这种情况下应该可以工作:
def spec_dist1(string1, string2):
same_type = 0
for x, y in zip(string1, string2):
if x == y:
same_type += 0
elif ord(x) in range(48,57) and ord(y) in range(48,57):
same_type += 1
elif any(ord(x) in range(s,e) for s,e in [(97,122), (65,90)]) and any(ord(y) in range(s,e) for s,e in [(97,122), (65,90)]):
same_type += 1
elif any(ord(x) in range(s,e) for s,e in [(33,47), (58,64), (91,96), (123,126)]) and any(ord(y) in range(s,e) for s,e in [(33,47), (58,64), (91,96), (123,126)]):
same_type += 1
else:
same_type += 2
same_type += abs(len(string1) - len(string2)) * 3
return same_type
【讨论】: