2016-04-13 16 views
0

Ich versuche, eine Quadratwurzel als die Anzahl für eine gezählte Schleife zu verwenden, aber ich bekomme immer den Fehler "ein float ist erforderlich." Ich habe alles versucht, was ich mir vorstellen kann, um den von math.sqrt bereitgestellten Wert in ein Float zu konvertieren, aber ich bekomme immer noch die Nachricht.Python 3 - math.sqrt - ein Float ist erforderlich

Code:

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() 

Fehler:

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 

Jede Hilfe ist sehr zu schätzen!

  • Rainy
+0

Sie haben die richtige Antwort von @ Robᵩ. Wenn Sie das nächste Mal eine Nachricht wie diese erhalten, sollten Sie überprüfen, was tilesNum ist - platzieren Sie einen Haltepunkt in der Zeile und überprüfen Sie. Oder fügen Sie eine Druckanweisung hinzu. – zmbq

Antwort

3

Sie vermissen eine return Aussage. Versuchen Sie folgendes:

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

Da Ihr getInfo() keine explizite Anweisung return hat, es None implizit zurückgibt. Ihr main() übergibt dann None an procedure(). Innerhalb procedure(), übergeben Sie None in math.sqrt(). math.sqrt() beschwert sich mit einem TypeError.

+0

Gute Antwort. Ich denke, dass es weiter verbessert werden kann, indem man erklärt, wie die drei 'TilesNums' drei verschiedene Variablen sind. Ich vermute, dass hier etwas von der Verwirrung herkommt. – NPE

+0

Danke Rob für die Antwort. Es hat perfekt funktioniert. Bitte verzeihen Sie meine Grünheit. Es ist toll, erfahrene Programmierer zu haben, die Newbs/Noobs wie mir helfen, haha. Dank dir auch, NPE, für deine Ergänzung zu Robs Antwort. –

Verwandte Themen