AttributeError: у объекта 'function' нет атрибута 'w' - PullRequest
0 голосов
/ 23 января 2019

Я делаю калькулятор ИМТ для своего вступления в урок программирования, я стараюсь работать вперед и научиться использовать модули. Я пытаюсь реализовать систему, в которой пользователю разрешено вводить только целые числа.

Я не очень старался и не смог найти просто сформулированный ответ, так что вот и я.

def Run():
    bmi = ((int(valcheckw.w) * 703)/(int(valcheckh.h)*int(valcheckh.h))

def valcheckw():
    w = (input('weight(Lbs):'))
    try: 
        val0 = int(w)
    except ValueError:
        print("That's not an int!")
        del w
        valcheckw()

def valcheckh():
    h = (input('height in inches'))
    try:
        val = int(h)
    except ValueError:
        print("That's not an int!")
        del h
        valcheckh()

valcheckw()
valcheckh()
Run()

В Run() Я ожидал, что он просто извлечет переменные w и h из их соответствующих модулей, но вместо этого я получаю сообщение об ошибке, говорящее, что они не определены.

1 Ответ

0 голосов
/ 23 января 2019

Вам необходимо вернуть результаты (val0 & val1) двух функций (valcheckw & valcheckh), чтобы получить к ним доступ в функции run.

Вам также необходимо определить, являются ли входные данные на самом деле числом по сравнению с каким-либо другим типом.Для этого вы можете использовать функцию float.

Нечто похожее на приведенное ниже может помочь вам смоделировать, как правильно достичь желаемого результата:

#!/usr/bin/env python3

def valcheckw():
    w=input('weight(lbs): ')
    try:
        val0=float(w)
        return val0
    except ValueError:
        print('That\'s not a number!')
        valcheckw()

def valcheckh():
    h=input('height(in): ')
    try:
        val1=float(h)
        return val1
    except ValueError:
        print('That\'s not a number!')
        valcheckh()

def run():
    weight=valcheckw()
    height=valcheckh()
    bmi=float(weight * 703/float(height*height))
    print(bmi)

### main ###
run()
...