2016-04-13 18 views
0

Sayılan bir döngü için bir kare kökü kullanmaya çalışıyorum, ancak "float gerekli" hatasını almaya devam ediyorum. Math.sqrt tarafından sağlanan değeri bir float'a dönüştürmeyi düşünebilmem için her yolu denedim, ancak yine de mesajı alıyorum.python 3 - math.sqrt - bir float gerekli

Kodu:

from random import randrange 
import math 


def getInfo(): 

    tilesNum = float(input("Please enter number of tiles now: ")) 



def procedure(tilesNum): 

    countX = 0 

    SqRoot = float(math.sqrt(tilesNum)) 

    print(SqRoot) 

    for i in range(float(SqRoot)): 

     countX = countX + 1 
     countY = 0 


     for i in range(float(SqRoot)): 
      countY = countY + 1 
      terrain = randrange(1, 5) 

      if terrain == 1: 
       print("terrain on tile", countX, countY, "is frozen") 

      elif terrain == 2: 
       print("terrain on tile", countX, countY, "is flooded") 

      elif terrain == 3: 
       print("terrain on tile", countX, countY, "is impeded by rocks") 

      else: 
       print("terrain on tile", countX, countY, "is overgrown") 




def main(): 

    tilesNum = getInfo() 

    procedure(tilesNum) 

main() 

Hata:

Traceback (most recent call last): 
    File "C:\Users\Rainy\AppData\Local\Programs\Python\Python35\PBA prototype (problem).py", line 50, in <module> 
    main() 
    File "C:\Users\Rainy\AppData\Local\Programs\Python\Python35\PBA prototype (problem).py", line 48, in main 
    procedure(tilesNum) 
    File "C:\Users\Rainy\AppData\Local\Programs\Python\Python35\PBA prototype (problem).py", line 15, in procedure 
    SqRoot = float(math.sqrt(tilesNum)) 
TypeError: a float is required 

Herhangi bir yardım büyük beğeni topluyor!

  • Yağmurlu
+0

Doğru yanıtı @ Robᵩ'den aldınız. Bir dahaki sefere böyle bir mesaj alırsanız, hangi tileNum olduğunu kontrol etmelisiniz - çizgide bir kesme noktası yerleştirin ve kontrol edin. Veya bir baskı ifadesi ekleyin. – zmbq

cevap

3

Bir return deyimi eksik. Bu deneyin: getInfo() yana

def getInfo(): 
    tilesNum = float(input("Please enter number of tiles now: ")) 
    return tilesNum 

hiçbir açık dönüş deyimi vardır, bu örtülü None döndürür. main(), Noneprocedure()'a geçer. procedure()'un içinde, None'u math.sqrt()'a geçirirsiniz. math.sqrt(), TypeError ile şikayetçidir.

+0

İyi cevap. Ben üç 'tileNum's üç farklı değişkenler olduğunu açıklayarak daha da geliştirilebilir düşünüyorum. Sanırım bu karışıklığın bir kısmının geldiği yer. – NPE

+0

Cevabınız için teşekkürler Rob. Mükemmel çalıştı. Lütfen benim yeşilliğimi affedin. Yine de, programcıların benim gibi haleye yeni başlayanlar/noobs'lara yardımcı olacak deneyimli kişiler olması harika. Ayrıca, Rob'un cevabına eklediğiniz için NPE'ye teşekkürler. –