仅在python输入中支持整数

问题描述 投票:0回答:2

确定,所以我建立了一个仅接受数字输入的函数。我是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)

这是我遇到的错误的屏幕截图

error screenshot

谢谢

python python-3.x
2个回答
0
投票

您的递归调用未返回任何内容。它只是再次调用该方法,但返回None。您应该更改它以在调用后返回值,如下所示:

# ... previous code ...
return self.numeric_input()

希望这会有所帮助。祝你好运。


0
投票

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

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

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

def start(self):
    my_number = self.numeric_input()
    print(my_number * 5)
© www.soinside.com 2019 - 2024. All rights reserved.