web-dev-qa-db-ja.com

単純なpythonプログラム: "TypeError: 'float'オブジェクトは整数として解釈できません"でこのエラーが発生し続けます

変数cを使用できない理由がわかりません。

コード:

from turtle import *

speed(0)
hideturtle()
c = 450

def grid(x,y,a):
    seth(0)
    pu()
    goto(x,y)
    pd()
    for i in range(4):
        forward(a)
        rt(90)
    for i in range(c/10):
        seth(0)
        forward(10)
        rt(90)
        forward(c)
        backward(c)
    for i in range(c/10):
        seth(0)
        rt(90)
        forward(10)
        rt(90)
        forward(c)
        backward(c)
    pu()
    goto(a+10,0)
    write("x")
    goto(0,a+10)
    write("y")
    pd()

grid(0,0,c)
grid(-c,0,c)
grid(-c,c,c)
grid(0,c,c)

次のエラーメッセージが表示されます。

Traceback (most recent call last):
  File "C:\Users\nick\Desktop\gridv2.py", line 35, in <module>
    grid(0,0,c)
  File "C:\Users\nick\Desktop\gridv2.py", line 15, in grid
    for i in range(c/10):
TypeError: 'float' object cannot be interpreted as an integer
26
remorath

に:

for i in range(c/10):

結果としてフロートを作成しています-これを修正するには、int除算演算子を使用します。

for i in range(c // 10):
58
Jon Clements

range()は整数でのみ機能しますが、/演算子は常にfloat値になります。

>>> 450 / 10
45.0
>>> range(450 / 10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer

値を再び整数にします。

for i in range(int(c / 10)):

または、//フロア分割演算子:

for i in range(c // 10):
11
Martijn Pieters

以下に示すように、rangeは整数のみをサポートします。

>>> range(15.0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: range() integer end argument expected, got float.
>>> range(15)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>>

しかしながら、 c/10は、/は常にfloatを返します。

rangeに入れる前に、c/10整数。これは int に配置することで実行できます。

range(int(c/10))

または // 。整数を返します。

range(c//10)
7
iCodez