Как исправить ошибку TypeError: 'str' object is not callable?

def check():
    
    global input, height1, weight, height1, weight1
    
    print("1.Мальчик")
    
    print("2.Девочка")
    
    input = str(input("Введите Ваш пол по цифре сверху: "))
    
    if input == "1":
      
      height = str(input("Введите Ваш рост(в сантиметрах): "))
      
      weight = str(input("Введите Ваш вес: "))
    
    elif input == "2":
      
      height1 = str(input("Введите Ваш рост(в сантиметрах): "))
      
      weight1 = str(input("Введите Ваш вес: "))
    
    else:
      print("Введите одну из цифр выше!")

check()

Перед тем как задать этот вопрос, естественно, я прочитал другие вопросы связанные с этим исключением. У многих ошибка заключалась в лишних, не нужных скобках, а вот у меня - я не знаю.

Я много раз перечитывал свой код в поисках этих лишних скобок, но я их так и не нашёл.

Может ошибка заключается в другом?


Ответы (3 шт):

Автор решения: gil9red

В этой строке вы переписываете имя input и теперь в ней будет строка, которую введет пользователь, а не функция input:

input = str(input("Введите Ваш пол по цифре сверху: "))

Поэтому, при последующем вызове input, например в height = str(input("Введите Ваш рост(в сантиметрах): ")) будет та ошибка

Решение. Назовите по другому переменную для input


UPD.

Исправил код из вопроса:

def check():
    global sex, height1, weight1, height2, weight2

    print("1.Мальчик")
    print("2.Девочка")

    sex = input("Введите Ваш пол по цифре сверху: ")
    if sex == "1":
        height1 = input("Введите Ваш рост(в сантиметрах): ")
        weight1 = input("Введите Ваш вес: ")

    elif sex == "2":
        height2 = input("Введите Ваш рост(в сантиметрах): ")
        weight2 = input("Введите Ваш вес: ")

    else:
        print("Введите одну из цифр выше!")


sex, height1, weight1, height2, weight2 = ' ' * 5

check()

print(sex, height1, weight1, height2, weight2)
→ Ссылка
Автор решения: Jack_oS
def check():
    global height, weight, height1, weight1
    
    print("1.Мальчик")
    print("2.Девочка")
    
    sex = input("Введите Ваш пол по цифре сверху: ")
    
    if sex == "1":
        height = int(input("Введите Ваш рост(в сантиметрах): "))
        weight = int(input("Введите Ваш вес: "))
    elif sex == "2":
        height1 = int(input("Введите Ваш рост(в сантиметрах): "))
        weight1 = int(input("Введите Ваш вес: "))
    else:
        print("Введите одну из цифр выше!")

check()

input уже возвращает строку, преобразуйте ее в int, а не в str:

1.Мальчик
2.Девочка
Введите Ваш пол по цифре сверху: >? 1
Введите Ваш рост(в сантиметрах): >? 23
Введите Ваш вес: >? 21
→ Ссылка
Автор решения: m_ocean

Заменил переменную input на my_input, чтобы не было конфликта названий с родной функцией. (А также не конвертирую результат функции input в str, потому что input итак выдает str. Хотя это не вызывает ошибок.)

def check():

    global my_input, height1, weight, height1, weight1

    print("1.Мальчик")

    print("2.Девочка")

    my_input = input("Введите Ваш пол по цифре сверху: ")

    if input == "1":

        height = input("Введите Ваш рост(в сантиметрах): ")

        weight = input("Введите Ваш вес: ")

    elif input == "2":

        height1 = input("Введите Ваш рост(в сантиметрах): ")

        weight1 = input("Введите Ваш вес: ")

    else:
        print("Введите одну из цифр выше!")


check()
→ Ссылка