Форум сайта python.su
Спасибо) Еще вопрос.
Есть буквенная оценка, состоящая из, например А+ или А- или просто А.
Я сделала следующее условие:
if mark[0] == "A": if mark[1] == "+": print('Соответствующая оценка 4,0') elif mark[1] == "-": print('Соответствующая оценка 3,7') else: print('Соответствующая оценка 4,0')
Офлайн
Elena_Torez
очевидно, ваш код должен в одной из веток проверять, что длина mark равна одному символу
Офлайн
Elena_TorezПолагаю помимо А будет и В и С..
Есть буквенная оценка, состоящая из, например А+ или А- или просто А.
mark = 'B+' mark_numb = 0 if mark[0] == "A": mark_numb = 4.0 elif mark[0] == "B": mark_numb = 3.0 if len(mark) == 2: if mark[1] == "+": mark_numb += 0.3 elif mark[1] == "-": mark_numb -= 0.3 print(f'Соответствующая оценка {mark_numb}')
Офлайн
Elena_Torez
Есть буквенная оценка, состоящая из, например А+ или А- или просто А.
>>> text = 'A+' >>> >>> mark1, mark2 = text[0], text[1:] >>> >>> if mark1 == 'A': ... if mark2 == '+': ... print('Соответствующая оценка 4,0') ... elif mark2 == '-': ... print('Соответствующая оценка 3,7') ... elif mark2 == '': ... print('Соответствующая оценка 4,0') ... else: ... raise ValueError('unknown mark: ' + mark1 + mark2) ... Соответствующая оценка 4,0 >>>
>>> text = 'Ax' >>> >>> mark1, mark2 = text[0], text[1:] >>> >>> if mark1 == 'A': ... if mark2 == '+': ... print('Соответствующая оценка 4,0') ... elif mark2 == '-': ... print('Соответствующая оценка 3,7') ... elif mark2 == '': ... print('Соответствующая оценка 4,0') ... else: ... raise ValueError('unknown mark: ' + mark1 + mark2) ... Traceback (most recent call last): File "<stdin>", line 9, in <module> ValueError: unknown mark: Ax >>>
Отредактировано py.user.next (Июнь 28, 2022 18:50:50)
Офлайн
PalromЗдравствуйте, ваша идея мне понравилась, только скажите пожалуйста, что значат две первые строки. Ну наверное А+ - это ввод переменной, а mark_numb = 0, это что?
Офлайн
Всем большое спасибо за участие и ответы)
Офлайн
Оказались тонкости. Вот само задание. Можно ли его выполнить не прибегая к тупому перебору значений?
Напишите программу, которая будет принимать на вход буквенную
оценку и выводить на экран соответствующую оценку в числовом выражении. Убедитесь в том, что программа генерирует понятное сообщение
об ошибке при неверном вводе.
A+ 4,0
A 4,0
A- 3,7
B+ 3,3
B 3,0
B- 2,7
C+ 2,3
C 2,0
C- 1,7
D+ 1,3
D 1,0
F 0
Тут вся загвоздка в том, что для А+ и А одинаковое значение и D- просто нет.
Офлайн
Elena_TorezЭто цифровое представление вашей “Соответствующей оценки”.
mark_numb = 0, это что?
mark = 'Ё+-'
mark = ' +'
mark = ''
Elena_Torez
Оказались тонкости. Вот само задание.
Тут вся загвоздка в том, что для А+ и А одинаковое значение и D- просто нет.Да и F только 0. Вообще в следующий раз старайтесь с описания задания и начинать. Чтобы люди не гадали, что вам нужно. Потому что в таком случае моё решение применимо только к “В” и “С”, и уже не годится. Проще явно обозначить значения для каждого варианта буквы и её знака, что и сделано ниже уже.
Отредактировано Palrom (Июнь 29, 2022 20:54:25)
Офлайн
Да я учусь, это упражнения, и так сказать “учет человеческих факторов” на данном этапе не столь важен. Мысль я вашу поняла)
Офлайн
EVALUATIONS = { 'A+': 4.0, 'A': 4.0, 'A-': 3.7, 'B+': 3.3, 'B': 3.0, 'B-': 2.7, 'C+': 2.3, 'C': 2.0, 'C-': 1.7, 'D+': 1.3, 'D': 1.0, 'F': 0 } def user_input(): input_data = input('>>>') if input_data in EVALUATIONS: return EVALUATIONS[input_data] while True: res = user_input() if res is not None: print('Ваша оценка: {}'.format(res)) else: print('неверный ввод!') print('выберите из следующих {}'.format(','.join(EVALUATIONS)))
Офлайн