Python угадывает 2 числа игра

#python

#python

Вопрос:

Вопрос в том

Напишите программу, которая выводит пользователю сумму (a b) и произведение (a * b) двух случайно сгенерированных натуральных чисел (натуральных целых чисел) от 1 до 100. Чтобы выиграть игру, пользователь должен угадать два числа, порядок угадывания не должен иметь значения. Пользователю дается три предположения, если они ошибочны после трех предположений, им открываются числа. Пользователь должен правильно угадать оба предположения за один раунд, и ему не сообщается, было ли правильным одно из чисел в предыдущем раунде. У пользователя есть 3 попытки угадать два числа, и игра должна завершиться, если пользователь правильно угадает числа.

 import random
a = random.randint(1,100)
b = random.randint(1,100)

print("Sum of two random number is",a   b)
print("Product of two random number is", a * b)
print("Try to guess the 2 numbers that make this sum and product, you have 3 tries, good luck!")

count = 0
win = 0

while count != 3:
    guess_a = int(input('Guess first number '))
    guess_b = int(input('Guess second number '))
    
    if count == 3:
        break
        
    if ((guess_a == a) or (guess_b == b)) and ((guess_b == a) or (guess_a == b)):
        win = 1
        break
        
    else:
        count = count   1
        print('Incorrect!!!')

if win == 1:
    print('Congrats you won the game.')
    
else:
    print('You lost the game.')
    print('Number a was:',a)
    print('Number b was',b)
  

Я попробовал это, это вроде как работает, но я не знаю, как сделать так, чтобы порядок угаданных чисел не имел значения.

Комментарии:

1. Попробуйте: ((guess_a == a) and (guess_b == b)) or ((guess_b == a) and (guess_a == b))

2. используйте set : {guess_a, guess_b} == {a, b}

3. @hiroprotagonist что, если a и b оказались одинаковыми?

4. набор soln очень аккуратный. Если a и b совпадают, это все равно будет работать, попробуйте, затем вам нужно ввести одинаковые числа, чтобы быть правильными. Кстати, любому, у кого есть элементарные математические навыки, не нужно «угадывать» ответ 😉

5. @rajah9 {3, 3} == {3, 3} есть True . или что, по-вашему, не сработает?

Ответ №1:

Один из способов сделать это — вообще не использовать логические значения.

Поскольку 0 автоматически преобразуется False в условный оператор, мы можем просто создать выражение, которое равно 0 , если определенное условие истинно.

Выражение, которое я придумал, это:

 is_guess_a_right = (a - guess_a) * (a - guess_b)
is_guess_b_right = (b - guess_a) * (b - guess_b)
are_both_right = is_guess_a_right   is_guess_b_right
  

Если конечное выражение равно нулю, то оба выражения верны, другими словами, guess_a и guess_b равны a и b (поскольку a - guess_a были бы равны нулю, если бы они были одинаковыми).

Окончательный код:

 import random

a = random.randint(1, 100)
b = random.randint(1, 100)

print("Sum of a and b is %s" % (a   b))
print("Product of a and b is %s" % (a * b))
print("You have three tries to guess the numbers")

count = 0

while count < 3:
    guess_a = int(input("Guess the first number: "))
    guess_b = int(input("Guess the second number: "))

    lose = (guess_a - a) * (guess_a - b)   (guess_b - a) * (guess_b - b)

    if lose:
        print("Try again")
        count  = 1
    else:
        print("Congrats, you won the game")
        print("The two numbers were %s and %s" % (a, b))
        break