не работает проверка на ввод числа
я пытаюсь сделать проверку на ввод числа(только числа, положительного, не дробного).
Если при запуске сразу ввести символы, то программа это поймет и всё начнется по новой, но если в другой раз ввести уже число, то после строки return ra функция переходит обратно к вызову проверки maincheck() и думает, что там введены символы. То есть после return ra проверка по идее должна закончиться, но она не заканчивается, а возвращается к вызову проверки и значение строки почему-то изменяется на то, что я ввел первый раз(на символы). Я не понимаю, помогите пожалуйста. 
def maincheck():
str = ""
str = input()
if len(str) > 10 or len(str) == 0:
print("incorrect value, please try again")
maincheck()
else:
for i in range (len(str)):
if str[i] < '0' or str[i] > '9':
print("incorrect value, please try again")
maincheck()
ra = int(str)
return ra
h = maincheck()
print(h)
Ответы (1 шт):
Не надо делать рекурсивный вызов функции самой из себя, у вас в результате получается, что в цикле может вызываться функция сама из себя, а возврат будет в место вызова, т.е. опять внутрь цикла. Это явно не то, что требуется. Структура кода может быть примерно такая:
def maincheck():
while True:
num = input()
if <проверка, что что-то не так>:
print(<что именно не так>)
continue
# тут могут быть ещё проверки
...
# если все проверки успешные
return result
То есть делаем бесконечный цикл ввода и делаем continue, чтобы перейти на следующую итерацию ввода и проверок, если ввод был неправильный.
Ну и не надо перегружать встроенный тип питона str своей переменной, конечно.