【问题标题】:find the matching number of characters between two strings [duplicate]查找两个字符串之间的匹配字符数[重复]
【发布时间】:2021-04-07 07:12:18
【问题描述】:

问题来了:

用户输入了两个字符串。

分别对两个字符串相同位置的每个字符:

1 和 1 表示 0, 2 和 2 表示 0, 3 和 x 表示 2, 没有任何意义 2

【问题讨论】:

  • 您的代码示例的缩进很糟糕,但您似乎在第一次迭代后从循环中返回。

标签: string


【解决方案1】:

主要问题是您可能想在逻辑值之间使用== 比较,但是您没有将两个表达式放入()。 试试例如

    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。另一个问题是如果字符串长度不相等会发生什么。
【解决方案2】:

这样的事情在这种情况下应该可以工作:

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

【讨论】:

  • 如果我按照你说的做,1 和 1 表示 0,2 和 2 表示 0,3 和 x 表示 2 和 ?没有什么意思是 2 对吗?
  • 好的,那我来编辑
猜你喜欢
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 2020-05-28
  • 2019-09-10
  • 2019-03-16
  • 2011-03-23
相关资源
最近更新 更多