Python 函数在输出整数时给出一个None值

Python 函数在输出整数时给出一个None值,python,typeerror,Python,Typeerror,我正在编写一个简单的“猜数字”游戏,希望程序在继续与生成的数字进行比较之前检查给定的输入是否为整数。代码如下: import random def guessFunc(): try: guess1 = int(input()) return guess1 except ValueError: print('Input an integer!') guessFunc() secretNumber = random.

我正在编写一个简单的“猜数字”游戏,希望程序在继续与生成的数字进行比较之前检查给定的输入是否为整数。代码如下:

import random

def guessFunc():
    try:
        guess1 = int(input())
        return guess1
    except ValueError:
        print('Input an integer!')
        guessFunc()

secretNumber = random.randint(1,20)
for guessTaken in range(1,7):
    print('Guess a number. You have ' + str(7 - guessTaken) + ' guesses left.')

    guess = guessFunc()

    if guess < secretNumber:
        print('Too low')
    elif guess > secretNumber:
        print('Too high')
    else:
        break

if guess == secretNumber:
    print('You got it! You took ' + str(guessTaken) + ' guesses.')
else:
    print('The number is ' + str(secretNumber))
随机导入
def guessFunc():
尝试:
猜测1=int(输入())
返回猜测1
除值错误外:
打印('输入一个整数!')
猜函数()
secretNumber=random.randint(1,20)
对于在范围(1,7)内进行的猜测:
打印('猜一个数字。你有'+str(7-猜)+'剩下的猜测')
guess=guessFunc()
如果guess秘密编号:
打印('太高')
其他:
打破
如果guess==secretNumber:
打印('你明白了!你做了'+str(猜)+'猜')
其他:
打印('编号为'+str(secretNumber))
当我测试程序时,如果我总是输入一个整数,程序就会按预期运行。如果我输入任何其他内容(例如字符串),它将发送一条消息,要求输入一个整数,这也是预期的。但如果我随后输入一个整数,程序会导致如下错误:

如果guess TypeError:无序类型:NoneType() 我不明白为什么函数会输出一个None值。只有当我第一次输入一个后跟整数的字符串时,才会发生这种情况


另外,在这种情况下,是否有更干净/整洁的方法来编写代码以检查输入是否为整数?

您在第9行中的“递归”调用
guessFunc()
没有返回,只是被调用了。如果您将其更改为
return guessFunc()
,它将正常工作


关于你关于检查整数的问题,你的方法实际上是一种非常类似于python的方法。与检查输入是否为整数(这总是需要时间)不同,您假定输入为整数,并在出现问题时处理异常,这仅在出现问题时才需要时间。

您在第9行的“递归”调用
guessFunc()
没有返回,只是调用了它。如果您将其更改为
return guessFunc()
,它将正常工作


关于你关于检查整数的问题,你的方法实际上是一种非常类似于python的方法。您不必检查输入是否为整数(这总是需要时间),而是假设它是整数,并在出现问题时处理异常,这仅在出现问题时才需要时间。

参考我的原始代码,如果我最初输入一个字符串,如“hello”,您能否解释函数的流程?我想它从未存储在变量中(猜测1)?然后它再次调用该函数,如果我输入一个整数,这次应该存储它,并返回整数?我不太明白为什么会返回None值..谢谢@RolfofSaxony,我想马上接受它,但系统只允许我在一段时间后这样做。刚刚接受了答案:)@Let'sCode函数默认返回“无”>>>def abc():。。。通过…>>>打印abc()None@RolfofSaxony,但函数的第一部分确实有“return guess1”。我的逻辑是:输入字符串>再次调用函数>输入整数>返回猜测1(这是一个整数)。如果我错了,请纠正我。它在“内部”调用guessFunc时再次调用guessFunc。因此,即使调用内部的调用返回一个整数,“外部”函数调用正在执行第9行,这与内部调用的返回值无关。参考我的原始代码,如果我最初输入一个字符串,如“hello”,您能解释函数的流程吗?我想它从未存储在变量中(猜测1)?然后它再次调用该函数,如果我输入一个整数,这次应该存储它,并返回整数?我不太明白为什么会返回None值..谢谢@RolfofSaxony,我想马上接受它,但系统只允许我在一段时间后这样做。刚刚接受了答案:)@Let'sCode函数默认返回“无”>>>def abc():。。。通过…>>>打印abc()None@RolfofSaxony,但函数的第一部分确实有“return guess1”。我的逻辑是:输入字符串>再次调用函数>输入整数>返回猜测1(这是一个整数)。如果我错了,请纠正我。它在“内部”调用guessFunc时再次调用guessFunc。因此,即使调用内部的调用返回一个整数,“外部”函数调用也在执行第9行,这与内部调用的返回值无关