Что делать если цикл не останавливается при достижении одной переменной в python?

Создал программку, всё работает, только цикл не останавливается при достижении цели. Вот скрипт:

import random
PlySc = 0
ComSc = 0

print('Игра \"Камень, ножницы, бумага\". Нужно набрать 3 балла для выигрыша')

while(PlySc < 3 or (ComSc < 3)):
  Act = int(input('Выберите действие: 1 - камень, 2 - ножницы, 3 - бумага: '))

  CompAct = random.randint(1, 3)
  #print(CompAct)
  if(Act == 1 and(CompAct == 2)):
    print('Компьютер выбрал ножницы, вы выиграли')
    PlySc += 1
    print('Счёт: Вы -',PlySc, 'Компьютер -',ComSc)
    act = 0
  elif(Act == 1 and(CompAct == 3)):
    print('Компьютер выбрал бумагу, вы проиграли')
    ComSc += 1
    print('Счёт: Вы -',PlySc, 'Компьютер -',ComSc)
    act = 0
  elif(Act == 2 and(CompAct == 1)):
    print('Компьютер выбрал камень, вы проиграли')
    ComSc += 1
    print('Счёт: Вы -',PlySc, 'Компьютер -',ComSc)
    act = 0
  elif(Act == 2 and(CompAct == 3)):
    print('Компьютер выбрал бумагу, вы выиграли')
    PlySc += 1
    print('Счёт: Вы -',PlySc, 'Компьютер -',ComSc)
    act = 0
  elif(Act == 3 and(CompAct == 1)):
    print('Компьютер выбрал камень, вы выиграли')
    PlySc += 1
    print('Счёт: Вы -',PlySc, 'Компьютер -',ComSc)
    act = 0
  elif(Act == 3 and(CompAct == 2)):
    print('Компьютер выбрал ножницы, вы проиграли')
    ComSc += 1
    print('Счёт: Вы -',PlySc, 'Компьютер -',ComSc)
    act = 0
  elif(Act > 3):
    print('Выберите число от 1 - 3!')
    act = 0
  else:
    print('Ничья!')
    print('Счёт: Вы -',PlySc, 'Компьютер -',ComSc)
    act = 0
if(PlySc == 3):
  print('Вы победили!')
elif(ComSc == 3):
  print('Вы проиграли!')

Помогите, пожалуйста!


Ответы (2 шт):

Автор решения: кирилл

потому что прежде чем у тебя закончится цикл совершаются еще действие сделай такое действие

if(Act == 1 and CompAct == 2):
    if  PlySc < 3 or ComSc < 3:
       pass
    else:
    print('Компьютер выбрал ножницы, вы выиграли')
    PlySc += 1
    print('Счёт: Вы -',PlySc, 'Компьютер -',ComSc)
    act = 0
→ Ссылка
Автор решения: Nowhere Man

Основная ошибка в условии цикла:
while PlySc < 3 or ComSc < 3: означает, что цикл будет продолжаться, пока хотя бы одно число меньше 3.

Достаточно or заменить на and, то есть, пока оба числа меньше 3:
while PlySc < 3 and ComSc < 3:


Кроме того, данный код и его логику можно значительно упростить, избавившись от ненужных скобок и конъюнкций and в условных операторах и неиспользуемой переменной act:

  • сразу после ввода числа пользователем следует проверить его корректность
  • затем следует проверить совпадение ответов (ничейный результат)
  • и только после этого можно сравнивать различные ответы
import random

PlySc = 0
ComSc = 0

print('Игра \"Камень, ножницы, бумага\". Нужно набрать 3 балла для выигрыша')

while PlySc < 3 and ComSc < 3:
    Act = int(input('Выберите действие: 1 - камень, 2 - ножницы, 3 - бумага: '))

    CompAct = random.randint(1, 3)

    if Act not in [1, 2, 3]:
        print('Выберите целое число от 1 до 3!')
    elif Act == CompAct:
        print('Ничья!')
    else:
        if Act == 1:
            if CompAct == 2:
                print('Компьютер выбрал ножницы, вы выиграли')
                PlySc += 1
            else:
                print('Компьютер выбрал бумагу, вы проиграли')
                ComSc += 1
        elif Act == 2:
            if CompAct == 3:
                print('Компьютер выбрал бумагу, вы выиграли')
                PlySc += 1
            else:
                print('Компьютер выбрал камень, вы проиграли')
                ComSc += 1
        else:
            if CompAct == 1:
                print('Компьютер выбрал камень, вы выиграли')
                PlySc += 1
            else:
                print('Компьютер выбрал ножницы, вы проиграли')
                ComSc += 1
    print('Счёт: Вы -', PlySc, 'Компьютер -', ComSc)
if PlySc == 3:
    print('Вы победили!')
else:
    print('Вы проиграли!')
→ Ссылка