簡體   English   中英

停止循環並隨機卡住的Python程序

[英]Python program that stops looping and gets stuck randomly

我一段時間以來一直在努力學習Python,但我一直堅持嘗試使這個簡單的程序正常工作。

如您所見,我想做的是將4個值“戰斗”直到剩下一個。 直到從循環#11到#22的任何地方,它都可以正常運行,然后才停止。 我是一個完整的初學者,不知道我在做什么錯。

import random
import math
import os

print '     ----------------------------------'
print '       UNIVERSAL ALL-STARS DEATHMATCH'
print '     ----------------------------------'
print ''
print 'CHOOSE FOUR CHARACTERS TO FIGHT IN AN FFA DEATHMATCH!'
print ''

#User input for character names.
characterInputted = False
while characterInputted == False:
    character1 = raw_input('Input Character 1 Name:')
    character2 = raw_input('Input Character 2 Name:')
    character3 = raw_input('Input Character 3 Name:')
    character4 = raw_input('Input Character 4 Name:')
    if character1 == character2:
        print 'Cannot have any characters with identical names!'
        characterInputted = False
    elif character1 == character3:
        print 'Cannot have any characters with identical names!'
        characterInputted = False
    elif character1 == character4:
        print 'Cannot have any characters with identical names!'
        characterInputted = False
    elif character2 == character3:
        print 'Cannot have any characters with identical names!'
        characterInputted = False
    elif character2 == character4:
        print 'Cannot have any characters with identical names!'
        characterInputted = False
    elif character3 == character4:
        print 'Cannot have any characters with identical names!'
        characterInputted = False
    else:
        characterInputted = True

def combat_roll():
    combatValid = False
    while combatValid == False:
        rollAtk = random.randint(1, 4)
        rollDef = random.randint(1, 4)
        if rollAtk == rollDef:
            combatValid = False
#Roll for char1
        elif rollAtk == character1_Number:
            if character1_Dead == True:
                combatValid = False
            elif rollDef == character2_Number:
                if character2_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character1
                    rollDefender = character2
                    combatValid = True
                    return rollAttacker, rollDefender
            elif rollDef == character3_Number:
                if character3_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character1
                    rollDefender = character3
                    combatValid = True
                    return rollAttacker, rollDefender
            elif rollDef == character4_Number:
                if character4_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character1
                    rollDefender = character4
                    combatValid = True
                    return rollAttacker, rollDefender
#Roll for char2
        elif rollAtk == character2_Number:
            if character2_Dead == True:
                combatValid = False
            elif rollDef == character1_Number:
                if character1_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character2
                    rollDefender = character1
                    combatValid = True
                    return rollAttacker, rollDefender
            elif rollDef == character3_Number:
                if character3_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character2
                    rollDefender = character3
                    combatValid = True
                    return rollAttacker, rollDefender
            elif rollDef == character4_Number:
                if character4_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character2
                    rollDefender = character4
                    combatValid = True
                    return rollAttacker, rollDefender
#Roll for char3
        elif rollAtk == character3_Number:
            if character1_Dead == True:
                combatValid = False
            elif rollDef == character1_Number:
                if character2_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character3
                    rollDefender = character1
                    combatValid = True
                    return rollAttacker, rollDefender
            elif rollDef == character2_Number:
                if character2_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character3
                    rollDefender = character2
                    combatValid = True
                    return rollAttacker, rollDefender
            elif rollDef == character4_Number:
                if character4_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character3
                    rollDefender = character4
                    combatValid = True
                    return rollAttacker, rollDefender
#Roll for char4
        elif rollAtk == character4_Number:
            if character1_Dead == True:
                combatValid = False
            elif rollDef == character1_Number:
                if character1_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character4
                    rollDefender = character1
                    combatValid = True
                    return rollAttacker, rollDefender
            elif rollDef == character2_Number:
                if character2_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character4
                    rollDefender = character2
                    combatValid = True
                    return rollAttacker, rollDefender
            elif rollDef == character3_Number:
                if character3_Dead == True:
                    combatValid = False
                else:
                    rollAttacker = character4
                    rollDefender = character3
                    combatValid = True
                    return rollAttacker, rollDefender
        else:
            combatValid = False

