我正在尝试编写python代码,它接受两个字符串作为输入,并检查第二个字符串的所有字符是否都存在于第一个字符串中。如果是,则输出是第二个字符串。如果没有,则输出为字符串"这不起作用"。我已经针对各种输入测试了这个过程,它通常可以工作,但并非总是如此。例如,如果我的两个输入是" helo"和" olhe"分别输出"这不起作用,"而它应该是" olhe"因为" olhe"中的所有角色出现在" helo。"
这是我的代码
def fix_machine(debris,product):
n = 1
while True:
first_element = product[0:n]
find_first_element = debris.find(first_element)
if first_element == product:
return product
break
n = n + 1
if find_first_element == -1:
return "This does not work"
break
那为什么这不起作用?
答案 0 :(得分:0)
您可以将此作为更优雅的解决方案,假设您严格要求所有第二个字符串字符首先出现。
def fix_machine(first, second):
for character in second:
if character not in first:
return False
return second
这将返回代码的正确输入。我还没有完全确定您的代码有什么问题。
编辑:艾伯特有一个更优雅的解决方案,参考他的答案 1 :(得分:0)
据我所知,你只想比较两个包含不同字符的字符串。
为此,我建议将两个字符串转换为set
,然后提供(与list
对比)其元素的无顺序比较。
def check_string(first_str, second_str):
# convert strings to sets in order to compare characters
if set(first_string) == set(second_string):
return second_str
else:
return 'This does not work.'
first_string = 'helo'
second_string = 'olhe'
print(check_string(first_string, second_string))
# prints True
first_string = 'helo'
second_string = 'hello'
print(check_string(first_string, second_string))
# prints True
first_string = 'helo'
second_string = 'helofoo'
print(check_string(first_string, second_string))
# prints 'This does not work.'
答案 2 :(得分:0)
我同意您应该使用调试器来执行该代码(如果您还没有设置IDE,可以尝试使用PyCharm)以查看出现了什么问题。很难解释什么是错误但我认为它与first_element = product[0:n]
有关。这将返回越来越大的字符串段。即“' ol'在第二次运行。
这是另一种写作方式
def fix_machine(debris, product):
all_present = all(letter in debris for letter in product)
return product if all_present else 'This does not work'