Python For循环获取错误,表示(奇数-奇数)/2是浮点

Python For循环获取错误,表示(奇数-奇数)/2是浮点,python,function,for-loop,Python,Function,For Loop,我正在尝试用奇数个星号(例如1,3,5)制作一个金字塔的函数 我认为这一结果将是: * *** ***** 相反,我得到一个错误,说 我不明白为什么5-1被认为是浮动的 我不明白为什么5-1被认为是浮动的 5-1不是浮点数,但(5-1)/2是浮点数。原因很简单:/除法运算符总是返回浮点,即使结果的小数部分是0 有关更多信息,请参阅 错误来自范围函数,该函数需要一个整数 我不明白为什么5-1被认为是浮动的 5-1不是浮点数,但(5-1)/2是浮点数。原因很简单:/除法运算符总是返回浮点,即使结

我正在尝试用奇数个星号(例如1,3,5)制作一个金字塔的函数

我认为这一结果将是:

*
***
*****
相反,我得到一个错误,说

我不明白为什么5-1被认为是浮动的

我不明白为什么5-1被认为是浮动的

5-1
不是浮点数,但
(5-1)/2
是浮点数。原因很简单:
/
除法运算符总是返回浮点,即使结果的小数部分是0

有关更多信息,请参阅

错误来自
范围
函数,该函数需要一个整数

我不明白为什么5-1被认为是浮动的

5-1
不是浮点数,但
(5-1)/2
是浮点数。原因很简单:
/
除法运算符总是返回浮点,即使结果的小数部分是0

有关更多信息,请参阅


错误来自
range
函数,该函数需要一个整数。

range
不能进行浮点运算。像这样试试

def drawPyramid(base):
    #makes variable for amount of asterisks that have to be drawn
    starcounter = 1
    for i in range(starcounter, base):
        #calculates number of spaces needed and prints them
        for i in range((base - starcounter + 1) // 2):
            print(' ', end='')
        #prints current amount of asterisks
        for i in range(starcounter):
            print('*', end='')
        print('\n')
        #increases amount of stars
        starcounter += 2
drawPyramid(4)

范围
不能接受浮动。像这样试试

def drawPyramid(base):
    #makes variable for amount of asterisks that have to be drawn
    starcounter = 1
    for i in range(starcounter, base):
        #calculates number of spaces needed and prints them
        for i in range((base - starcounter + 1) // 2):
            print(' ', end='')
        #prints current amount of asterisks
        for i in range(starcounter):
            print('*', end='')
        print('\n')
        #increases amount of stars
        starcounter += 2
drawPyramid(4)
只需使用
/
(整数除法)而不是
/
(浮点除法),因为
范围
需要整数:

只需使用
/
(整数除法)而不是
/
(浮点除法),因为
范围
需要整数:

使用整数除法(
/
)代替浮点除法(
/
):

范围内i的
((基本-起始计数器)//2)
使用整数除法(
/
)代替浮点除法(
/
):

范围内i的
((基本-起始计数器)//2)

谢谢!为什么第四排有7个星号?函数不是打印星号然后添加2吗?@noobprogrammer,因为第一个循环以1开始,以5结束,这意味着它运行了4次。尝试使用
drawPyramid(4)
以获得预期的输出。我尝试了,但这弄乱了空格-第一列只有1个空格,第二列没有空格。在第二个循环中再添加1个值:`for I in range((base-starcounter+1)//2)``我如何使其完全符合参数?我现在必须让它与输入一起工作。我尝试了
drawPyramid(baseInput-1)
,因为drawPyramid(4)的基长为5(因此输入5会使基长为5的金字塔),但当我使baseInput=3时,基长仅为1。如果这很难理解,很抱歉。谢谢!为什么第四排有7个星号?函数不是打印星号然后添加2吗?@noobprogrammer,因为第一个循环以1开始,以5结束,这意味着它运行了4次。尝试使用
drawPyramid(4)
以获得预期的输出。我尝试了,但这弄乱了空格-第一列只有1个空格,第二列没有空格。在第二个循环中再添加1个值:`for I in range((base-starcounter+1)//2)``我如何使其完全符合参数?我现在必须让它与输入一起工作。我尝试了
drawPyramid(baseInput-1)
,因为drawPyramid(4)的基长为5(因此输入5会使基长为5的金字塔),但当我使baseInput=3时,基长仅为1。很抱歉,这很难理解。
  *

 ***

*****

for i in range((base - starcounter) // 2):