Seite 1 von 2
Problem!!!!
Verfasst: Dienstag 2. März 2010, 09:04
von pythonkönig24
Beschreibung:Das ist ein Programm für die umrechnung von Dezimalzahlen,jedoch gibt es einen hacken unzwar ist hier ein fehler drin,könnt ihr mir helfen ihn zu finden.
def main():
wahl =0
while(1):
liste=[]
wahl=menue()
if (wahl > 3):
break
zahl=input ("Bitte geben sie eine Dezimalzahl ein: ")
if wahl == 1:
liste=dual(zahl,liste)
if wahl == 2:
liste=okt(zahl,liste)
if wahl == 3:
liste=hexa(zahl,liste)
ausgabe(wahl,zahl,liste)
print
raw_input(" weiter mit <Enter> ...")
print "\n\t!! Programmende!!"
def menue():
print """
**************************************
* Stellenwertsystem Umrechner *
**************************************
"""
print "<1> Dezimal -> Dual"
print "<2> Dezimal -> Oktal"
print "<3> Dezimal -> Hexadezimal"
print "<4> Programmende"
return input("Treffen Sie bitte Ihre Wahl (1-4)? ")
def ausgabe(wahl, zahl,liste):
print
print " ___________________ Ergebnis der Berechnung ________________\n"
if wahl == 1:
print "\tDez -> Dual"
if wahl == 2:
print "\tDez -> Oktal"
if wahl == 3:
print "\tDez -> Hexa"
print "\t",zahl ,"->",liste
print "\t\t________________________________"
def dual(z,li):
z=1
li.insert(0,z)
z=0
li.insert(0,z)
z=0
li.insert(0,z)
return li
def okt(z,li):
z=7
li.insert(0,z)
z=5
li.insert(0,z)
z=6
li.insert(0,z)
return li
def hexa(z,li):
z="F"
li.insert(0,z)
z=5
li.insert(0,z)
z="B"
li.insert(0,z)
return li
main()
Verfasst: Dienstag 2. März 2010, 09:07
von DeKugelschieber
Ich kann Python zwar selber noch nicht richtig, aber kannst du das mal auf diese Seite packen:
paste.pocoo.org
Verfasst: Dienstag 2. März 2010, 10:17
von CM
Hallo und willkommen im Forum!
Du kannst zwar längeren Code in dem Pastebin verlinken, dass DeKugelschieber zeigt, aber ansonsten bitte hier im Forum die
Code Tags nutzen.
Du solltest vielleicht erst einmal das Tutorial lesen, denn Dein Programm schwächelt an so einigen Stellen. Einige Punkte herausgegriffen:
- raw_input() statt input() nutzen.
- Für alle Funktionen gibt es Python build-ins - bin() allerdings erst ab 2.6.
- Funktionen kann man auch an ein Dictionary binden, da wird die Wahlprozedur sehr viel kürzer.
- Dann gibt es da noch den
'if __name__ == "__main__"'-Trick
Ansonsten: Bitte erst mal in Code-Tags setzen - So kann man den Code kaum lesen - ich habe jedenfalls gerade keine Zeit mich da durch zu denken.
HTH
Christian
Re: Problem!!!!
Verfasst: Dienstag 2. März 2010, 13:30
von /me
pythonkönig24 hat geschrieben:Problem!!!!
Noch eine kleine Ergänzung: bitte beschreibe das Thema deiner Frage im Titel etwas ausführlicher.
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' (Terry Pratchett - Eric)
hey
Verfasst: Dienstag 2. März 2010, 15:44
von Minicar
könntest du das vll mal mit code py hier einbauen? dann ist der ganze Spaß übersichtlicher. Auch das Einrücken macht das ganze um einiges leichter.
Was dir vielleicht helfen könnte. Kommentiere jede Zeile. So habe ich schon viele Fehler finden können
Re: hey
Verfasst: Dienstag 2. März 2010, 16:02
von numerix
Minicar hat geschrieben:Kommentiere jede Zeile.
Nee, bitte nicht!
Re: hey
Verfasst: Dienstag 2. März 2010, 19:55
von cofi
numerix hat geschrieben:Minicar hat geschrieben:Kommentiere jede Zeile.
Nee, bitte nicht!
Doch doch Quietscheentchen-Debugging hilft, aber, dann bitte nicht posten, da hast du recht

