Seite 1 von 1
Anfänger Problem mit Python
Verfasst: Samstag 9. Januar 2010, 13:38
von Kriegsfee
Hallo! Ich weiß nicht, wohin damit, also ins Allgemeine Fragen - Board

Ich hab heute früh (um 1...^^) mit Python angefangen und habe keinerlei Programmiererfahrung. Nach dem Einlesen hab ich veersucht, mein erstes "Programm" mit PyScripter zu schreiben (da mir nichts eingefallen ist, was ich brauche und auch kann, hab ich das erste geschrieben, was mir in den Kopf kam und einfach war

):
Code: Alles auswählen
text1 = "the game"
text2 = "Boxxy"
text3 = "Jews did WTC"
text4 = "Niggers love Watermelons and Chicken"
text5 = "Newfag"
text6 = "An Hero"
text7 = "Yo dawg"
text8 = "Rule 34"
meme = raw_input("What kind of meme would you like to see? Interesting, Stupid, Porn or Racist?")
if (meme == "Interesting" or "interesting"):
print text1
print text6
else:
if (meme == "Stupid" or "stupid"):
print text2
print text5
else:
if (meme == "Racist" or "racist"):
print text3
print text4
print text7
else:
if (meme == "Porn" or "porn"):
print text8
else:
print ("ERROR! Wrong meme picked!")
Interessanterweise gibt das Script IMMER text1 und text2 aus, egal was ich eingebe. Meine Eingabe wird also völlig ignoriert.
Wieso?
Verfasst: Samstag 9. Januar 2010, 13:47
von Darii
Weil ``or`` schwächer bindet als ``==``(und selbst wenn es das nicht täte wäre der Ausdruck falsch). Im ``if``(bei dem du übrigens keine Klammern bauchst) steht also:
was immer ``True`` ist. Du willst aber ein
oder kürzer
oder noch besser:
Verfasst: Samstag 9. Januar 2010, 13:49
von bankkind
Verfasst: Samstag 9. Januar 2010, 13:51
von Kriegsfee
Danke für die schnelle Hilfe! Gleich mal weiter schreiben

Verfasst: Samstag 9. Januar 2010, 14:03
von LP640
Hallo Kriegsfee
ich habe noch einen verbesserungsvorschlag für dein programm
man könnte eine while-Schleife einbauen
das ganze würde dann so aussehen:
Code: Alles auswählen
text1 = "the game"
text2 = "Boxxy"
text3 = "Jews did WTC"
text4 = "Niggers love Watermelons and Chicken"
text5 = "Newfag"
text6 = "An Hero"
text7 = "Yo dawg"
text8 = "Rule 34"
ende = False
while ende == False:
meme = raw_input("What kind of meme would you like to see? Interesting, Stupid, Porn or Racist, (Ende)?")
if meme.upper() == "INTERESTING":
print text1
print text6
elif meme.upper() == "STUPID":
print text2
print text5
elif meme.upper() == "RACIST":
print text3
print text4
print text7
elif meme.upper() == "PORN":
print text8
elif meme.upper() == "ENDE":
print "Bye Bye"
ende = True
else:
print "ERROR! Wrong meme picked!"
print"-------------------------------------------------------------------"
mfg
LP640
Verfasst: Samstag 9. Januar 2010, 14:06
von Kriegsfee
LP640 hat geschrieben:Hallo Kriegsfee
ich habe noch einen verbesserungsvorschlag für dein programm
man könnte eine while-Schleife einbauen
das ganze würde dann so aussehen:
Code: Alles auswählen
text1 = "the game"
text2 = "Boxxy"
text3 = "Jews did WTC"
text4 = "Niggers love Watermelons and Chicken"
text5 = "Newfag"
text6 = "An Hero"
text7 = "Yo dawg"
text8 = "Rule 34"
ende = False
while ende == False:
meme = raw_input("What kind of meme would you like to see? Interesting, Stupid, Porn or Racist, (Ende)?")
if meme.upper() == "INTERESTING":
print text1
print text6
elif meme.upper() == "STUPID":
print text2
print text5
elif meme.upper() == "RACIST":
print text3
print text4
print text7
elif meme.upper() == "PORN":
print text8
elif meme.upper() == "ENDE":
print "Bye Bye"
ende = True
else:
print "ERROR! Wrong meme picked!"
print"-------------------------------------------------------------------"
mfg
LP640
Yeah! Sehr gut, danke! Genau das wollte ich! Also eine while-Schleife, wieder was gelernt
Zwei Fragen: Wieso "ende = False" am Anfang?
das .upper () lässt das Script die Groß/Kleinschreibung ignorieren?
Verfasst: Samstag 9. Januar 2010, 14:32
von cofi
Ad 1) Weil `ende` einen Wert haben bzw. ueberhaupt erst existieren muss. `while not ende` waere btw besser.
Ad 2) nein `upper` erzeugt eine Version des Strings bei dem alle Zeichen gross sind. Mach dich am besten gleich mit der Library Reference bekannt oder lese das Tutorial, falls du das noch nicht getan hast.
Verfasst: Samstag 9. Januar 2010, 14:44
von Hyperion
Mich wundert es stark, dass noch niemand über text1, text2, ... gemeckert hat! (Oder hab ich das irgend wo implizit überlesen?)
Also, @OP:
Quasi immer, wenn Du Bezeichner nummerierst, machst Du schon einen Designfehler und solltest lieber eine Liste, Tupel o.ä. verwenden!
Code: Alles auswählen
#text1 = "the game"
#text2 = "Boxxy"
#text3 = "Jews did WTC"
#text4 = "Niggers love Watermelons and Chicken"
#text5 = "Newfag"
#text6 = "An Hero"
#text7 = "Yo dawg"
#text8 = "Rule 34"
# besser als Tupel
text = (
"the game",
"Boxxy",
...
)
# Zugriff per Index
print text[0]
# Ausgabe mit "".join()
print "\n".join(text[2:4])
Edit: Auch wenn's leicht OT ist:
Ich "muss" mich gerade mit einer Java Hausaufgabe einer Freundin von mir befassen... hier mal die Vorgabe der Übungsveranstalter. *würg*
Code Vorgabe
Verfasst: Samstag 9. Januar 2010, 15:01
von cofi
Hyperion hat geschrieben:Mich wundert es stark, dass noch niemand über text1, text2, ... gemeckert hat! (Oder hab ich das irgend wo implizit überlesen?)
Bei dem inhalt hab ich das explizit ueberlesen

Allerdings kann man den "Texten" ja auch einen sprechenden Namen geben, insofern ist ein Dictionary evtl besser als eine Liste/Tupel
Zum Java-Source: Nuja, vielleicht hat das ja paedagogische gruende kein Array oder aehnliches zu verwenden *duck*
Verfasst: Samstag 9. Januar 2010, 15:05
von Hyperion
cofi hat geschrieben:Hyperion hat geschrieben:Mich wundert es stark, dass noch niemand über text1, text2, ... gemeckert hat! (Oder hab ich das irgend wo implizit überlesen?)
Bei dem inhalt hab ich das explizit ueberlesen

Allerdings kann man den "Texten" ja auch einen sprechenden Namen geben, insofern ist ein Dictionary evtl besser als eine Liste/Tupel
Danke für die Ergänzung
Zum Java-Source: Nuja, vielleicht hat das ja paedagogische gruende kein Array oder aehnliches zu verwenden *duck*
Hm... ich hatte eine Aufgabe schon einmal mit einer ArrayList gelöst und entsprechend nur das Interface List<"Object"> als Typ definiert - ich denke das dürfte den Hiwis auffallen

Nun ja, ich fürchte fast, dass diese "Spezialisten" aus unserem Institut einfach keine Ahnung von Didaktik und Pädagogik haben. (Denn dann würde ja die Folgeaufgabe erforderlich sein, in der es dann in idiomatisch richtig und elegant gelöst wird - so wie ich group by bei SQL auch erst nach 10 Queries mit speziellem where erkläre

)
Verfasst: Samstag 9. Januar 2010, 15:12
von LP640
so hier die "perfekte" lösung
Code: Alles auswählen
text = ("the game","Boxxy","Jews did WTC","Niggers love Watermelons and Chicken","Newfag","An Hero","Yo dawg","Rule 34")
ende = False
while not ende:
meme = raw_input("What kind of meme would you like to see? Interesting, Stupid, Porn or Racist, (Ende)?")
if meme.upper() == "INTERESTING":
print text[0]
print text[5]
elif meme.upper() == "STUPID":
print text[1]
print text[4]
elif meme.upper() == "RACIST":
print text[2]
print text[3]
print text[6]
elif meme.upper() == "PORN":
print text[7]
elif meme.upper() == "ENDE":
print "Bye Bye"
ende = True
else:
print "ERROR! Wrong meme picked!"
print"-------------------------------------------------------------------"
mfg
LP640
Verfasst: Samstag 9. Januar 2010, 15:21
von Hyperion
Meine Version, ungetestet:
Code: Alles auswählen
text = ("the game","Boxxy","Jews did WTC","Niggers love Watermelons and Chicken","Newfag","An Hero","Yo dawg","Rule 34")
while True:
meme = raw_input("What kind of meme would you like to see? Interesting, Stupid, Porn or Racist, (Ende)?")
mapper = {
"interesting": ((0, 5), False),
"stupid": ((1, 4), False),
"ende": ((), True)
# and so on ...
}
try:
param, state = mapper[meme.lower()]
if not state:
print "\n".join(map(text.get, param))
else:
break
except KeyError, e:
print "Error, wrong 'meme' picked..."
print "-"*79
Verfasst: Samstag 9. Januar 2010, 15:25
von Kriegsfee
Danke nochmal, daraus kann ich viel lernen!
Verfasst: Samstag 9. Januar 2010, 15:36
von BlackJack
@LP640: Gut dass das Wort in Anführungszeichen steht.
Code: Alles auswählen
def main():
meme2texts = {
'interesting': ['the game', 'An Hero'],
'stupid': ['Boxxy', 'Newfaq'],
'racist': ['Jews did WTC',
'Niggers love Watermelons and Chicken',
'Yo dawg'],
'porn': ['Rule 34']
}
while True:
prompt = ('What kind of meme would you like to see?\n' +
('%s, or ende? ' % ', '.join(meme2texts.iterkeys()))
.capitalize())
meme = raw_input(prompt).lower()
if meme == 'ende':
break
print '\n'.join(meme2texts.get(meme, ['Error! Wrong meme picket!']))
print '-' * 75
if __name__ == '__main__':
main()
Verfasst: Samstag 9. Januar 2010, 16:22
von Kriegsfee
Um Gottes Willen...jetzt wirds unübersichtlich für mich^^
Was bringt das break?
Verfasst: Samstag 9. Januar 2010, 16:47
von Dauerbaustelle
Springt aus einer Schleife (`for` oder `while`) raus. Du hast Recht, das ist in der Tat unübersichtlich :-)
Verfasst: Samstag 9. Januar 2010, 16:56
von cofi
Zu `break` (Selbstreferenzen sind cool
)
Das ist uebrigens genau der Punkt an dem du mit dem Tutorial wirklich anfangen solltest

