我一直试图解决这个过去的期末考试问题。 我想我越来越近了,但是由于两个字符串的长度不等,我得到的索引超出了范围错误,我无法弄明白...
你会如何尝试解决这个问题? 如何解决IndexError?
提前谢谢你:D
def print_first_difference(string1, string2):
""" Solving the first difference between 2 words, and print the position. """
for letter in range(len(string1)):
if string1[letter] != string2[letter]:
print("Strings differ at postion {}".format(letter + 1))
break
else:
print("Strings are identical")
print_first_difference("abcd", "abde")
print_first_difference("abcdef", "abcdef")
print_first_difference("abcdef", "abc")
print_first_difference("abc", "abcdef")
Output:
Strings differ at postion 3
Strings are identical
IndexError: string index out of range
答案 0 :(得分:2)
在try/catch
的情况下将测试封装在IndexError
中,这意味着第二个字符串比第一个字符串短,这意味着两个字符串不同。
for letter in range(len(string1)):
try:
if string1[letter] != string2[letter]:
print("Strings differ at postion {}".format(letter + 1))
break
except IndexError:
print("Strings differ at postion {}".format(letter + 1))
break
我将此作为练习让读者对上述代码进行分解。
修改:您是否考虑过string1
比string2
短的情况?我认为你的算法会假设两个字符串都是相同的(他们不是这样)。
答案 1 :(得分:0)
我的解决方案是:
def print_first_difference(string1, string2):
aggr_strings = zip(string1, string2)
for index, tup in enumerate(aggr_strings):
if tup[0] != tup[1]:
print("Strings differ at position " + str(index))
break
else:
if len(aggr_strings) != len(max(string1, string2)):
print("Strings differ at position " + str(len(min(string1, string2))))
else:
print("Strings are identical")