Verfasst: Mittwoch 3. März 2010, 20:41
von Anaconda
Ich bin zwar Einsteiger und blicke nicht so ganz durch was du da in deinem Code machst, aber für eine einfache Umrechnung in Hex, Okt und Dual würd ich das so machen:
Code: Alles auswählen
x = input("Bitte geben Sie eine Dezimalzahl ein: ")
zahl = int(x)
print("Welche Umrechnung soll erfolgen?\n"
"<1> Dezimal -> Dual\n"
"<2> Dezimal -> Oktal\n"
"<3> Dezimal -> Hexadezimal\n"
"<4> Programmende")
wahl = input()
if wahl == "1":
zahl_bin = bin(zahl)
print("Der Dualwert ist:", zahl_bin[2:])
elif wahl == "2":
zahl_oct = oct(zahl)
print("Der Oktalwert ist:", zahl_oct[2:])
elif wahl == "3":
zahl_hex = hex(zahl)
print("Der Hexwert ist:", zahl_hex[2:])
Da ist jetzt nur die Umrechnung, das mit dem Menü kannst du dir dann ja selbst zurecht basteln.
Verfasst: Mittwoch 3. März 2010, 22:02
von Defnull
Das hilft ihm aber nicht, das seine Hausaufgabe 'Finde den Fehler' lautet und nicht 'Schreib ein besseres Programm'

