Можно ли объединить несколько 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])
Вывод:
Ничья!