Eujene
@Eujene
Айти или не айти?

Как упростить даннный код на python?

Привет.

Было грустно и одиноко, поэтому я написал игру камень-ножницы-бумага. В ходе решения возникла такая конструкция:
def whowin (first, second):
    if first == 'ножницы'   and second == 'камень':
        print("second win")
    elif first == 'камень'  and second == 'бумага':
        print('second win')
    elif first == 'бумага'  and second == 'ножницы':
        print('second win')

    elif first == 'ножницы' and second == 'бумага':
        print('first win')
    elif first == 'камень'  and second == 'ножницы':
        print('first win')
    elif first == 'бумага'  and second == 'камень':
        print("first win")

Меня не отпускает ощущение, что данное решение является костылем. Посоветуйте, пожалуйста, как это можно переписать корректнее.
  • Вопрос задан
  • 383 просмотра
Пригласить эксперта
Ответы на вопрос 4
sM0kfyz
@sM0kfyz
Frontend dev.
1 - ножницы
2 - бумага
3 - камень

def whowin (first, second):
    result = (second - first) if abs(second - first) != 2 else -(second - first)
    if result == 0:
        print("ничья")
    elif result > 0:
        print('first win')
    else:
        print('second win')


Без ничьи

def whowin (first, second):
    result = (second - first) if abs(second - first) != 2 else -(second - first)
    print("first win" if result > 0 else "second win")
Ответ написан
Комментировать
@pcdesign
def whowin(first, second):
    game = {('ножницы', 'камень'): "second win",
        ('камень', 'бумага'): 'second win',
        ('бумага', 'ножницы'): 'second win',
        ('ножницы', 'бумага'):  'first win',
        ('камень',  'ножницы'): 'first win',
        ('бумага'  'камень'): 'first win'}
    print(game[(first, second)])


Наверное, можно еще упростить.
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
def whowin (first, second):
    if any([
        all([first == 'ножницы',second == 'камень']),
        all([first == 'камень',second == 'бумага']),
        all([first == 'бумага',second == 'ножницы']),
        ]):
        return ('second win')
    elif any([
        all([first == 'ножницы',second == 'бумага']),
        all([first == 'камень',second == 'ножницы']),
        all([first == 'бумага',second == 'камень']),
        ]):
        return ('first win')
    else:
        return None
Ответ написан
Комментировать
cosmoskey
@cosmoskey
Студент 0 уровня
def whowin(first, second):
    rsp = ('rock', 'scissors', 'paper')
    if rsp.index(first) == rsp.index(second): # also can be first == second
        return 'draw'
    if (rsp.index(first) - rsp.index(second)) % 3 == 1:
        return 'second'
    else:
        return 'first'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Фаст Софт Санкт-Петербург
от 150 000 до 180 000 ₽
от 250 000 ₽
Sibdev Красноярск
от 120 000 до 180 000 ₽
27 мар. 2023, в 16:04
500 руб./за проект
27 мар. 2023, в 15:48
1500 руб./в час
27 мар. 2023, в 15:40
500 руб./за проект