Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python的输入仅支持整数_Python_Python 3.x - Fatal编程技术网

python的输入仅支持整数

python的输入仅支持整数,python,python-3.x,Python,Python 3.x,好的,我构建了一个函数,只接受数字输入。我是python新手。基本上,当我尝试写一个非数字输入,然后写一个数字输入时,我会遇到一个错误。这是我的密码 class TestNumericInput: def numeric_input(self): val = str(input()) if val.isdigit(): val_number = int(val) return val_number

好的,我构建了一个函数,只接受数字输入。我是python新手。基本上,当我尝试写一个非数字输入,然后写一个数字输入时,我会遇到一个错误。这是我的密码

class TestNumericInput:

    def numeric_input(self):
        val = str(input())
        if val.isdigit():
            val_number = int(val)
            return val_number
        else:
            print('Please write only numbers (i.e. 0, 1, 2...)')
            self.numeric_input()

    def start(self):
        my_number = self.numeric_input()
        print(my_number * 5)
这是我得到的错误截图


谢谢,

虽然@HarshalPerekh的答案确实解决了您眼前的问题,但递归可能会带来堆栈深度方面的问题(尽管这在这里不太可能)。虽然我知道最大堆栈深度有数千个,但值得注意的是,使用不涉及递归的算法可以实现这种行为,因此潜在的堆栈深度要小得多(我认为只有2个,给定循环)

事实证明,您也可以用更少的代码行来完成

def数值_输入(自身):
val=str(输入())
而不是val.isdigit():
打印('请只写数字(即0、1、2…))
val=str(输入())
返回整数(val)
def启动(自):
my_number=self.numeric_input()
打印(我的号码*5)


另一方面,您什么也没有得到的原因是,当您分支到非数字分支时,没有返回。在Python中,函数的默认返回值,即当没有
return
语句时返回的值是
None
。由于函数从未执行过显式的
返回
,因此返回了
None
的类型为
NoneType
。我希望这有助于解释您看到的错误。

在第二个分支中,您应该
返回self.numeric\u input()
。请不要使用递归来解决此问题。请参阅David的答案以及我的评论。在python3中,input返回一个字符串,因此不需要str(input()),我想支持David关于递归是解决此问题的错误方法的论点。当“基本情况”取决于用户输入时使用递归,如果用户连续输入错误的输入(如David所说),则可能导致程序崩溃。在完全没有理由的情况下,不断地向堆栈中添加并保存多个版本的变量在内存方面也是非常昂贵的。循环方法是正确的解决方案。如果实现正确,即使是键盘上的鸡啄也不会使程序崩溃。