Python 使用for循环从星号中画出一个三角形

Python 使用for循环从星号中画出一个三角形,python,geometry,python-idle,Python,Geometry,Python Idle,为什么它总是告诉我“float对象不能解释为整数”?我知道这是因为(尺寸+1)/2,但我不认为这会有什么不同 它应该创建一个三角形,如下所示: size = int(input("Enter an odd number width: ")) for row in range(1, (size+1)/2, 1): for character in range(1, size): print("*"*character) (行是宽度+1/2,输入的

为什么它总是告诉我“float对象不能解释为整数”?我知道这是因为(尺寸+1)/2,但我不认为这会有什么不同

它应该创建一个三角形,如下所示:

size = int(input("Enter an odd number width: "))
    for row in range(1, (size+1)/2, 1):
        for character in range(1, size):

            print("*"*character)

(行是宽度+1/2,输入的数字是最大的一行星号,并且行每次以2的增量递增(即1、3、5、7、9、13)。

因为浮点对象不能解释为整数。使用整数除法:

*
***
*****
*******
*********
***********
*************
否则它将导致一个浮点数(在Python 3上)

,因为
(大小+1)/2
理论上可能有一个小数部分,Python总是从中返回一个浮点数。
range
不接受浮点数,因为没有通用的方法将其转换为整数而不会潜在地丢失信息。这两个步骤中的任何一个都不会导致这些问题的特殊输入

你不关心那些事情,因为你认为<代码>大小<代码>甚至是一个无效的输入。但是Python不知道你不关心潜在的数据丢失,除非你告诉它-你可以这样做:

(size + 1) // 2

这将删除数字的小数部分,只给出整数部分(即,向负无穷大舍入)。

是否使用Python 3?在这种情况下,两个整数的除法将给出一个浮点。使用
(size+1)//2
获得整数只需1个循环:
对于范围内的i(nRows):打印“*”*(i*2+1)
它不是四舍五入到零;
/
对结果进行预测。@user2357112确实如此。我将帖子改为“朝向负无穷大”,当然,在这种特定情况下,它们是等效的,因为OP的代码无论如何都需要正数。
(size + 1) // 2