Я пытаюсь сделать простое отображение словаря, но получаю сообщение об ошибке, указывающее, что switcher недоступен.
def option_select(option):
switcher = {
1: "Option One",
2: "Option Two",
3: "Option Three",
4: "Option Four",
0: sys.exit()
}
return switcher.get(option, "Invalid choice")
print("Please select an option:")
print("1: Add a new student.")
print("2: Delete an existing student.")
print("3: List all students.")
print("4: Search for a student.")
print("0: Exit")
optionChoice = int(input("Selection: "))
option_select(optionChoice)
Не могли бы вы объяснить эту логику дальше? Почему, если в качестве аргумента указано 1, оно все равно упадет до 0?
Было бы больше смысла, если бы все значения были функциями, то есть switcher = {1: do_foo, 2: do_bar, ..., 0: sys.exit}. (Примечание: нет ())
@ Colin747 Потому что это не утверждение switch. Это словарь. Ваше определение создает весь словарь, а не только тот бит, который вы в конечном итоге используете.






Определение switcher выполнит sys.exit() и ваша программа завершится.
Использование вами switcher не является оператором переключения; это словарь, в котором вы сопоставляете ключ 0 с возвращаемым значением sys.exit(). Чтобы определить это значение и создать словарь, выполняется sys.exit(). sys.exit() закрывает вашу программу.
Самое простое исправление - просто разобраться с выходом отдельно:
def option_select(option):
if option==0:
sys.exit()
switcher = {
1: "Option One",
2: "Option Two",
3: "Option Three",
4: "Option Four",
}
return switcher.get(option, "Invalid choice")
Или вы можете написать свой switcher так, чтобы каждое значение можно было вызывать:
switcher = {
1: add_student,
2: delete_student,
3: list_students,
4: search_students,
0: sys.exit,
}
и определить значения как функции, а затем вы можете вызов результат, который вы получаете из словаря, делать все, что он должен делать.
Например.
switcher[option]()
Теперь у меня есть следующее, но если я укажу 1 в качестве опции, он все равно будет вызывать 1 и 2 - правильно ли это использовать? (Я работаю с Java и пытаюсь использовать это как оператор переключения. switcher = { 1: create_new_student(), 2: test_function(), 0: sys.exit }
Нет, уберите (). В противном случае вы вызываете функцию во время определения словаря.
Я пробовал это, но функция, похоже, не вызывается, когда я передаю 1 в качестве опции.
Вы можете вызвать его после того, как получите его из словаря. Например. switcher[option]().
Хорошо, похоже, это работает. Я предположил, что вы имели в виду что-то вроде return switcher[option]()
Определение
switcherвыполнитsys.exit()и ваша программа завершится.