Eventuell nicht mit dem hier, da es Python 3 spezifisch ist.
Hmm .. aber dass du nicht nach dem ifmain Idiom gefragt hast ...
Verfasst: Sonntag 10. Januar 2010, 12:33
von sma
Hyperion hat geschrieben:hier mal die Vorgabe der Übungsveranstalter. *würg*
In der Tat, würg. Bestellt dem Menschen einen schönen Grus und weist ihn mal auf
http://java.sun.com/docs/codeconv/html/ ... C.doc.html hin. Man kann's auch in Java übersichtlich hinschreiben. Und vor mehr Jahren als der Mensch da wahrscheinlich Java schreibt, wurde auch in Java ein enum hinzugefügt... Fast jede Zeile in der Vorgabe da ist kritikwürdig.
Verfasst: Sonntag 10. Januar 2010, 12:36
von Hyperion
sma hat geschrieben:Hyperion hat geschrieben:hier mal die Vorgabe der Übungsveranstalter. *würg*
In der Tat, würg. Bestellt dem Menschen einen schönen Grus und weist ihn mal auf
http://java.sun.com/docs/codeconv/html/ ... C.doc.html hin. Man kann's auch in Java übersichtlich hinschreiben. Und vor mehr Jahren als der Mensch da wahrscheinlich Java schreibt, wurde auch in Java ein enum hinzugefügt... Fast jede Zeile in der Vorgabe da ist kritikwürdig.
Ich kenne die Person ganz gut - aber da ich bei seinem Chef noch durch eine Prüfung muss, halte ich mal im Moment meine Klappe... außerdem dürfte ich die Aufgabe offziell ja nicht kennen ^^ Aber wenn's dann im Frühjahr vorbei ist, werde ich sicherlich mal nen Pamphlet zur Ausbildung in Sachen Programmierung an der TU Clausthal verfassen.
*seufz* leider muss ich das jetzt mal schnell coden... ist ja für ne Frau, nimmt man auch schon mal Schmerzen in Kauf
