На самом деле, и супермен и бэтмен получают вызов независимо от того, кто выбран!Чтобы проверить добавьте print('hello')
в начале Бэтмена.
Почему?
Ну, как только приложение вводит кубик функции, оно определяет
outcomes = {
1: batman(), #Function call!
2: superman(), #Function call!
3: "Wonder Woman",
4: "The Flash",
5: "Green Lantern"
}
, как толькокогда мы определяем результаты, мы делаем вызовы функций - при определении 1:
мы вызываем batman()
, как видно из круглых скобок, то же самое для 2:
- функция оценивается (поэтому она запускает ls
), и ее результатмагазины ('Success!'
).Проблема не в подпроцессе, а в дизайне приложения.Опция
- Убедитесь, что все функции, используемые здесь, возвращают строки - и тогда строка будет сохранена как результат (или просто потому, что они не имеют нежелательных последствий, однако, зачем вызывать супермена, если он не нужен)?)
- Решите, что все результаты являются функциями, и воздержитесь от их вызова.
пример:
def dice():
user_choice = int(input("Select a number 1-5: "))
outcomes = {
1: batman,
2: superman,
3: lambda: "With our powers combined, Captain Planet!"
}
answer = outcomes.get(user_choice, lambda: "Not a valid input") #Note the default is a function now as well returning the string.
return answer() #Call here.