Problem!!!!

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.
pythonkönig24
User
Beiträge: 4
Registriert: Dienstag 2. März 2010, 08:57

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()
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Ich kann Python zwar selber noch nicht richtig, aber kannst du das mal auf diese Seite packen: paste.pocoo.org
MfG DeKugelschieber
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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)
Minicar
User
Beiträge: 24
Registriert: Montag 1. März 2010, 10:26

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Minicar hat geschrieben:Kommentiere jede Zeile.
Nee, bitte nicht!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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:
Benutzeravatar
Anaconda
User
Beiträge: 14
Registriert: Dienstag 2. März 2010, 17:11

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.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Das hilft ihm aber nicht, das seine Hausaufgabe 'Finde den Fehler' lautet und nicht 'Schreib ein besseres Programm' ;) scnr
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
Anaconda
User
Beiträge: 14
Registriert: Dienstag 2. März 2010, 17:11

Ach, das ist eine Hausaufgabe? Konnte ich nicht rauslesen. Ich hab nur gelesen, dass da ein Fehler drin ist.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

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
Zuletzt geändert von xWolf am Donnerstag 4. März 2010, 12:22, insgesamt 1-mal geändert.
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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?
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

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
pythonkönig24
User
Beiträge: 4
Registriert: Dienstag 2. März 2010, 08:57

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:
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…
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Oder da sucht jemand nach einem originellen Weg, seinen Account zu löschen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

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
Antworten