#Roundtick set to zero
roundNumber = 0

#Characters randomly generated stats.
character1_Attackbonus = random.randint(0, 2)
character1_Number = 1
character1_Dead = False
character1_LifeCount = 1

character2_Attackbonus = random.randint(0, 2)
character2_Number = 2
character2_Dead = False
character2_LifeCount = 1

character3_Attackbonus = random.randint(0, 2)
character3_Number = 3
character3_Dead = False
character3_LifeCount = 1

character4_Attackbonus = random.randint(0, 2)
character4_Number = 4
character4_Dead = False
character4_LifeCount = 1

gameover = False
while gameover == False:
    os.system('cls')
    lifeCount_Total = [character1_LifeCount +
                       character2_LifeCount + character3_LifeCount +
                       character4_LifeCount]
    roundNumber = roundNumber + 1
    print 'Round #%d!' % roundNumber
    raw_input('Press ENTER to continue.')
    attackChance = random.randint(0, 10)
    if lifeCount_Total > 2 == True:
        gameover = True
    elif attackChance < 3:
        print "No one attacked this round!"
    elif attackChance > 3:
        Attacker, Defender = combat_roll()
        print Attacker + ' attacked ' + Defender + '.'
        Attackbase = random.randint(0, 10)
#Combat calculations!
        combatCalc = False
        while combatCalc == False:
            if Attacker == character1:
                AttackTotal = Attackbase + character1_Attackbonus
                if Defender == character2:
                    if AttackTotal > 5:
                        character2_Dead = True
                        character2_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                        combatCalc = True
                elif Defender == character3:
                    if AttackTotal > 5:
                        character3_Dead = True
                        character3_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                    combatCalc = True
                elif Defender == character4:
                    if AttackTotal > 5:
                        character4_Dead = True
                        character4_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                        combatCalc = True

            elif Attacker == character2:
                AttackTotal = Attackbase + character2_Attackbonus
                if Defender == character1:
                    if AttackTotal > 5:
                        character1_Dead = True
                        character1_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                        combatCalc = True
                elif Defender == character3:
                    if AttackTotal > 5:
                        character3_Dead = True
                        character3_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                    combatCalc = True
                elif Defender == character4:
                    if AttackTotal > 5:
                        character4_Dead = True
                        character4_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                        combatCalc = True

            elif Attacker == character3:
                AttackTotal = Attackbase + character3_Attackbonus
                if Defender == character1:
                    if AttackTotal > 5:
                        character1_Dead = True
                        character1_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                        combatCalc = True
                elif Defender == character2:
                    if AttackTotal > 5:
                        character2_Dead = True
                        character2_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                    combatCalc = True
                elif Defender == character4:
                    if AttackTotal > 5:
                        character4_Dead = True
                        character4_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                        combatCalc = True

            elif Attacker == character4:
                AttackTotal = Attackbase + character4_Attackbonus
                if Defender == character1:
                    if AttackTotal > 5:
                        character1_Dead = True
                        character1_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                        combatCalc = True
                elif Defender == character2:
                    if AttackTotal > 5:
                        character2_Dead = True
                        character2_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                    combatCalc = True
                elif Defender == character3:
                    if AttackTotal > 5:
                        character3_Dead = True
                        character3_LifeCount = 0
                        print '%s killed %s!' % (Attacker, Defender)
                        combatCalc = True
                    else:
                        print '%s failed to kill %s!' % (Attacker, Defender)
                        combatCalc = True
            else:
                combatCalc = False        
    else:
        gameover = False

print character1
print character2
print character3
print character4

我測試了您的代碼,看來它並沒有停止,但是輸入了功能combat_roll()並卡在了其中。 如果我打印combatValid ,我將獲得:

`false 
 false
 false
 ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM