Проблема с циклами

Flogsten

Новичок
Пользователь
Окт 13, 2020
5
0
1
Здравствуйте, писал уже вчера, мне помогли решить задачку, правда теперь я так запутался с циклами что не понятно.
Проблема вот такая, программа теперь, если введено значение <1, просит пользователя заново ввести кол-во ударов, а сам код дальше не проигрывает так сказать "зацикливаясь" на одном)
Я понимаю, что я где-то допустил ошибку.
Подскажите, пожалуйста.
(Код также залил на pastebin-https://pastebin.com/2giV4rQy)
Python:
import time
stats = [["энергия",6],["здоровье", 10]]#Статистика персонажа
statsM = [["здоровье", 7]]#Статистика врага

print("Ваша статистика")
print (stats)
print("Стастика врага")
print (statsM)
time.sleep(6)

while statsM[0][1] != 0:
    while True:
        attack=input("Какое количество ударов нанести?:")
        if attack<"1":
            print("Вы вступили в бой, необходимо нанести удары")
            continue
        break
        if attack=="1":
            stats[0][1] -= 1#вычитаем одну энергию
            statsM[0][1] -= 1#вычитаем одно здоровье у врага
        if attack=="2":
            stats[0][1] -= 2
            statsM[0][1] -= 2
        if attack=="3":
            stats[0][1] -= 3
            statsM[0][1] -= 3
        if attack=="4":
            stats[0][1] -= 4
            statsM[0][1] -= 4
        if attack=="5":
            stats[0][1] -= 5
            statsM[0][1] -= 5
        if attack=="6":
            stats[0][1] -= 6
            statsM[0][1] -= 6
while attack > "6":
        while True:
            attack=input("Какое количество ударов нанести?:")
            if attack>"6":
                print("У вас не хватает энергии")
                continue
            break
while statsM[0][1] != 0:
    while True:
            if attack=="1":
                stats[0][1] -= 1#вычитаем одну энергию
                statsM[0][1] -= 1#вычитаем одно здоровье у врага
            if attack=="2":
                stats[0][1] -= 2
                statsM[0][1] -= 2
            if attack=="3":
                stats[0][1] -= 3
                statsM[0][1] -= 3
            if attack=="4":
                stats[0][1] -= 4
                statsM[0][1] -= 4
            if attack=="5":
                stats[0][1] -= 5
                statsM[0][1] -= 5
            if attack=="6":
                stats[0][1] -= 6
                statsM[0][1] -= 6
            break
while statsM[0][1] != 0:
    while True:
        if statsM[0][1] == 0:
            continue
        break
print("Ваша статистика")
print (stats)
print("Стастика врага")
print (statsM)
time.sleep(4)
print("Ход врага")
time.sleep(2)
print("...")
time.sleep(1)
while defense!=1 or defense!=2:
    while True:
        defense=input("Враг сейчас нанесет вам 1 урон.1)Уклониться (-1 энергия); 2) Принять удар (0 энергии):") # уклонения тратят столько энергии, сколько урона наносит враг
        continue
    break
if defense=="1":
    print("Вы уклонились от атаки ")
    stats[0][1] -= 1
    print("Ваша статистика")
    print (stats)
    print("Стастика врага")
    print (statsM)
if defense=="2":
    print("Вы получили 1 урон ")
    print("Ваша статистика")
    print (stats)
    print("Стастика врага")
    print (statsM)
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 608
466
83
и не проиграется пока цикл не закончится, вы что сделать то хотите можете сформулировать? у вас очень много не нужных циклов
возможно так хотели сделать?
Python:
while statsM[0][1] != 0:
    while True:
        attack=input("Какое количество ударов нанести?:")
        if not attack:
            print("Вы вступили в бой, необходимо нанести удары")
            continue
        break
    if attack=="1":
        stats[0][1] -= 1#вычитаем одну энергию
        statsM[0][1] -= 1#вычитаем одно здоровье у врага
        break
    elif attack=="2":
        stats[0][1] -= 2
        statsM[0][1] -= 2
        break
    elif attack=="3":
        stats[0][1] -= 3
        statsM[0][1] -= 3
        break
    elif attack=="4":
        stats[0][1] -= 4
        statsM[0][1] -= 4
        break
    elif attack=="5":
        stats[0][1] -= 5
        statsM[0][1] -= 5
        break
    elif attack=="6":
        stats[0][1] -= 6
        statsM[0][1] -= 6
        break
    else:
        print("У вас не хватает энергии")
        continue
 
Последнее редактирование:

lynulx

Модератор
Команда форума
Модератор
Авг 9, 2020
139
19
18
и не проиграется пока цикл не закончится, вы что сделать то хотите можете сформулировать? у вас очень много не нужных циклов
главный цикл нужен для того, чтобы оборвать программу при нулевом здоровье противника

первый вложенный цикл нужен для того, чтобы оборвать цикл при правильном инпуте
ифы там вообще не сработают, ведь идут после break, так что их надо вынести в основной цикл

цикл while attack > 6 тоже не нужен, код в нем вынести за цикл

второй цикл while statsM[0][1] != 0 не нужен, все в основной цикл


слишком много циклов, тут хватит только одного основного, я бы посоветовал перечитать инфу про while и сделать что нибудь более простое



кстати, вам не нужно столько ифоф.

if attack < 0 or attact > 6:
____continue
hp -= attack
 

Flogsten

Новичок
Пользователь
Окт 13, 2020
5
0
1
главный цикл нужен для того, чтобы оборвать программу при нулевом здоровье противника

первый вложенный цикл нужен для того, чтобы оборвать цикл при правильном инпуте
ифы там вообще не сработают, ведь идут после break, так что их надо вынести в основной цикл

цикл while attack > 6 тоже не нужен, код в нем вынести за цикл

второй цикл while statsM[0][1] != 0 не нужен, все в основной цикл


слишком много циклов, тут хватит только одного основного, я бы посоветовал перечитать инфу про while и сделать что нибудь более простое



кстати, вам не нужно столько ифоф.

if attack < 0 or attact > 6:
____continue
hp -= attack
Спасибо)
 

Форум IT Специалистов