不知道为什么会出现这些错误

时间:2021-01-28 02:16:18

标签: python

这段代码中的所有内容在我看来都是正确的,但是当我输入一些长度与 2 不同的数字或输入一个单词时,在代码末尾,“再见”下方会出现错误

我该如何解决?

提前致谢。

代码:

def main():
    def inputnumber(message):
        while True:
            try:
                inputnumber = int(input(message))
            except ValueError:
                print("No,no,no! Put a valid number!\n")
                continue
            if len(str(inputnumber)) < 2:
                print("Hey! That\'s too short! Please, type a two digit number.\n")
                return main()
            elif len(str(inputnumber)) > 2:
                print("Hey! That\'s too long! Please, type a two digit number.\n")
                return main()
            else:
                return inputnumber
                break

    def yes_no(message):
        userinput = str(input(message)).lower()
        if userinput == "yes" :
            return 1
        elif userinput == "no" :
            return 0
        else:
            return yes_no("Please, use 'yes' or 'no'.")


    number = str(inputnumber("Type a two digit number: "))
    total = int(number[0]) + int(number[1])
    print(f"{total}\n")

    answer = yes_no("Do you want to try again?\n")
    if answer == 1:
        print("Okay! Don\'t forget the rules!\n")
        main()
    elif answer == 0:
        print("Good bye!")
main()

2 个答案:

答案 0 :(得分:1)

问题是由 return main() 中的 inputnumber() 引起的。 main() 不返回任何内容,因此在这种情况下 inputnumber() 将返回 None。然后将字符串 "None" 分配给 number,然后尝试执行

total = int(number[0]) + int(number[1])

number[0]Nnumber[1]o,因此那些 int() 调用将失败,因为它们不是数字。

inputnumber() 不应在用户输入错误长度时调用 main()。它应该只是让 while 循环重复。

    def inputnumber(message):
        while True:
            try:
                inputnumber = int(input(message))
            except ValueError:
                print("No,no,no! Put a valid number!\n")
                continue
            if len(str(inputnumber)) < 2:
                print("Hey! That\'s too short! Please, type a two digit number.\n")
            elif len(str(inputnumber)) > 2:
                print("Hey! That\'s too long! Please, type a two digit number.\n")
            else:
                return inputnumber

此外,您可以使用 if inputnumber < 10:if inputnumber > 99:

,而不是将数字转换为字符串并检查其长度

答案 1 :(得分:1)

您的 inputnumber 函数并不总是返回两位数(有时它返回 None)。由于它已经在 while True 循环中运行所有内容,因此当用户输入错误的输入时,您应该使用此循环重新提示,而不是通过调用 main()(它将返回 None ).

一般来说,当您的程序可能需要多次执行某些操作时,它应该始终如一地使用 while 循环。还有其他简化的机会——例如,如果调用者立即将其转换回 inputnumber,那么让 int 将输入转换为 str 是没有意义的。< /p>

def main() -> None:
    def inputnumber() -> str:
        while True:
            inputnumber = input("Type a two digit number: ")
            if not inputnumber.isdigit():
                print("No,no,no! Put a valid number!\n")
            elif len(inputnumber) < 2:
                print("Hey! That\'s too short! Please, type a two digit number.\n")
            elif len(inputnumber) > 2:
                print("Hey! That\'s too long! Please, type a two digit number.\n")
            else:
                return inputnumber

    def yes_no(message: str) -> bool:
        while True:
            userinput = input(message).lower()
            if userinput == "yes":
                return True
            elif userinput == "no":
                return False
            else:
                print("Please, use 'yes' or 'no'.")

    while True:
        number = inputnumber()
        total = int(number[0]) + int(number[1])
        print(f"{total}\n")

        if yes_no("Do you want to try again?\n"):
            print("Okay! Don\'t forget the rules!\n")
        else:
            print("Good bye!")
            return


main()