Можно ли объединить несколько 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])

Вывод:

Ничья!
→ Ссылка