Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 28, 2022 14:54:29

Elena_Torez
Зарегистрирован: 2022-06-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с решением

Спасибо) Еще вопрос.
Есть буквенная оценка, состоящая из, например А+ или А- или просто А.
Я сделала следующее условие:

 if mark[0] == "A":
    if mark[1] == "+":
        print('Соответствующая оценка 4,0')
    elif mark[1] == "-":
        print('Соответствующая оценка 3,7')
    else:
        print('Соответствующая оценка 4,0')
Но когда вводишь просто А, программа не срабатывает, ну кроме тех случаев если на месте + или минус сделать пробел, а как обойтись без этого, как второй составляющей переменной присвоить значение 0.

Офлайн

#2 Июнь 28, 2022 15:54:30

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите с решением

Elena_Torez
очевидно, ваш код должен в одной из веток проверять, что длина mark равна одному символу



Офлайн

#3 Июнь 28, 2022 17:12:03

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Помогите с решением

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}')

Офлайн

#4 Июнь 28, 2022 18:46:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

Помогите с решением

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)

Офлайн

#5 Июнь 29, 2022 11:45:06

Elena_Torez
Зарегистрирован: 2022-06-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с решением

Palrom
Здравствуйте, ваша идея мне понравилась, только скажите пожалуйста, что значат две первые строки. Ну наверное А+ - это ввод переменной, а mark_numb = 0, это что?

Офлайн

#6 Июнь 29, 2022 11:45:20

Elena_Torez
Зарегистрирован: 2022-06-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с решением

Всем большое спасибо за участие и ответы)

Офлайн

#7 Июнь 29, 2022 13:31:57

Elena_Torez
Зарегистрирован: 2022-06-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с решением

Оказались тонкости. Вот само задание. Можно ли его выполнить не прибегая к тупому перебору значений?

Напишите программу, которая будет принимать на вход буквенную
оценку и выводить на экран соответствующую оценку в числовом выражении. Убедитесь в том, что программа генерирует понятное сообщение
об ошибке при неверном вводе.

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- просто нет.

Офлайн

#8 Июнь 29, 2022 13:36:57

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Помогите с решением

Elena_Torez
mark_numb = 0, это что?
Это цифровое представление вашей “Соответствующей оценки”.
Объявлено заранее, чтобы программа не упала в случае если mark не равно ни “А” ни “В”. Костыль можно сказать. Вообще это грубый набросок, макет, который нужно осмыслить и доделать, добавить обработку исключений, как написано выше и пр. Потому что справедливо и такое:
 mark = 'Ё+-'
и такое:
 mark = ' +'
и такое:
 mark = ''
И все эти варианты нужно предусмотреть, т.к. заводиться в программу это будет через input() я подозреваю, соответственно огромное влияние человеческого фактора.

UPD.
Elena_Torez
Оказались тонкости. Вот само задание.
Тут вся загвоздка в том, что для А+ и А одинаковое значение и D- просто нет.
Да и F только 0. Вообще в следующий раз старайтесь с описания задания и начинать. Чтобы люди не гадали, что вам нужно. Потому что в таком случае моё решение применимо только к “В” и “С”, и уже не годится. Проще явно обозначить значения для каждого варианта буквы и её знака, что и сделано ниже уже.

Отредактировано Palrom (Июнь 29, 2022 20:54:25)

Офлайн

#9 Июнь 29, 2022 14:33:52

Elena_Torez
Зарегистрирован: 2022-06-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с решением

Да я учусь, это упражнения, и так сказать “учет человеческих факторов” на данном этапе не столь важен. Мысль я вашу поняла)

Офлайн

#10 Июнь 29, 2022 19:00:19

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1310
Репутация: +  113  -
Профиль   Отправить e-mail  

Помогите с решением

  
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)))

числа с запятой вместо точки принципиально не стал делать

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version