功能不打印不打印

时间:2020-10-09 20:18:14

标签: python-3.x

出于某些原因,我要打印两个None,有人可以解释如何避免这种情况吗?

class Wizard():
    def __init__(self,name, gender,power):
        self.name = name
        self.gender = gender 
        self.power = power
    def fire(self):
        print('My power is the fire')
    def wind(self):
        print ('My power is the wind')
                
    
 def power_wizard(self):
     if power == 1:
         print(Wizard.fire(self))
     else:
         a=print(Wizard.wind(self))
    
    
# Create player
    
name = input('Enter your wizard name: ')
gender = input ('Enter the gender: ')
power = int(input ('Choose your power 1) Fire and 2) Wind:(only numbers)'))
    
    
    
player1 = Wizard(name,gender,power)
    
    
print(player1.name)
print(power_wizard(power))
    

打印(问题是我如何不打印None或为什么我要打印None

My power is the fire
None
None

还有为什么2无从何而来,因为在使用wizard_power功能时只能得到结果。

2 个答案:

答案 0 :(得分:2)

为什么我不打印

执行print(power_wizard(power))时,会发生以下情况:

  • 调用power_wizard()函数。

    • 在该power_wizard()函数中,您调用Wizard.fire()Wizard.wind()方法...

      • 在两种方法中,您print('My power is...') ...

      • ...但是您不会返回任何结果。

    • ,在power_wizard()函数中,您printWizard.fire()Wizard.wind()方法的结果,但是由于这些方法不返回任何内容,因此 {{ 1}}是第一次打印

    • None函数也不返回任何结果...

  • ...因此,最外面的power_wizard() 打印第二个print(power_wizard(power))


也就是说,您的None类和Wizard函数有点儿纠结...

您可以轻松删除power_wizard()Wizard.fire()方法以及Wizard.wind()函数,并具有:

power_wizard()

如果要限制向导权限列表:

class Wizard():
    def __init__(self, name, gender, power):
        self.name = name
        self.gender = gender 
        self.power = power

player1 = Wizard("Gandalf", "male", "fire")
player2 = Wizard("Hermione", "female", "wind")
player3 = Wizard("Draco", "male", "invisibility")

for p in (player1, player2, player3):
    print("My name is %s and I have %s power" % (p.name, p.power))

# My name is Gandalf and I have fire power
# My name is Hermione and I have wind power
# My name is Draco and I have invisibility power

如果要让向导描述自己:

class Wizard():

    powers = ("fire", "wind")  # this is a _class variable_ defining
                               # all powers available to Wizards

    def __init__(self, name, gender, power):
        self.name = name
        self.gender = gender

        if power in Wizard.powers:
            self.power = power
        else:
            raise ValueError("%s is not a Wizard power." % (power))

player3 = Wizard("Draco", "male", "invisibility")
# ValueError: invisibility is not a Wizard power.

然后,如果要交互式创建向导:

class Wizard():
    ...

    def __init__(self, name, gender, power):
        ...

    def __repr__(self):
        return "<% is a %s with %s power>" % (
            self.name, self.__class__.__name__, self.power)

for p in (player1, player2):
    print(p)

# <Gandalf is a Wizard with fire power>
# <Hermione is a Wizard with wind power>

如果您希望对权力进行编号选择:

def make_wizard():
    while True:
        name = input("Enter your wizard name: ")
        if name:
            break

    gender = input("Enter its gender: ")

    choices = ", ".join(Wizard.powers)
    while True:
        power = input("Enter its power (%s): " % (choices))
        if power in Wizard.powers:
            break

    return Wizard(name, gender, power)

player1 = make_wizard()
print(player1)

# Enter your wizard name: 
# Enter your wizard name: Gandalf
# Enter its gender: male
# Enter its power (fire, wind): invisibility
# Enter its power (fire, wind): fire
# 
# <Gandalf is a Wizard with fire power>

(这很有趣...;-)

答案 1 :(得分:0)

仅当返回的结果不是None时,才可以运行print语句。它是创可贴。

if player1.name is not None: print(player1.name)