没有类型,不知道如何摆脱它

时间:2016-03-02 07:27:37

标签: python

我遇到了一些我正在为学校作业做的编码问题,同样的事情发生了,我设法修复它,但我这样做却不知道我是怎么做的。

def number():
    num = input("please enter the number of people that would like play:")
    try:
        if int(num) >= 2:
            if int(num) <=7:
                return num
            else:
                print("number must be 7 or less")
                number()
        else:
            print("number must be greater than 2")
            number()
    except:
        print("that is not a valid number. number must be between 2 and 7")
        number()
number = number()
print(number,"people are playing")

这是导致问题的代码。如果我输入一个无效的号码,它可以正常工作,我可以重新输入一个新的号码,但你可以看到我想要打印出“玩的人数”,但它返回“没有人在玩”但这个仅在我输入无效号码后。我该怎么办?

2 个答案:

答案 0 :(得分:4)

在理想情况下,没有任何错误,number()会返回输入的num,一切都很顺利。但是,在所有其他情况下,您通过递归调用number()来结束该函数,而不实际返回任何内容。因此该函数隐式返回None(即没有)。

只需将每次递归调用更改为return number()即可。

顺便说一下。你应该为此避免递归;请参阅this answer,了解如何最好地向用户反复询问有效输入。

答案 1 :(得分:0)

你需要使用一个循环,而不是再次调用你的例程,这将不会产生你想要的效果(查看递归)。像下面的方法会更好:

def number():
    while True:
        num = input("please enter the number of people that would like play: ")

        try:
            num = int(num)

            if num > 7:
                print("number must be 7 or less")
            elif num <= 2:
                print("number must be greater than 2")
            else:
                return num
        except:
            print("that is not a valid number. number must be between 2 and 7")

number = number()
print(number, "people are playing")

您看到None的原因是,如果不使用return,就可以到达功能的底部。在这种情况下,Python将返回值默认为None