Выдает Name Error в коде при выполнении кода

Vadim_23_03

Новичок
Пользователь
Апр 30, 2023
32
1
8
Windows 10
Python 3.11
Пишу задание из книги. Задание Звучит так, написать программу которая будет принимать буквенные оценки (А+,А,А-, и так далее до F) и будет переводить их в цифры.
Если пользователь введет другую букву то ему должно выдать "такой буквы нет" . После выполнения кода мне выдает
Traceback (most recent call last):
File "C:\Users\AVIRA\Desktop\python\exesise_2_7.py", line 25, in <module>
print("Ваш балл: %s" % o)
^
NameError: name 'o' is not defined

Process finished with exit code 1
хотя без последних трёх строк код работает исправно

Python:
print("Перевод оценок с буквеных в числовые")
ocenka = input("Введите оценнку в виде буквы :").upper()
if ocenka == "A+" or ocenka == "A":
    o = 4.0
if ocenka == "A-":
    o = 3.7
elif ocenka == "B+":
    o = 3.3
elif ocenka == "B":
    o = 3.0
elif ocenka == "B-":
    o = 2.7
elif ocenka == "C+":
    o = 2.3
elif ocenka == "C":
    o = 2.0
elif ocenka == "C-":
    o = 1.7
elif ocenka == "D+":
    o = 1.3
elif ocenka == "D":
    o = 1.0
elif ocenka == "F":
    o = 0
print("Ваш балл: %s" % o)
bukvi = ["A+", "A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "F"]
if ocenka not in bukvi:
    print(" Такой буквы нет")
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
465
128
43
Ну у тебя же переменная o нигде не определяется, если пользователь введет другую букву, отсюда и ошибка. Нужно добавить блок else, чтобы выполнение попадало в него всякий раз, когда ни одна введенная буква не подшла
 
  • Мне нравится
Реакции: Vadim_23_03

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 677
479
83
можно просто переменную о определить выше условия

не знаю в чем пишет тс, в пайчарме пишет, что переменная о может быть не определена, это я к тому что нормальные иде полезны...
 
  • Мне нравится
Реакции: Vadim_23_03

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
465
128
43
А можно вообще без перменной o)
И да, там задача не до конца решена, т.к. для F нет + и -

Python:
print("Перевод буквеных оценок в числовые")
assessment = input("Введите оценнку в виде буквы :").upper()
a = {}
for key, value in zip('ABCDF', range(39, 0, -9)):
    a[key + '+'] = round(value / 10 + .3, 2)
    a[key] = value / 10
    a[key + '-'] = round(value / 10 - .3, 2)

if assessment in a:
    print("Ваш балл: %s" % a[assessment])
else:
    print("Такой буквы нет")
 
  • Мне нравится
Реакции: Vadim_23_03 и regnor

Vadim_23_03

Новичок
Пользователь
Апр 30, 2023
32
1
8
Спа
можно просто переменную о определить выше условия

не знаю в чем пишет тс, в пайчарме пишет, что переменная о может быть не определена, это я к тому что нормальные иде полезны...
Спасибо, благодаря вашим советам пересмотрел подход и решение задачи . Сделал список и при помощи индексов списка решил эту задачу. и пришлось сделать при помощи блоков if .В целом код работает корректно)
 

Форум IT Специалистов