如何修复某些输入出现的“ TypeError”

时间:2019-01-19 23:57:55

标签: python typeerror

我目前在10年级,并且正在创建一个程序,该程序告诉用户是否可以从他们输入的文章中创建赎金记录。我输入的某些输入出现错误:TypeError:无法将'NoneType'对象隐式转换为str

这似乎起初是可行的,但随后我输入“ hello”作为赎金记录,并输入“ hell”作为我的文章,但上面出现了错误。我认为可能是因为文章短于注释,但是我尝试了其他输入方式,但这似乎不是问题。如果可能与该函数有关,我已将其包括在内。抱歉,我的代码有点混乱或效率低下。

elif choice == "2" :

    user_note = input("\nPlease enter your ransom note: ")

    user_article = input("Please enter your article: ")

    print("\n" + can_I_ransom(user_article, user_note))

can_I_ransom函数:

def can_I_ransom(newspaper_text, ransom_text):
    article_list = list(newspaper_text)
    article_copy = list(newspaper_text)

    for i in range(len(ransom_text)):
        for j in range(len(article_list)):
            if ransom_text[i] == article_list[j]:
                del article_list[j]
                if len(article_copy)-len(ransom_text) == len(article_list):
                    return "Ransom can be made"
                break

        else:
            if j == len(article_list)-1:
                return "Ransom note cannot be made"

我期望输出为“可以制作赎金”或“无法制作赎金票据”,而没有其他输出。如果可以的话,请帮忙:)

1 个答案:

答案 0 :(得分:0)

问题是,当无法支付赎金时,您什么也不会退回,所以它不知道如何处理None,这是您中断而实际上没有得到的结果“您可以勒索”的输出。例如,如果第一个if语句为true,但第二个if语句为true,会发生什么呢?或者,如果第一个if语句为false,第二个为false?这就是为什么它仅在 some 输入中发生的原因-它仅在那些通过if语句的裂缝的输入中发生。另外,我不太确定您的缩进是否适合您所拥有的外部else语句。尝试运行此:

def can_I_ransom(newspaper_text, ransom_text):
    article_list = list(newspaper_text)
    article_copy = list(newspaper_text)

    for i in range(len(ransom_text)):
        for j in range(len(article_list)):
            if ransom_text[i] == article_list[j]:
                del article_list[j]
                if len(article_copy)-len(ransom_text) == len(article_list):
                    return "Ransom can be made"
                else:
                    return "something"

            else:
                if j == len(article_list)-1:
                    return "Ransom note cannot be made"
                else:
                    return "something"
choice = "2"
if choice == "2" :

    user_note = input("\nPlease enter your ransom note: ")

    user_article = input("Please enter your article: ")

    print("\n" + can_I_ransom(user_article, user_note))

只需将“内容”更改为适当的响应即可。