Как объявить переменные внутри функций в коде ошибки функции python «имя« мужчина »не определено»

Я хочу написать программу, которая вводит рост и пол и на основе этого сообщает вам, какой ваш идеальный вес должен быть с учетом вашего роста и идеального ИМТ (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

Какую версию питона вы используете?

Mureinik 18.12.2020 21:25

Почему назначение h и g внутри метода. это должно быть вне метода

Rajat Mishra 18.12.2020 21:27

Я голосую за то, чтобы закрыть это, потому что это невозможно воспроизвести, и единственная другая проблема — это незначительная опечатка (например, BMI(), а не BMI(h, g)).

Trenton McKinney 18.12.2020 22:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
485
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Пытаться:

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, мужской), и это просто не работает. смш

user14720481 18.12.2020 21:30

Поскольку вы принимаете h и g в качестве входных данных внутри функции, вам не нужно делать BMI (h, g)

MrPrincerawat 18.12.2020 21:34
Ответ принят как подходящий

Если вы хотите вызвать функцию @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,

Federico Baù 18.12.2020 22:45

@FedericoBaù Есть веские доказательства того, что это ложное предположение!

ti7 18.12.2020 22:47

Во-первых, как предложил Нациб Неме , убедитесь, что вы используете 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

Другие вопросы по теме