#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 /
, поэтому он предшествует
операциям (вычисляется раньше).