我是编程的初学者,我正在努力弄清楚Python的一些功课,感觉我很紧张!我在这个论坛上查了很多问题而无法找到相关的答案,所以这里就是..
问题: 编写一个名为find_mismatch的函数,它接受两个字符串作为输入参数并返回:
如果两个字符串完全匹配,则。
如果两个字符串只有一个字符长度和不匹配,则1。
如果两个字符串的长度不同或两个或多个字符不匹配,则2。
大写字母与小写字母相同。
我的主要问题是我的程序似乎只在一次不匹配后结束。什么是确保它贯穿整个代码的好方法?我认为它也可能比它需要的更麻烦......
def find_mismatch(s1,s2):
s1=s1.lower()
s2=s2.lower()
x=s1.split()
y=s2.split()
mismatch=0
count=0
for char in (0,len(x+1)):
if len(x)==len(y) and x[0:]==y[0:]:
return 0
if not len(s1)==len(s2):
return 2
#if len(x)==len(y) and not x[0:]==y[0:]:#problem is here?
if len(s1)==len(s2) and not x[count]==y[count]:
mismatch=mismatch+1
#count=count+1#problem here
if mismatch<2:
return 1
if mismatch>=2:
return 2
我倾向于过于复杂化这些问题 - 非常感谢任何帮助!如果我添加评论中提到的计数器,我会收到索引错误。
答案 0 :(得分:1)
请在下面找到我的答案,我希望它会对你有帮助。
def find_mismatch(s1,s2):
count = 0
if len(s1) == len(s2):
for i in range(len(s1)):
if s1[i].lower() != s2[i].lower():
count += 1
if count == 0:
return 0
elif count == 1:
return 1
else:
return 2
else:
return 2
答案 1 :(得分:0)
什么是确保它贯穿整个代码的好方法?
不要在循环中执行return
语句,除非您想提前退出循环。我没有测试你剩下的功能,但你可以这样做:
def find_mismatch(s1,s2):
s1=s1.lower()
s2=s2.lower()
x=s1.split()
y=s2.split()
mismatch=0
count=0
for char in range(0,len(x+1)):
if len(x)==len(y) and x[0:]==y[0:]:
return 0
if not len(s1)==len(s2):
return 2
#if len(x)==len(y) and not x[0:]==y[0:]:
if len(s1)==len(s2) and not x[count]==y[count]:
mismatch +=1
#count +=1
return mismatch if mismatch <=2 else 2
您的代码可以进一步简化,例如因为字符串是可迭代的我怀疑您需要将其转换为x = s1.split()
等列表。
def mismatch(s1, s2):
s1, s2 = s1.lower(), s2.lower()
if len(s1) != len(s2):
return 2
elif s1 == s2:
return 0
else:
# same length, zip the iterable strings and check for mismatch:
mismatch = [itm for itm in zip(s1,s2) if itm[0]!=itm[1]]
# print mismatch
return 1 if len(mismatch)==1 else 2
答案 2 :(得分:0)
以下程序可以满足您的需求。第一个find_mismatch
函数被第一个遮蔽,不需要,并且不运行。它只是具有更明确的参数和变量名称的函数的一个版本。我推荐这两个函数中的第二个,因为它更易于阅读并提供有关它的功能的文档。无论您使用它还是随意调整代码!
#! /usr/bin/env python3
def main():
print(find_mismatch('Hello, world!', 'Hello, world'))
print(find_mismatch('Hello, world!', 'Hello, world!'))
print(find_mismatch('Hello, world!', 'Hallu, world!'))
print(find_mismatch('Hello, world!', 'Hello, world.'))
def find_mismatch(string_a, string_b):
if len(string_a) != len(string_b):
return 2
folded_a, folded_b = string_a.casefold(), string_b.casefold()
if folded_a == folded_b:
return 0
found_difference = False
for character_a, character_b in zip(folded_a, folded_b):
if character_a != character_b:
if found_difference:
return 2
found_difference = True
return 1
def find_mismatch(a, b):
"""Find mismatches in strings a and b.
Returns 0 when strings are the same.
Returns 1 when strings differ in one character.
Returns 2 any other time (different lengths or more mismatches)."""
if len(a) != len(b):
return 2
a, b = a.casefold(), b.casefold()
if a == b:
return 0
error = False
for a, b in zip(a, b):
if a != b:
if error:
return 2
error = True
return 1
if __name__ == '__main__':
main()