繁体   English   中英

尝试打印函数时,Python给我“ None”

[英]Python gives me “None” when trying to print a function

我对python还是很陌生,现在只玩了几天。 我正在努力拼凑一个程序,以炫耀我心目中的战斗系统。 我的问题是,当我尝试打印时,我会不断产生“ None”

import os
class Player():
    def __init__(self, name, hp, maxhp, strength, intel, charm, level):
        self.name = name
        self.hp = hp
        self.maxhp = maxhp
        self.strength = 10
        self.intel = intel
        self.charm = charm
    self.level = level
    def attack(self, Enemy):
        Enemy.hp -= self.strength

class Steve():
    def __init__(self, name, hp, maxhp, strength, intel, charm, level):
        self.name = name
        self.hp = hp
        self.maxhp = maxhp
        self.strength = strength
        self.intel = intel
    self.charm = charm
    self.level = level

class Barry():
    def __init__(self, name, hp, maxhp, strength, intel, charm, level):
        self.name = name
        self.hp = hp
        self.maxhp = maxhp
        self.strength = strength
        self.intel = intel
        self.charm = charm
        self.level = level
def Start():
    Player.hp = 100
    Player.maxhp = 200
    Player.strength = 30
    Player.intel = 10
    Player.charm = 43
    Player.level = 23
   nameSelection()


def nameSelection():
    os.system('cls')
    Player.name = input("Please enter your name\n==>")
    print("==>")
    gameStart()

def gameStart():
    os.system('cls')
    global Enemy
    print ("Player Name:",Player.name)
    print ("Who would you like to fight?")
    print ("1.)Steve")
    print ("2.)Barry")
    print ("3.)Change your name")
    option = input("==>")
    if option == "1":
        Enemy = Steve("Steve", 100, 200, 10, 20, 30, 50) 
        fight()      
    elif option == "2":        
        Enemy = Barry("Barry", 100, 200, 10, 20, 30, 50) 
        fight()  
    elif option == "3":
        nameSelection()

def attack():
    Enemy.hp -= Player.strength

def fight():
    os.system('cls')
    while Enemy.hp > 0:
        os.system('cls')
        print(CharacterStats())
        print ("1.) Attack")
        print ("2.) Run")
        option = input("==>")           
        if option == "1":
            attack()
            print (Enemy.hp)        
    print ("You did it! You have defeated", Enemy.name,"!")
    gameStart()

def CharacterStats():
    print ("You now face", Enemy.name)
    print ("His current health is", Enemy.hp,"/",Enemy.maxhp)
    print ("His strength is", Enemy.strength)
    print ("His intelligence is", Enemy.intel)
    print ("His charm is", Enemy.charm)
    print ("He is level", Enemy.level)
Start()

当我使用两种选择之一去参加战斗战斗员时,

You now face Steve
His current health is 100 / 200
His strength is 10
His intelligence is 20
His charm is 30
He is level 50
None
1.) Attack
2.) Run
==>

我已经读过return可以解决这个问题,但是我似乎无法获得return来给我想要的结果,无论外观如何变化都被打印到了播放器中,并且只返回了其中的一行统计资料。 我可能会误以为我的某些用语,希望我对我的问题很清楚。

之所以得到None,是因为您正在printing该函数,应该在其中调用该函数,而该函数不会返回任何内容,因此这就是为什么获得None的原因。 更改此行:

print(CharacterStats())

至:

CharacterStats()

在Python中,当您调用函数时,该函数将执行其工作,然后返回一个值。 例如,

def add(x, y):
   print("Working on it...")
   answer = x + y
   print("Got it!")
   return answer

调用时,此函数将执行四项操作。 它将在终端上显示“正在处理...”。 它将创建一个名为answer的变量,并将其分配给x和y的和。 它将显示“知道了”。 然后,它将静默返回该答案。

回报是什么意思? 这意味着两件事:它告诉Python将控制权返回到调用该函数的位置,并且还说:无论我在哪里调用,都用一定的值替换我。

所以如果我写

print(add(2,3))

该函数将被调用并进行思考,在终端上打印“正在工作”并“了解它”。 它将返回5,因此现在Python返回到打印调用,并用5替换add(2,3):

print(5)

它将显示5。类似地,我可以这样做:

 x = add(4,6) + add(5,2)

这将打印:正在处理...知道了! 正在努力...知道了!

然后将x设置为10 + 7或17。

在代码中,由于您没有从函数中显式返回任何内容,因此Python在到达函数的最后一行时会使用默认的隐式返回None。 那意味着

 print(MyFunc())

实际上被理解为,执行功能,然后

 print(None)

希望这能说明问题!

附带说明一下,如果您在游戏中使用继承(将Player类用作基类,例如:Steve(Player):pass类),则将更合适: https : //docs.python.org/2/tutorial/ classes.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM