Найти - Пользователи
Полная версия: Помогите с решением
Начало » Python для новичков » Помогите с решением
1 2 3 4 5
Elena_Torez
Спасибо) Еще вопрос.
Есть буквенная оценка, состоящая из, например А+ или А- или просто А.
Я сделала следующее условие:
 if mark[0] == "A":
    if mark[1] == "+":
        print('Соответствующая оценка 4,0')
    elif mark[1] == "-":
        print('Соответствующая оценка 3,7')
    else:
        print('Соответствующая оценка 4,0')
Но когда вводишь просто А, программа не срабатывает, ну кроме тех случаев если на месте + или минус сделать пробел, а как обойтись без этого, как второй составляющей переменной присвоить значение 0.
FishHook
Elena_Torez
очевидно, ваш код должен в одной из веток проверять, что длина mark равна одному символу
Palrom
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}')
py.user.next
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
>>>
Elena_Torez
Palrom
Здравствуйте, ваша идея мне понравилась, только скажите пожалуйста, что значат две первые строки. Ну наверное А+ - это ввод переменной, а mark_numb = 0, это что?
Elena_Torez
Всем большое спасибо за участие и ответы)
Elena_Torez
Оказались тонкости. Вот само задание. Можно ли его выполнить не прибегая к тупому перебору значений?

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

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

UPD.
Elena_Torez
Оказались тонкости. Вот само задание.
Тут вся загвоздка в том, что для А+ и А одинаковое значение и D- просто нет.
Да и F только 0. Вообще в следующий раз старайтесь с описания задания и начинать. Чтобы люди не гадали, что вам нужно. Потому что в таком случае моё решение применимо только к “В” и “С”, и уже не годится. Проще явно обозначить значения для каждого варианта буквы и её знака, что и сделано ниже уже.
Elena_Torez
Да я учусь, это упражнения, и так сказать “учет человеческих факторов” на данном этапе не столь важен. Мысль я вашу поняла)
xam1816
  
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)))

числа с запятой вместо точки принципиально не стал делать
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB