在循环中调用了方法输出多了个None是怎么回事呢

问题遇到的现象和发生背景

自己在练习的时候,写了一段代码如下,请问运行结果中的None是怎么回事?

问题相关代码,请勿粘贴截图

from random import randint

class Die:
def init(self, sides=6):
self.sides = sides

def roll_die(self):
    print(f"面数为{self.sides}的骰子,这次掷的朝上的一面的数字是{randint(1, self.sides)}")

die_10 = Die(10)
for i in range(1, 11):
print(die_10.roll_die())

运行结果及报错内容

面数为10的骰子,这次掷的朝上的一面的数字是10
None
面数为10的骰子,这次掷的朝上的一面的数字是9
None
面数为10的骰子,这次掷的朝上的一面的数字是10
None
面数为10的骰子,这次掷的朝上的一面的数字是9
None
面数为10的骰子,这次掷的朝上的一面的数字是9
None
面数为10的骰子,这次掷的朝上的一面的数字是7
None
面数为10的骰子,这次掷的朝上的一面的数字是1
None
面数为10的骰子,这次掷的朝上的一面的数字是10
None
面数为10的骰子,这次掷的朝上的一面的数字是2
None
面数为10的骰子,这次掷的朝上的一面的数字是3
None

我的解答思路和尝试过的方法

用for循环和while循环都有None,只有一个一个打印的时候才没有

我想要达到的结果

用上for循环或者while循环,不要有None。

你的代码两个错误:

  1. init 方法是这样的 init()
  2. 直接调用方法就实现打印了,不用再打印一遍
    正确代码:
from random import randint

class Die(object):
    def __init__(self, sides=6):
        self.sides = sides
    def roll_die(self):
        print(f"面数为{self.sides}的骰子,这次掷的朝上的一面的数字是{randint(1, self.sides)}")
die_10 = Die(10)
for i in range(1, 11):
    die_10.roll_die()



在最后打印骰子的点数时,直接使用die_10.roll_die()就能打印出骰子的点数了, 如果再用print打印前面那个函数,因为函数没有返回值,所以会打印一个None, 所以去掉这个print即可。修改如下:

from random import randint

class Die:
    def __init__(self, sides=6):
        self.sides = sides

    def roll_die(self):
        print(f"面数为{self.sides}的骰子,这次掷的朝上的一面的数字是",randint(1, self.sides))
        
die_10 = Die(10)
for i in range(1, 11):
    die_10.roll_die()

img

roll_die函数没有返回值,它里面本身就写了打印
你不要再套个print在外面
要么函数里别打印,把值return回来,在外面套print打印也行
总之要么里面打印,要么外面打印,不要两头写打印

for i in range(1, 11):
print(die_10.roll_die())
你这里是输出调用roll_die函数的返回值。
但你roll_die函数下面只有print语句,没有return,所有返回的是None
所有现在。要么删除for语句下面的print
for i in range(1, 11):
die_10.roll_die()
要么,将roll_die函数中的输出改为返回
def roll_die(self):
return f"面数为{self.sides}的骰子,这次掷的朝上的一面的数字是{randint(1, self.sides)}"

因为你def里面没有return,没有这个就有none,加上就没了,用return代替print