Что делать если цикл не останавливается при достижении одной переменной в 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('Вы проиграли!')