[Вопрос] Программисты, подскажите где ошибка

barzini

Заблокированные
Статус
offline
Регистрация
02.12.2016
Сообщения
111
Репутация
39
Обратите внимание, если Вы хотите провести сделку с данным пользователем, на то, что он заблокирован.
Подскажите, где ошибка. При результате в игре 'Камень, ножницы, бумага', показывает другой результат. Пример: у меня и противника - камень, но показывает, что я проиграл.

Код:
import random
print ('\r ------------GAME--------------- ')
print ('\r ----\'ROCK, SCISSORS, PAPER\'---- \n')
print ('            START\n')
print ('Please, select a number:')
print ('1) Rock\n2) Scissors\n3) Paper\n>> ', end='')
x = int(input())
while x!=1 or x!=2 or x!=3:
    if x > 3 or x < 0:
        print('You wrong select is number!!!')
        print('Please, select a number:')
        print('1) Rock\n2) Scissors\n3) Paper\n>> ', end='')
        x = int(input())
        continue
    else:
        break
opp = random.randint(1,3)
if opp == 1:
    opp = 'Rock'
elif opp == 2:
    opp = 'Scissors'
else:
    opp = 'Paper'
if x == 1:
    print ('You select is \' Rock \'')
    print ('Opponent select is \'', str(opp),'\'')
    if opp == 1:
        print ('Draw')
    elif opp == 2:
        print ('You WIN')
    else:
        print ('You LOSE')
elif x == 2:
    print ('You select is \'Scissors\'')
    print('Opponent select is \'', opp, '\'')
    if opp == 2:
        print('Draw')
    elif opp == 1:
        print('You LOSE')
    else:
        print('You WIN')
else:
    print ('You select is \'Paper\'')
    print('Opponent select is \'', opp, '\'')
    if opp == 2:
        print('You LOSE')
    elif opp == 1:
        print('You WIN')
    else:
        print('Draw')
 

metro

Резидент
Статус
offline
Регистрация
12.09.2016
Сообщения
120
Репутация
109
Это плюсы? Я только джавой владею, но логика-та одинаковая:
1) Переменной opp присваиваешь строку, а затем сравниваешь её с целочисленным значением (1, 2 и 3). Т.е. всегда вариант else - проигрываешь.
2) Зачем тебе тут if, если while и так будет повторяться до тех пор, пока пользователь не введет 1, 2 или 3? Масло масленное какое-то получается.
Код:
while x!=1 or x!=2 or x!=3:
    if x > 3 or x < 0:
В джава есть do while, благодаря которому можно избавиться от первого
Код:
x = int(input())
Если и тут есть, то строчка точно лишняя ну или тупо присваиваешь иксу ноль - как минимум более оптимизированный код будет без лишнего обращения к вводу.
3) Лучше было сделать двумерный массив (в джаве мапку) в верхних ячейках номера выбора, в нижних их имена (камень, ножницы, бумага). Дальше сравниваешь по расположению и в случае равности с длиной массива с первым элементом. (1)Бумага (ебашит) -> (2)Камень (ебашит) -> (3)Ножницы (ебашат) -> тут возврат к первому элементу. Т.е. если ты выбрал 2, а рандом 1, то тебе нужно два условия: на совпадение элементов или если на следующий. Т.е. максимум пучок из 3-х if-ов... Не, чет много элсоифов.
 

Wamp

Новичок
Статус
offline
Регистрация
23.01.2019
Сообщения
5
Репутация
1
Как выше уже описал cordday все дело в неправильном сравнивании переменной opp. Я конечно сам больше по плюсам и не привык к закону: одна переменная-один тип. С таким кодом он всегда будет выводить You Lose т.к. ты не указал, что сравнивать надо с int(opp), наверное это так работает(если str(opp) работает). В этой ситуации лучше иметь другую переменную т.к. это облегчит читаемость кода, но как знаешь. Вообще это же легко фиксится точками остановы.
 

barzini

Заблокированные
Статус
offline
Регистрация
02.12.2016
Сообщения
111
Репутация
39
Обратите внимание, если Вы хотите провести сделку с данным пользователем, на то, что он заблокирован.
Допустим у противника в рандоме выпало 1.
1 - присваиваешь opp значение 'Rock'
2 - opp уже равняется не random(1,3) (числу 1), а строке, соответственно, попадает под else.
aFw3lAq.png

Смотрел это видео
, после него повторял код, но у него так же, как и меня написано, но у него работает нормально , у меня нет. Может где-то я опять не доглядел
 

barzini

Заблокированные
Статус
offline
Регистрация
02.12.2016
Сообщения
111
Репутация
39
Обратите внимание, если Вы хотите провести сделку с данным пользователем, на то, что он заблокирован.
2) Зачем тебе тут if, если while и так будет повторяться до тех пор, пока пользователь не введет 1, 2 или 3? Масло масленное какое-то получается.
Код:
while x!=1 or x!=2 or x!=3:
    if x > 3 or x < 0:
Когда я делаю так:
Код:
while x > 1 and x < 4:
   opp = random.randint(1,3)
if opp == 1:
...
То при выборе в консоле Нуля, у меня выбирает бумагу. Я своим методом чайника, сделал так, что бы всё нормально работало)

3) Лучше было сделать двумерный массив (в джаве мапку) в верхних ячейках номера выбора, в нижних их имена (камень, ножницы, бумага). Дальше сравниваешь по расположению и в случае равности с длиной массива с первым элементом. (1)Бумага (ебашит) -> (2)Камень (ебашит) -> (3)Ножницы (ебашат) -> тут возврат к первому элементу. Т.е. если ты выбрал 2, а рандом 1, то тебе нужно два условия: на совпадение элементов или если на следующий. Т.е. максимум пучок из 3-х if-ов... Не, чет много элсоифов.

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

barzini

Заблокированные
Статус
offline
Регистрация
02.12.2016
Сообщения
111
Репутация
39
Обратите внимание, если Вы хотите провести сделку с данным пользователем, на то, что он заблокирован.
Он использует две переменных, "app" и "gg", а ты только одну)

А да, в этом и косяк. Не обратил внимания даже

Я вообще на питоне редко пишу, но попробуй так, должно работать

Да, всё правильно работает. Ошибся с переменными