Python сообщает "Ошибка типа: объект 'str' не вызывается"
Это означает, что Python пытается вызвать локальную переменную a
, которая является str
.
Из вашего кода:
def a():
a = input("Type 1-5\n")
...
else:
a()
Кажется, вы пытаетесь снова вызвать функцию a()
, чтобы принять новые входы, когда предыдущий ввод недействителен. Вместо этого вы можете зациклить вызов функции a()
за пределами функции, которая будет повторяться, когда ввод неверен.
def get_input():
a = input("Type 1-5\n")
if a == '1':
print("Your answer is \'1'")
elif a == '2':
print("Your answer is \'2'")
elif a == '3':
print("Your answer is \'3'")
elif a == '4':
print("Your answer is \'4'")
elif a == '5':
print("Your answer is \'5'")
else:
print("Invalid input")
return False # we did not get a valid input
return True # we successfully received a valid input
is_valid_input = False
while not is_valid_input:
is_valid_input = get_input()
Обратите внимание, что я также переименовал функцию в get_input
, чтобы сделать ее более понятной. Он также отличает ее от локальной переменной с тем же именем (a
), что помогает избежать такого типа TypeError
, который у вас есть, потому что более понятно, какой из них является str
, а какой - функцией.
$ python3 test.py
Type 1-5
6
Invalid input
Type 1-5
a
Invalid input
Type 1-5
1
Your answer is '1'
$