Я хочу написать программу, которая вводит рост и пол и на основе этого сообщает вам, какой ваш идеальный вес должен быть с учетом вашего роста и идеального ИМТ (22 для мужчин, 21 для женщин).
Однако, когда я вызываю функцию, она никогда не работает.
def BMI(h,g):
h = int(input("your height \n"))
g = str(input("input your gender, 'male' or 'female' \n"))
male = "male"
female = "female"
if g == male:
w=22*((h)**2)
if g == female:
w=21*((h)**2)
return(w)
"name 'male' is not defined"
Любая помощь приветствуется Я использую питон 3
Почему назначение h и g внутри метода. это должно быть вне метода
Я голосую за то, чтобы закрыть это, потому что это невозможно воспроизвести, и единственная другая проблема — это незначительная опечатка (например, BMI(), а не BMI(h, g)).
Пытаться:
def BMI():
h = int(input("your height \n"))
g = str(input("input your gender, 'male' or 'female' \n"))
if g == "male":
w=22*((h)**2)
elif g == "female":
w=21*((h)**2)
return(w)
Я все еще получаю код ошибки, что «мужской» не определен. В основном в терминале я пишу: ИМТ (1,83, мужской), и это просто не работает. смш
Поскольку вы принимаете h и g в качестве входных данных внутри функции, вам не нужно делать BMI (h, g)
Если вы хотите вызвать функцию @MrPrincerawat, вы можете сделать это с помощью:
def BMI(h,g):
if g == "male":
w=22*((h)**2)
elif g == "female":
w=21*((h)**2)
return(w)
Вызвать с:
BMI(100, 'male')
Если вы хотите распечатать:
print(BMI(100, 'male'))
Если вы хотите это как переменную:
weight = BMI(100, 'male')
Полученную ошибку можно объяснить, только если вы используете Python 2. В этом случае вы должны использовать raw_input вместо input.
% python2
...
>>> input("input your gender, 'male' or 'female' \n")
input your gender, 'male' or 'female'
male
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'male' is not defined
>>> raw_input("input your gender, 'male' or 'female' \n")
input your gender, 'male' or 'female'
male
'male'
В вопросе говорится, что используется Python 3,
@FedericoBaù Есть веские доказательства того, что это ложное предположение!
Во-первых, как предложил Нациб Неме , убедитесь, что вы используете Python 3 (Python 2 все еще доступен, хотя EoL и может быть по умолчанию python во многих системах)
Затем вы затираете аргументы своей функции, когда всегда устанавливаете их внутри нее из input! Установка их вне функции не повлияет на ее вывод и всегда будет запрашивать данные у пользователя. Или
None
почти всегда используется для обозначения необязательности) и переопределить их, только если они не были установлены
def fn(a=None, b=None):
if a is None:
# logic to set a
Вот пример первой формы в Python 3
#!/usr/bin/env python3
import sys
def healthy_weight_from_bmi(height, gender=None):
""" calculate a healthy body weight from height and gender, using a BMI constant
"""
height = float(height) # input could be a string, but should be a float
try: # select BMI constant based upon gender or choose average if missing
healthy_bmi = {
"m": 22.0,
"f": 21.0,
}[str(gender).lower()[0]]
except Exception: # ValueError, KeyError, IndexError..
healthy_bmi = 21.5
return round(healthy_bmi * (height**2)) # int
# collect height
height = input("enter height(meters) (q to quit): ")
if height.lower().startswith("q"):
sys.exit("quit by user!")
try:
height = float(height)
except ValueError:
sys.exit("invalid height {}: expected a float".format(height))
# collect gender
gender = input("enter gender (optional): ")
if gender.lower().startswith("q"):
sys.exit("quit by user!")
# calculate healthy weight from inputs
healthy_weight = healthy_weight_from_bmi(height, gender)
print("healthy weight: {}kg".format(healthy_weight))
Применение
% python3 ./bmi.py
enter height(meters) (q to quit): 1.7
enter gender (optional):
healthy weight: 62kg
Какую версию питона вы используете?