scnr
Verfasst: Mittwoch 3. März 2010, 22:05
von Anaconda
Ach, das ist eine Hausaufgabe? Konnte ich nicht rauslesen. Ich hab nur gelesen, dass da ein Fehler drin ist.
Verfasst: Donnerstag 4. März 2010, 08:09
von /me
Anaconda hat geschrieben:Ach, das ist eine Hausaufgabe? Konnte ich nicht rauslesen.
Wir schmeißen platt Code ins Forum, liefern eine nichtssagende Fehlerbeschreibung und melden uns dann nicht mehr.
Für mich klingt das sehr nach Hausaufgabe.
Verfasst: Donnerstag 4. März 2010, 12:05
von xWolf
Hi Christian,
Ich hab schon 'ne Menge gelesen. Auch Mark Summerfield. Aber wahrscheinlich nicht richtig
Warum ist:
eigentlich so notwendig? Bzw. meine Programme laufen auch ohne...
Und was ist wenn __name__ nicht gleich __main__ ist??
Ich brauch das mal erklaert fuer Dummies.
Wolf
Verfasst: Donnerstag 4. März 2010, 12:21
von xWolf
xWolf hat geschrieben:...
Warum ist:
eigentlich so notwendig?
Hab's nun begriffen.
Korrigiert mich, wenn ich falsch liege.
Fuege ich den "Trick" ein, kann ich die Klasse testen.
Wenn ich dann mit dem eingefuegten Trick aus einem anderen Modul diese Klasse aufrufe, gibt es keinen Konflikt, da ja dann nicht "__main__".
Hab's getestet und macht manche Dinge einfacher.
OK, bis die Tage
Wolf
Verfasst: Donnerstag 4. März 2010, 12:22
von CM
Es ist nicht "notwendig", sondern macht Code übersichtlicher und erlaubt ein Teile eines Moduls direkt auszuführen (z. B. mit Testcode) oder auch in andere Module einzubinden - eben ohne, dass alles unter der Abfrage ausgeführt wird.
Ein immer noch interessanter Beitrag zum Thema ist
What is 'if __name__ == "__main__"' for? und auch
http://www.artima.com/weblogs/viewpost.jsp?thread=4829 von Guido van Rossum.
Mit anderen Worten: Deine Programme / Skripte laufen auch ohne. Aber bei größeren Projekten, kannst Du u. U. die Übersicht verlieren. Das was manche Leute machen - und auch beim Post des OP habe ich das zunächst so gelesen, trifft aber nicht zu - ist Funktionen und direkt auszuführenden Code mischen. Das ist das krasse Gegenteil von Übersichtlichkeit.
HTH
Christian
PS Kam ich wohl einen kleinen Tick zu spät, aber was Du meinst ist wohl nicht "Klasse", sondern "Modul" - oder verstehe ich Dich falsch?
Verfasst: Donnerstag 4. März 2010, 12:27
von xWolf
CM hat geschrieben:..
PS Kam ich wohl einen kleinen Tick zu spät, aber was Du meinst ist wohl nicht "Klasse", sondern "Modul" - oder verstehe ich Dich falsch?
Du hast in allen Punkten recht.
Danke für die schnelle Antwort.
Wolf
Re: Problem!!!!
Verfasst: Dienstag 29. Juni 2010, 07:42
von pythonkönig24
Re: Problem!!!!
Verfasst: Dienstag 29. Juni 2010, 07:50
von BlackJack
@pythonkönig24: Hier behauptest Du es wäre eine 1- geworden:
http://www.python-forum.de/viewtopic.ph ... 53#p173053
Was glaubst Du mit Beleidigungen und Lügen zu erreichen!? Das Dich einer von uns Deppen ernst nimmt hoffentlich nicht…
Re: Problem!!!!
Verfasst: Dienstag 29. Juni 2010, 07:55
von snafu
Oder da sucht jemand nach einem originellen Weg, seinen Account zu löschen.
Re: Problem!!!!
Verfasst: Dienstag 29. Juni 2010, 08:23
von Leonidas
Mit dem Tempo ist er beim nächsten Post bei einer 6 und in übernächsten bei einer 9.
Re: Problem!!!!
Verfasst: Dienstag 29. Juni 2010, 15:15
von xWolf
pythonkönig24 hat geschrieben:Alles Deppen hier!
Keiner kann einem einem ne vernünftige Antwort geben....
Hey,
eigentlich hast Du recht. Jeder gibt von uns hier seinen Senf dazu und spielt sich auf wie "Gott in Frankreich" oder als "Oberlehrer" der die Dummis, die 'ne Frage haben herunter putzen kann. Wer antwortet steht natuerlich ueber den Dingen, hat was zu schwafeln und ein Anrecht auf den Uebermenschen, da er ca. 2,54% der objektorientierten Sprache von Python bereits versteht und bereits einen Dialog mit 2+ Widgets nach 10 Stunden toben auf den Bildschirm gezaubert hat. (War ein Scherz -> fuer die Anderen

)
OK,
hier meine konkrete Loesung Deines Problems, ich hab's so gelassen wie Du es wolltest.
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
def main():
wahl =0
while(1):
liste=[]
wahl=menue()
if (wahl > 3):
break
zahl=input ("Bitte geben sie eine Dezimalzahl ein: ")
if wahl == 1:
Ergebnis=dual(zahl)
if wahl == 2:
Ergebnis=okt(zahl)
if wahl == 3:
Ergebnis=hexa(zahl)
ausgabe(wahl,zahl,Ergebnis)
print
raw_input(" weiter mit <Enter> ...")
print "\n\t!! Programmende!!"
def menue():
print """
**************************************
* Stellenwertsystem Umrechner *
**************************************
"""
print "<1> Dezimal -> Dual"
print "<2> Dezimal -> Oktal"
print "<3> Dezimal -> Hexadezimal"
print "<4> Programmende"
return input("Treffen Sie bitte Ihre Wahl (1-4)? ")
def ausgabe(wahl, zahl, Ergebnis):
print
print " ___________________ Ergebnis der Berechnung ________________\n"
if wahl == 1:
print "\tDez -> Dual"
if wahl == 2:
print "\tDez -> Oktal"
if wahl == 3:
print "\tDez -> Hexa"
print "\t",zahl ,"->",Ergebnis
print "\t\t________________________________"
def dual(z):
myDual = bin(z)
return myDual[2:]
def okt(z):
myOct = oct(z)
return myOct[1:]
def hexa(z):
myHex = hex(z)
return myHex[2:]
main()
Also, dann viel Spass beim probieren.
Und nicht entmutigen lassen.
Wolf