Wurzelprogramm: Lösung ohne Nachkommastellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
amigo
User
Beiträge: 10
Registriert: Donnerstag 12. Januar 2012, 16:16

Hi Leute,
Also ich hab folgendes Problem: Ich hab ein Programm geschrieben, dass Quadratwurzeln mit math.sqrt() ausrechnet.
Hier der Code:

Code: Alles auswählen

import math
print "Dieses Programm errechnet die Wurzel der Zahl, die sie eingeben."

def rechnung():
          global zahl         
          try:
               zahl = input("Bitte eine positive Zahl eingeben:")

          except NameError: 
               return eingabe()
          if(zahl>= 0):
               wurzel = d(math.sqrt(zahl))
               print "Die Wurzel von %d ist %d" %(zahl, wurzel)
          else:     return rechnung()
          
          wieder = raw_input("Wenn Sie noch eine Rechnung durchführen möchten, dann geben Sie bitte J ein!")
          if (wieder == "J"):
               return rechnung()
          else:
               print ("Auf Wiedersehen.")
               
          
rechnung()
Das Problem ist, dass wenn eine Zahl eingegeben wird, die keine grade wurzel hat, dann wird das Ergebnis abgerundet.
Was kann ich dagegen tun??
Danke im Vorraus
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

amigo hat geschrieben:Das Problem ist, dass wenn eine Zahl eingegeben wird, die keine grade wurzel hat, dann wird das Ergebnis abgerundet.
Das kann nicht der ganze Code sein. Was macht denn die Funktion d() die du in "d(math.sqrt(zahl))" verwendest? Abrunden vielleicht?

Ganz kurz noch (ich muss weg): global ist böse und der Aufruf der Funktion aus sich selber ist auch suboptimal.
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Du verwendest die Stringformatierung falsch. Wenn man eine Gleitkommazahl ausgeben will, sollte man nicht 'int' auswählen.

Code: Alles auswählen

>>> '%d' % 1.1
'1'
>>> '%f' % 1.1
'1.100000'
amigo
User
Beiträge: 10
Registriert: Donnerstag 12. Januar 2012, 16:16

Also die funktion d() war ausversehen da und ich weiß dass das kein perfekter stil ist aber ich habe jetzt nach ner langen pause erst wieder angefangen zu programmieren. Vllt kannst du mir sagen wie du es machen würdest, das eine eingabe solange neu kommt bis die gewünschte eingabe da.ist.
Das mit den Variablen probier ich mal danke:-D
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Indem du eine `while`-Schleife benutzt und ausbrichst, wenn eine gültige Eingabe kommt. Außerdem benutzt du mal schön `raw_input` und konvertierst das zu `int`. ;)
Antworten