@Zohan1Gear

Как реализовать задуманное когда условий три и значений три?

spoiler
ruka = ['', '✂️', '']
        
        v1 = ''
        v2 = '✂️'
        v3 = ''
        
        
        win1 = (v1 > v2), (v2 > v3), (v3 > v1)
        win2 = (v1 < v3), (v3 < v2), (v2 < v1)

        player1 = random.choice(ruka)
        player2 = random.choice(ruka)

        await message.reply_text(f'У меня {player1}')
        await message.reply_text(f'У тебя {player2}')
        
        if win1:
                await bot.send_message(message.chat.id, f'@{message.from_user.username}, ты проиграл! ')

        elif win2:
                await bot.send_message(message.chat.id, f'@{message.from_user.username}, ты выиграл! ')

        else:
                if player1 == player2:
                        await bot.send_message(message.chat.id, f'@{message.from_user.username}, у нас ничья! ')

Результат слишком кривой, расчеты неверные.
В боте выходит три сообщения подряд:
f'@{message.from_user.username}, ты проиграл! ')
f'@{message.from_user.username}, ты выиграл! ')
await bot.send_message(message.chat.id, f'@{message.from_user.username}, у нас ничья! ')

или же 2. А должно одно сообщение с результатом выиграл, проиграл или ничья.
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
ROCK = 0  # именно целые числа, именно подряд, и именно начиная с нуля
PAPER = 1
SCISSORS = 2

VICTORY = [
    # номер строки - ход игрока 1, 
    # номер столбца - ход игрока 2
    # значение - какой игрок победил
    #к, н, б
    [0, 1, 2],  # камень
    [2, 0, 1],  # ножницы
    [1, 2, 0],  # бумага
]

# задаём ходы игроков - у тебя эти значения придут из бота, я так понимаю
player1 = random.choice([ROCK, PAPER, SCISSORS])
player2 = random.choice([ROCK, PAPER, SCISSORS])

# определяем результаты
outcome = VICTORY[player1][player2]
if outcome == 0:
    print("Ничья")
elif outcome == 1:
    print("Победил игрок 1")
elif outcome == 2:
    print("Победил игрок 2")


Можно, конечно, сократить при желании. Но так понятно.
А у тебя не работает, потому что ты с какого-то перепугу решил, что запись
win1 = (v1 > v2), (v2 > v3), (v3 > v1)
даст тебе одно логическое значение, а не кортеж из трёх. Сюрприз, непустой кортеж всегда истинный.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 мая 2024, в 22:58
3000 руб./за проект
18 мая 2024, в 21:07
5000 руб./за проект
18 мая 2024, в 20:58
5000 руб./за проект