为什么此代码不适用于所有输入

时间:2016-08-17 21:52:18

标签: python

我正在尝试编写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

那为什么这不起作用?

3 个答案:

答案 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'