Проблемы с модулем

#python #math #modulus

#python #математика #модуль

Вопрос:

** У меня возникли проблемы с использованием модуля для простой игры в четы и шансы. ** Независимо от того, для четного или нечетного, независимо от того, что возвращается «Нечетный выигрыш» или «Четный выигрыш», даже если игрок процессор = 3% 2 = 1 в функции (четный) Я получаю ответ «Даже ты выигрываешь».

 import random
even_odds = list(range(0,2))
play = random.choice(even_odds)
def selection():

which = input('Select O for odds and E for even: ').lower()

if which == 'o':
    odds()

elif which == 'e':
    evens()

def odds():
    even_odds 
    cpu = random.choice(even_odds)

    print("YOU CHOSE ODD")
    player = int(input("Choose a number between 0 and 2: "))
    print('cpu chose',cpu)
    print("You're choice plus the cpu's choice equals",player   cpu)
    print(" /n ...", player   cpu % 2 ) 
    if player   cpu % 2 != 0:
        print('Odd you winn')
        selection()
    else:
        print('Even you lose!n')
        selection()


def evens():
    even_odds 
    cpu = random.choice(even_odds)

    print("YOU CHOSE EVEN")
    player = int(input("Choose number between 0 and 2: "))
    print('cpu chose',cpu)
    print("You're choice plus the cpu's choice equals",player   cpu)
    if player   cpu % 2 == 0:
        print('Even you win! n')
        selection()
    else:
        print('Odd you lose! n')
        selection()
  

Вывод

 **Select O for odds and E for even: o
YOU CHOSE ODD
Choose a number between 0 and 2: 2
cpu chose 0
You're choice plus the cpu's choice equals 2
... 2
Odd you win**
  

Ответ №1:

Вам нужно использовать скобки:

 if (player   cpu) % 2 != 0:
  

Вы можете увидеть разницу на простом примере:

 In [10]:  5   5 % 2
Out[10]: 6

In [11]:  (5   5) % 2
Out[11]: 0
  

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

 In [12]:  5 % 2 
Out[12]: 1

In [13]:  5 % 2    5
Out[13]: 6
  

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

1. Вау, посмотрев на ваш пример пару раз, я полностью понимаю, спасибо.

Ответ №2:

Значение по модулю применяется только к cpu переменной.

Используйте (player cpu) % 2 , чтобы применить его к сумме.

 >>> player = 2
>>> cpu = 1
>>> player   cpu % 2
3
>>> (player   cpu) % 2
1
  

% вычисляется с * помощью and / , поэтому он предшествует операциям (вычисляется раньше).