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. :lol:
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 :twisted:

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
CM hat geschrieben: - Dann gibt es da noch den 'if __name__ == "__main__"'-Trick ;-)

Christian
Hi Christian,

Ich hab schon 'ne Menge gelesen. Auch Mark Summerfield. Aber wahrscheinlich nicht richtig :(
Warum ist:

Code: Alles auswählen

if __name__ == "__main__"
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:

Code: Alles auswählen

if __name__ == "__main__"
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
Alles Deppen hier!
Keiner kann einem einem ne vernünftige Antwort geben....Trotzdem 3 in informatik ihr versager!!!!!!!!!!!!!!!!!! :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

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
BlackJack hat geschrieben:@pythonkönig24: Hier behauptest Du es wäre eine 1- geworden: http://www.python-forum.de/viewtopic.ph ... 53#p173053
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 :D )

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