2016-06-03 5 views
0

Так что я только недавно начал работать с python, и я попытался использовать цикл while в коде, но когда я нажимаю run, программа запускается вечно, не печатая ничего. Я занимался некоторыми исследованиями, но я не нашел ничего, что могло бы помочь мне. Вот код в полном объеме:Пока цикл в Python не работает

import random 
HeroHP = random.randint(120 , 120) 
WitchHP = random.randint(100 , 100) 
Alive = 1 
Dead = 0 
if WitchHP > 0: 
    WitchStatus = Alive 
if WitchHP < 1: 
    WitchStatus = Dead 
if HeroHP > 0: 
    HeroStatus = Alive 
if HeroHP < 1: 
    HeroStatus = Dead 
HeroCritChance = random.randint(0 , 2) 
if HeroCritChance == 2: 
    HeroATK = 25 
if HeroCritChance == 0 or FriskCritChance == 1: 
    HeroATK = 10 
WitchHitChance = random.randint(0 , 1) 
if WitchHitChance == 0: 
    WitchATK = 30 
if WitchHitChance == 1: 
    WitchATK = 0 
while WitchStatus == Alive and HeroStatus == Alive: 
    WitchHP = WitchHP - HeroATK 
    HeroHP = HeroHP - WitchATK 
if WitchStatus == Alive and HeroStatus == Dead: 
    print ("the Hero has been defeated...") 
if WitchStatus == Dead and HeroStatus == Alive: 
    print ("the Hero has triumphed!") 
if WitchStatus == Dead and HeroStatus == Dead: 
    print ("Peace has returned... But at a price...")  

(. Извините, если я делаю очень глупые ошибки, как я уже говорил ранее, я действительно новым для кодирования в целом)

+9

Ну, вы никогда не меняете 'WitchStatus' или' HeroStatus' в своем цикле while, так что да, он никогда не покинет этот цикл. –

+0

@MorganThrapp Чтобы разработать, вам нужно будет поставить ваш if HeroHP <1 бит внутри цикла while –

ответ

2

В Python в операция присвоения не работает.

Это выглядит, когда вы пишете:

if WitchHP > 0: 
    WitchStatus = Alive 

Вы думаете, что использование WitchStatus в будущем состоянии он будет на самом деле проверить значение WitchHP. Но это не так, это делает так: сначала он оценивает условие, тогда, если это так, он присваивает WitchStatus. Если тогда значение WitchHP изменится, то WitchStatus не изменится, если вы снова не запустите этот оператор.

То, что вы хотите, это функция:

def WitchStatus(): 
    if WitchHP > 0: 
     return Alive 
    else: 
     return Dead 

while WitchStatus() == Alive: 
    WitchHP = WitchHP - HeroATK 

Затем, каждый раз, когда вы используете функцию с WitchStatus() программа будет проверять состояние снова.

0

Изменить это:

while WitchStatus == Alive and HeroStatus == Alive: 
    WitchHP = WitchHP - HeroATK 
    HeroHP = HeroHP - WitchATK 

Чтобы, если заявление:

if WitchStatus == Alive..... 

В оригинале, когда WitchStatus == жив, он будет оставаться таким образом, и цикл будет продолжать работать, потому что есть ничего не меняет его. Это как забыть добавить строку i = i + 1 в цикле с численным подсчетом.

Смежные вопросы