Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Как написать оператор выбора case на Python?

#python


Решить задачу с помощью Python


  Дано расписание приёмных часов врача. Вывести на экран приёмные часы врача в заданный
день недели.


Написала на Pascal, а на Python перевести не могу.

program z10; 
var 
  n:integer; 
begin 
   readln(n); 
   Writeln('введите порядковый номер дня недели'); 
   case n of
     1: writeln ('понедельник 8:00-14:00'); 
     2: writeln ('вторник 14:00-20:00'); 
     3: writeln ('среда 8:00-14:00'); 
     4: writeln ('четверг 14:00-20:00'); 
     5: writeln ('пятница 8:00-14:00'); 
     else writeln ('приёма нет'); 
  end; 
end.

    


Ответы

Ответ 1



Чаще этот оператор реализуют с помощью словаря. Это удобнее и код чище чем куча if-else working_schedule = { 1: 'понедельник 8:00-14:00', 2: 'вторник 14:00-20:00', 3: 'среда 8:00-14:00', 4: 'четверг 14:00-20:00', 5: 'пятница 8:00-14:00' } day = int(input('день недели: ')) print(working_schedule[day])

Ответ 2



В Python нет оператора switch-case. Некоторые применяют конструкцию if-elif-else. Решение может выглядеть, например, вот так: den_nedeli = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'] vremja_raboti = ['с 8:00 до 14:00', 'с 14:00 до 20:00'] den_vibor = input('''Введите день недели в формате: если понедельник, то пн, вторник - вт, среда - ср, четверг - чт, пятница - пт, суббота - сб, воскресенье - вс: ''') if den_vibor == den_nedeli[0]: print('В понедельник врач Иванова Илона Максовна работает ' + vremja_raboti[0]) elif den_vibor == den_nedeli[1]: print('Во вторник врач Иванова Илона Максовна работает ' + vremja_raboti[1]) elif den_vibor == den_nedeli[2]: print('В среду врач Иванова Илона Максовна работает ' + vremja_raboti[0]) elif den_vibor == den_nedeli[3]: print('В четверг врач Иванова Илона Максовна работает ' + vremja_raboti[1]) elif den_vibor == den_nedeli[4]: print('В пятницу врач Иванова Илона Максовна работает ' + vremja_raboti[0]) elif den_vibor == den_nedeli[5]: print('В субботу врач Иванова Илона Максовна едет на пикник, поэтому не работает') elif den_vibor == den_nedeli[6]: print('В воскресенье врач Иванова Илона Максовна лечит свою голову после пикника') else: print('Введите правильно день недели')

Ответ 3



Можно список использовать, чтобы по индексу значение получить в Питоне: #!/usr/bin/env python3 weekday = input_in_range('введите порядковый номер дня недели', range(1, 8)) print([ '', # office hours 'понедельник 8:00-14:00', # Monday == 1 'вторник 14:00-20:00', 'среда 8:00-14:00', 'четверг 14:00-20:00', 'пятница 8:00-14:00', *['приёма нет'] * 2 ][weekday]) Что значит * (звёздочка) и ** двойная звёздочка в Питоне? Иногда может быть удобней словарь использовать, чтобы switch конструкцию реализовать в Питоне: #!/usr/bin/env python3 weekday = input('введите порядковый номер дня недели').strip() print({ # office hours '1': 'понедельник 8:00-14:00', # Monday == '1' '2': 'вторник 14:00-20:00', '3': 'среда 8:00-14:00', '4': 'четверг 14:00-20:00', '5': 'пятница 8:00-14:00' }.get(weekday, 'приёма нет')) В этом случае неверный ввод приводит к приема нет ответу, что скрывает ошибку (что не хорошо в общем случае). Более надёжная программа в цикле будет спрашивать число, пока не будет получен верный день недели. См. Python 3. Проверка на целое число—условие на проверку данных, введенных пользователем: def input_in_range(prompt, seq): while True: try: n = int(input(prompt)) except ValueError as e: print(e) else: if n in seq: return n print(f'{n} not in {seq}') В разных ситуациях разные решения могут быть более подходящими, чтобы перевести код со switch конструкцией. Есть ли в Python оператор switch case?

Ответ 4



1. Кратко Используйте функцию switch пакета sorcery. 2. Решение Онлайн-демонстрация на Repl.it from sorcery import switch for sasha_day in range(1, 8 + 1): print(sasha_day, switch(sasha_day, lambda: { {{1, 3, 5}}: '8:00 — 14:00', {{2, 4}}: '14:00 — 20:00', {{6, 7}}: 'В этот день приёма нет' }, default='Число должно быть порядковым номером дня недели, от 1 до 7')) Вывод: 1 8:00 — 14:00 2 14:00 — 20:00 3 8:00 — 14:00 4 14:00 — 20:00 5 8:00 — 14:00 6 В этот день приёма нет 7 В этот день приёма нет 8 Число должно быть порядковым номером дня недели, от 1 до 7 3. Комментарии Как видно из кода, switch: упрощает написание конструкций if/elif/else, роль else выполняет default; позволяет объединять ключи с одинаковыми значениями.

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

Отправить комментарий