出于某些原因,我要打印两个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功能时只能得到结果。
答案 0 :(得分:2)
为什么我不打印
执行print(power_wizard(power))
时,会发生以下情况:
调用power_wizard()
函数。
在该power_wizard()
函数中,您调用Wizard.fire()
或Wizard.wind()
方法...
在两种方法中,您print('My power is...')
...
...但是您不会返回任何结果。
,在power_wizard()
函数中,您print
是Wizard.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)