Можно ли объединить несколько if с разными условиями, но одинаковым телом?
Имеется часть кода простой игры "камень-ножницы-бумага". В процессе изучения Питона возник данный вопрос, в будущем думаю будет полезным знать для упрощения кода. Возможно ли? А если да то как объединить в данном случае "elif"
ы, чтобы строку User_Ball = ...
достаточно было прописать всего 1 раз вместо 3-х?
if x == pick:
print('Ничья!')
elif x == 'ножницы' and pick == "бумага":
User_Ball = win(User_Ball)
elif x == 'бумага' and pick == 'камень':
User_Ball = win(User_Ball)
elif x == "камень" and pick == "ножницы":
User_Ball = win(User_Ball)
else:
Com_Ball = loose(Com_Ball)
print(f'Счет: Компьютер - {Com_Ball}, игрок - {User_Ball}')
Ответы (3 шт):
Автор решения: Герман Борисов
→ Ссылка
Так как этот код срабатывает, если выполнено хотя бы одно из условий, то сами условия можно объединить логической операцией or
(или), которая возвращает True
, если хотя бы один из операндов равен True
elif (x == 'ножницы' and pick == "бумага") \
or (x == 'бумага' and pick == 'камень') \
or (x == "камень" and pick == "ножницы"):
User_Ball = win(User_Ball)
Автор решения: khs
→ Ссылка
Можно оптимизировать данный код, чтобы избавиться от кучи elif или or. Благодаря dict получается более прозрачная логика.
choices = {
'ножницы': {'win': 'бумага', 'lose': 'камень'},
'бумага': {'win': 'камень', 'lose': 'ножницы'},
'камень': {'win': 'ножницы', 'lose': 'бумага'}
}
if x == pick:
print('Ничья!')
elif choices[x]['win'] == pick:
User_Ball = win(User_Ball)
else:
Com_Ball = loose(Com_Ball)
print(f'Счет: Компьютер - {Com_Ball}, игрок - {User_Ball}')
Автор решения: Amgarak
→ Ссылка
Добавлю и я свой вариант:
def lose():
return 'lose'
def win():
return 'win'
def draf():
return 'Ничья'
result = [lose, win, draf]
choices = {
'ножницы':'бумага',
'бумага': 'камень',
'камень':'ножницы'
}
x = 'камень'
pick = 'ножницы'
ans = result[2 if x == pick else choices[x] == pick]()
print(ans)
Вывод:
win
result = ['lose','win','Ничья!']
choices = {
'ножницы':'бумага',
'бумага': 'камень',
'камень':'ножницы'
}
x = 'камень'
pick = 'камень'
print(result[2 if x == pick else choices[x] == pick])
Вывод:
Ничья!