Python turtle绘图报TypeError: Start must be an integer错误
错误诱发原因
Python 3 中使用单斜杠/执行除法运算时,无论参与运算的数值是否为整数,返回结果均为浮点数类型。而内置range()函数要求传入的循环边界参数必须是整数,传入浮点数时就会抛出TypeError: Start must be an integer错误。
代码中两处循环参数的写法均触发了这个问题:
- 奇数判断分支中使用
range((line+1)/2) - 偶数判断分支中使用
range(line/2)
即使line是整数,上述两个除法表达式的计算结果也是浮点数,例如输入line=3时,(3+1)/2的返回值是2.0而非整数2,不符合range()的参数要求,直接触发报错。
修复方法
将两处除法的单斜杠/替换为整数除法运算符//即可。//会在除法运算后返回向下取整的整数结果,完全匹配预设的计算逻辑:
- 奇数场景:
(line+1)//2,例如line=3时计算结果为整数2,满足“奇数加1后除以2”的逻辑 - 偶数场景:
line//2,例如line=4时计算结果为整数2,满足“偶数直接除以2”的逻辑
修复后的核心循环代码如下:
if line % 2 != 0: for i in range((line+1)//2): for _ in range(linenum): draw(edge,line) rt(135); fd(sqrt(edge**2*2)); rt(45) pu(); bk(edge*(linenum+1)); rt(90); fd(edge*2); lt(90); pd() linenum += 2 else: for i in range(line//2): for _ in range(linenum): draw(edge,line) rt(135); fd(sqrt(edge**2*2)); rt(45) pu(); bk(edge*(linenum+1)); rt(90); fd(edge*2); lt(90); pd() linenum += 2
内容的提问来源于stack exchange,提问作者Meno
相关产品推荐
相关产品推荐

