2015-02-06 19 views
5

Bunun daha önce sorulmuş olduğunu biliyorum, ancak cevaplar bana yardımcı olmadı:/TypeError: range() tamsayı bitiş argümanı bekleniyor, float var mı?

Girişlerin karelerinin maksimumu üzerinden bir for döngüsü çalıştıran ve tüm hesaplar tarafından kodumun doğru olduğu bir işlev oluşturdum. .ve yine de float girişlerini soruyor.

def spiral(X, Y): 

x = y = 0 
dx = 0 
dy = 0 
count = 0 

for i in range(max(X, Y)**2): 
    if (-X/2.0 < x <= X/20) and (-Y/2.0 < y <= Y/2.0): 
     print (x, y) 

    if x == y or (x < 0 and x == -y) or (x > 0 and x == 1-y): 
     dx, dy = -dy, dx 

    x, y = x+dx, y+dy 

baskı sarmal (3.0,3.0)

Ve bu hatayı alıyorum: TypeError: range() integer end argument expected, got float.

Ama denemek ve işlevini bastırırken ben 3.0 koymak ... ben ne eksik?

Teşekkür :) diğerleri gibi

+0

"X" ve "Y" değerleri için şamandıralardan geçiyorsunuz, bunun yerine tamsayıları geçirin. – 101

+0

bu şekilde işlevi çağırıyorum: print spiral (3.0, 3.0) – Chef1075

+1

@ Chef1075 - Tam olarak. '3.0',' float' türüne değil, int' türüne sahiptir. :-). – mgilson

cevap

5

yorumunda, sorunun başlıca nedeni aralık fonksiyonunda şamandıra değerinin olduğunu söyledi. Çünkü aralık işlevi float tipini argüman olarak kabul etmeyecektir.

for i in range(max(int(X), int(Y))**2): 
İlgili konular