问题
So, basically my code is printing None after printing the statement I want it to print. How can I stop this None from printing
class Panda:
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age
def sleep(self,time=None):
self.time=time
if self.time!=None:
if self.time>=3 and self.time<=5:
self.food='Mixed Veggies'
if self.time>=6 and self.time<=8:
self.food='Eggplant & Tofu'
if self.time>=9 and self.time<=11:
self.food='Broccoli Chicken'
print('{} sleeps {} hours daily and should have {}'.format(self.name,self.time,self.food))
else:
print("{}'s duration is unknown thus should have only bamboo leaves".format(self.name))
panda1=Panda("Kunfu","Male", 5)
panda2=Panda("Pan Pan","Female",3)
panda3=Panda("Ming Ming","Female",8)
print(panda2.sleep(10))
print(panda1.sleep(4))
print(panda3.sleep())
回答1:
The print
function doesn't return in Python, it just writes to stdout
; so, when you call the sleep
method for the instance, it just prints None
.
To fix this, what you have to do is either return
instead of printing in sleep
or just call it without enclosing it in the print
statement.
Result would be like this, for example:
class Panda:
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age
def sleep(self,time=None):
self.time=time
if self.time!=None:
if self.time>=3 and self.time<=5:
self.food='Mixed Veggies'
if self.time>=6 and self.time<=8:
self.food='Eggplant & Tofu'
if self.time>=9 and self.time<=11:
self.food='Broccoli Chicken'
return '{} sleeps {} hours daily and should have {}'.format(self.name,self.time,self.food)
else:
return "{}'s duration is unknown thus should have only bamboo leaves".format(self.name)
panda1=Panda("Kunfu","Male", 5)
panda2=Panda("Pan Pan","Female",3)
panda3=Panda("Ming Ming","Female",8)
print(panda2.sleep(10))
print(panda1.sleep(4))
print(panda3.sleep())
or
class Panda:
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age
def sleep(self,time=None):
self.time=time
if self.time!=None:
if self.time>=3 and self.time<=5:
self.food='Mixed Veggies'
if self.time>=6 and self.time<=8:
self.food='Eggplant & Tofu'
if self.time>=9 and self.time<=11:
self.food='Broccoli Chicken'
print('{} sleeps {} hours daily and should have {}'.format(self.name,self.time,self.food))
else:
print("{}'s duration is unknown thus should have only bamboo leaves".format(self.name))
panda1=Panda("Kunfu","Male", 5)
panda2=Panda("Pan Pan","Female",3)
panda3=Panda("Ming Ming","Female",8)
panda2.sleep(10)
panda1.sleep(4)
panda3.sleep()
回答2:
So the first print statement is due to the print
function in the sleep
method. The None
is being printed as you have print(panda1.sleep())
. The sleep
method doesn't return anything, and hence the None
.
To get rid of the None
, you can simply use panda1.sleep()
rather than print(panda1.sleep())
.
However, a better alternative might be to return the message you want your sleep
function to print, and then use print(panda1.sleep())
来源:https://stackoverflow.com/questions/63711545/so-basically-my-code-is-printing-none-after-printing-the-statement-i-want-it-to