确定,所以我建立了一个仅接受数字输入的函数。我是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)
这是我遇到的错误的屏幕截图
谢谢
您的递归调用未返回任何内容。它只是再次调用该方法,但返回None
。您应该更改它以在调用后返回值,如下所示:
# ... previous code ...
return self.numeric_input()
希望这会有所帮助。祝你好运。
虽然@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)