不会停止打印

2024-06-23 19:09:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创造一场战斗,据我所知,几乎一切都在运作。攻击造成适当的伤害,玩家和敌人有正确的生命值,所有物品都有效。然而,当你赢了,它会永远重复“你赢了”,直到你强行结束程序。如果运行状况正好为0,也不会发生这种情况。我认为问题所在的代码是

def enemyHP():
    global enemyhealth
    global playerhealth
    if enemyhealth and playerhealth >0:
        global dmg
        global alcohol
        if alcohol==1:
            miss=random.randint(0,2)
            print("The alcohol makes you more furious...")
            if miss==0:
                dmg=0
            else:
                dmg=dmg*2
        enemyhealth=enemyhealth-dmg
        if enemyhealth<=0:
            print("you won")
            exit()
        else:
            print("you did",dmg,"damage")
            print("enemy health is:",enemyhealth)

我试着用exit()quit()sys.exit()找到更好的方法来结束代码。它们都不起作用,我想知道是否有办法解决这个问题。提前谢谢

我可以简化一下,完整的代码如下

backpacklist=["sword","hand"]    
enemyhealth=100
playerhealth=100
def enemyHP():
    global enemyhealth
    global playerhealth
    if enemyhealth and playerhealth >0:
        global dmg
        enemyhealth=enemyhealth-dmg
        if enemyhealth<=0:
            print("you won")
            exit
        else:
            print("you did",dmg,"damage,","enemy health is:",enemyhealth)
    return enemyhealth
def playerattack():
    global playerhealth
    global enemyhealth
    if playerhealth and enemyhealth >0:
        print(backpacklist)
        global dmg
        help1=0
        whatweapon=input("what weapon?:")
        while backpacklist[help1]!=whatweapon:
            help1=help1+1
        if backpacklist[help1]==whatweapon:
            if backpacklist[help1]=="hand": #to quickly kill
                dmg=1000
            elif backpacklist[help1]=="sword":
                dmg=20
    return dmg,playerhealth
def playerHP(enemydmg):
    global enemyhealth
    global playerhealth
    if playerhealth and enemyhealth >0:
        playerhealth=playerhealth-enemydmg
        if playerhealth<=0:
            print("you lose")
            exit
        else:
            print("your health is:",playerhealth)
    return playerhealth
def fight1(enemydmg):
    while enemyhealth and playerhealth>0:
        global dmg
        dmg=0
        playerattack()
        enemyHP()
        playerHP(enemydmg)
enemydmg=10    
if enemyhealth and playerhealth >0:
    fight1(enemydmg)

好吧,我已经设法解决了这个问题,在敌人的生命值低于0的时候,我把它的生命值设为0。我不知道为什么这样做有效,但是如果有效的话


Tags: and代码youifdefexitglobalelse
2条回答

下面是一个清理过的代码版本,它可以很好地工作,而不会像您提到的那样出现循环:

import random, sys

def enemyHP():
    global enemyhealth, playerhealth, dmg, alcohol
    if enemyhealth > 0 and playerhealth > 0:
        if alcohol == 1:
            miss = random.randint(0,2)
            print("The alcohol makes you more furious...")
            dmg = 0 if miss == 0 else dmg*2
        enemyhealth -= dmg
        if enemyhealth <= 0:
            print("you won")
            sys.exit()
        else:
            print("you did {} damage \nenemy health is: {}".format(dmg, enemyhealth))

# Your variables
enemyhealth = 1
playerhealth = 2
dmg = 1
alcohol = 1

# Call the function
enemyHP()

样本输出:

The alcohol makes you more furious...
you did 0 damage 
enemy health is: 1

这是基于上述变量赋值

首先,我建议使用sys.exit()而不是exit()或quit(),看看Here为什么这通常是个好主意。我这里没有足够的信息来说明为什么处于该位置的sys.exit()不能退出程序,但我建议您看看在哪里调用该函数并对其进行更改

例如,假设您正在以某种形式的循环运行此函数,每次在战斗中发生回合时都会调用此函数,但是有时更好的做法是在满足首选状态时让程序继续,而不是强制退出程序mid函数,例如,如果敌人还有生命值,你可以让函数return False;如果敌人死了,你可以让函数return True;如果函数return True,你可以让循环结束;如果函数return True,你还可以让函数return enemyhealth,然后在函数之外计算出你是赢了还是输了

相关问题 更多 >

    热门问题