Пытаюсь выяснить ошибку имени: в программе Python

#python

#python

Вопрос:

Пытаюсь выяснить NameError: в программе python. Предполагается, что программа предоставляет пользователю три варианта выбора для разных типов ковров, а затем запрашивает у них высоту и ширину. Исходя из цены ковра и того, что они вводят для их высоты и ширины, он должен распечатать общую стоимость для них. Я получаю ошибку имени, в которой говорится, что carpetgrade не определен. Может ли кто-нибудь проверить это и объяснить, почему это не так?

 def full_cost(height, width, carpetgrade):

    cost = carpetgrade * area

    area = height * width

    return cost
        
polyester = 45

wool = 75

acrylic = 100

print("Choose a grade of carpet. There is polyester, wool, and acryilic")

carpet_selection = (input("Which carpet grade do you choose?"))

if (carpet_selection == polyester):
    carpetgrade = 45
                       
elif (carpet_selection == wool):
    carpetgrade = 75
    
elif (carpet_selection == acrylic):
    carpetgrade = 100

height = int(input("What is the height of the room?"))

width = int(input("What is the width of the room?"))

complete_cost = full_cost(height, width, carpetgrade)

print("The cost of your carpet is ,complete_cost")
  

Вот ошибка:
введите описание изображения здесь

 Traceback (most recent call last):
  File "C:UsersAustinDesktopAssignment 3.py", line 34, in <module>
    complete_cost = full_cost(height, width, carpetgrade)
NameError: name 'carpetgrade' is not defined
  

Комментарии:

1. Пожалуйста, отредактируйте свой пост, чтобы исправить форматирование кода. Вы должны скопировать и вставить весь раздел кода как один блок, затем повторно выделить весь блок кода и нажать {} кнопку. Я не могу сделать это за вас, потому что я не хочу делать предположения о том, как ваш фактический код имеет отступ, а отступ имеет значение в Python.

2. Но: по вашим собственным словам, когда вы пытаетесь вызвать функцию, например full_cost(height, width, carpetgrade) , как вы ожидаете, что она узнает, какое значение она должна использовать carpetgrade ?

Ответ №1:

В ваших if заявлениях вы проверяете carpet_selection , равен ли ввод polyester , wool , или acrylic . Но я предполагаю, что вы хотите проверить, вводит ли пользователь эти фактические слова (из вашего изображения — вы ввели слово «шерсть».) Вам нужно будет заключить их в кавычки, потому что прямо сейчас ваш код проверяет, соответствует ли вводимый пользователем ранее определенным переменным, которые имеют имена polyester , wool , и acrylic . Чтобы проверить, что входные данные равны строке, вам нужно заключить эти слова в кавычки, поскольку это синтаксис для строк Python.

Поскольку входные данные всегда изначально будут строкой, и ваш код проверяет, равны ли входные данные тем переменным (которые имеют тип int ), ни одно из условий никогда не будет оценено как истинное и, следовательно, carpetgrade никогда не будет определено. Итак, ваши операторы if должны выглядеть примерно так:

 if (carpet_selection == "polyester"): carpetgrade = 45

elif (carpet_selection == "wool"): carpetgrade = 75

elif (carpet_selection == "acrylic"): carpetgrade = 100
  

Теперь есть еще одно предостережение — в функции full_cost вы выполняете арифметику с переменной carpetgrade . Итак, прежде чем передавать переменную в функцию, вам нужно что-то сделать, чтобы преобразовать carpetgrade в значение, с которым вы можете работать в арифметических / математических операциях — вы могли бы попробовать настроить еще несколько условий if для проверки того, что carpetgrade может быть равно, а затем установить для него значение integer / numericalзначение, которое вы хотите.

Комментарии:

1. Вы также должны учитывать, что произойдет, если пользователь введет что-то еще.