Seite 1 von 2
if name ==
Verfasst: Freitag 11. November 2011, 20:37
von Saphareas
Hallo,
ich bin neu beim programmieren in Python und auch in diesem Forum.
Ich habe folgendes Problem. Ich habe mir ein Anfängerprogramm geschrieben:
Code: Alles auswählen
# -*- coding: cp1252 -*-
name = input("Guten Tag. Mein Name ist DoS. Wie heißen Sie? (Bitte Vor- und Nachnamen eingeben)")
if name == "Name1":
print ("Name1.")
feeling = input("Wie geht's dir?")
if feeling == "gut":
print ("Das freut mich.")
bye = input("Schüssikofski.")
else:
print ("Schade. Naja, da kann man nichts machen.")
bye = input("Schüssikofski.")
name = input("Guten Tag. Mein Name ist DoS. Wie heißen Sie? (Bitte Vor- und Nachnamen eingeben)")
if name == "Name2":
print ("Guten Tag Herr Name2. Gut, dass ich Sie sehe.")
task = input("Haben sie ihre Aufgabenliste schon abgearbeitet?")
if task == "ja":
print ("Gut gemacht. Sie haben sich ein oder zwei Bier wirklich verdient.")
if task == "nein":
print ("Vielleicht hilft Ihnen ein Bier zur motivation.")
bye2 = input("Auf Wiedersehen.")
. Nun möchte ich, dass entweder die Floskel für Name1 (Umgangssprache) oder für Name2 (Formell) eingeblendet wird. Name1 funktioniert. Bei Name2 wird aber die Console(CMD) geschlossen.
Wie schaffe ich es, dass das Programm DIE BEIDEN Namen annimmt, nicht nur einen, nicht mehr? :K
Re: if name ==
Verfasst: Freitag 11. November 2011, 21:09
von BlackJack
@Saphareas: Führe das mal in einer Konsole/DOS-Eingabeaufforderung aus, dann siehst Du auch die Fehlermeldung.
Re: if name ==
Verfasst: Freitag 11. November 2011, 23:01
von Saphareas
Aha. Danke. Jetzt bin ich schon mal einen Schritt weiter bzw. CMD spuckt einen Fehler aus:
File "Pfad der Datei", line 6, in <module> if feelung == "gut":
NameError: name 'feeling' is not defined
Und das sagt mir jetzt bitteschön was?
Re: if name ==
Verfasst: Freitag 11. November 2011, 23:07
von jerch
Das sagt Dir, das Python mit dem Bezeichner 'feeling' nix anfangen kann.
Tipp: Lauf doch mal Deinen Code von oben her ab, dann merkst Du wo und warum es klemmt.
Re: if name ==
Verfasst: Montag 14. November 2011, 12:02
von pillmuncher
@Saphareas: Welchen Wert hat deiner Meinung nach feeling, wenn name != "Name1"?
Re: if name ==
Verfasst: Montag 14. November 2011, 12:50
von JonasR
Kann es sein dass du Python 2.x benutzt?
Aufgrund dessen dass du print als Funktion benutzt hätte ich auf 3.x geschätzt aber für mich sieht es danach aus als würde input versuchen das eingegebene zu interpretieren.
Versuche es mal mit "raw_input" anstatt "input"
In meinem installierten python 2.7 kann ich print sowohl als Statement als auch als Funktion benutzten.
Re: if name ==
Verfasst: Montag 14. November 2011, 13:12
von BlackJack
@JonasR: Wo siehst Du den einen Hinweis dafür? Wenn es ein Python 2.x `input()` wäre und der TE irgendetwas eingeben würde was interpretiert wird, dann wäre ein Hinweis wenn das `input()` einen `NameError` oder einen `SyntaxError` auslöst. Das passiert aber nicht. Es sieht einfach nach einem Problem mit dem Verständnis vom Programmablauf aus, wann welche Namen an Werte gebunden werden.
Zu ``print`` in 2.7 sollte man vielleicht noch dazu sagen, dass innerhalb eines Moduls entweder nur das eine oder nur das andere möglich ist, und dass man für ``print`` als Funktion einen `__future__`-Import machen muss.
Re: if name ==
Verfasst: Montag 14. November 2011, 13:17
von JonasR
Code: Alles auswählen
>>> input()
test
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'test' is not defined
Und man muss keinen `__future__`-Import machen. Klappt bei mir ohne alles
edit:
Code: Alles auswählen
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print ("test")
test
Re: if name ==
Verfasst: Montag 14. November 2011, 13:31
von BlackJack
@JonasR: Ja und da bekommst Du von dem `input()` einen `NameError`. Das ist aber nicht das Problem welches der TE gezeigt hat. Bei ihm gab es kein Problem mit dem `input()` sondern eines bei einem Vergleich der *danach* gemacht wurde und der offensichtlich einen Namen verwendet der nicht in jedem Fall auch tatsächlich vorher definiert wird.
Du verwendest nicht die `print()`-Funktion, sondern immer noch die ``print``-Anweisung. Nur weil Du überflüssige Klammern um den Ausdruck für die Anweisung setzt, wird ``print`` dadurch nicht auf magische Weise zu einer Funktion. Wenn es eine Funktion wäre, könnt man sie auch mit mehreren Argumenten aufrufen, dem Namen etwas zuweisen, oder die Funktion als Argument an andere Funktionen übergeben. Das geht alles mit der Anweisung nicht:
Code: Alles auswählen
Python 2.7.1 (r271:86832, Apr 8 2011, 17:52:17)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print ('test', 42)
('test', 42)
>>> print = my_print
File "<stdin>", line 1
print = my_print
^
SyntaxError: invalid syntax
>>> id(print)
File "<stdin>", line 1
id(print)
^
SyntaxError: invalid syntax
>>> from __future__ import print_function
>>> print ('test', 42)
test 42
>>> print = 42
>>> id(print)
152358596
>>>
Man benötigt den `__future__`-Import also zwingend um aus der Anweisung tatsächlich eine Funktion zu machen.
Re: if name ==
Verfasst: Montag 14. November 2011, 14:33
von JonasR
@Blackjack Jetzt wo ich den Quelltext genauer betrachte sehe ich das Problem auch

Zu dem print: es hat sich halt erst einmal wie eine Funktion angefühlt... Naja wieder was gelernt =)
Denke an meinen analytischen Fähigkeiten muss ich noch üben

Re: if name ==
Verfasst: Montag 14. November 2011, 21:20
von Saphareas
So. Lange keine Zeit gehabt. Dann hier nachgeschaut. Tipps befolgt. Prog umgeschrieben. Klappt alles. Nun aber noch DAS:
Wie drücke ich es aus, wenn ich zwei Namen habe, der eine wird eingegeben: Text1 wird gelistet|der andere wird eingegeben: text2 erscheint, aber bei fremden Namen(egal welchen) soll text3 erscheinen. bei mir wird text3 trotzdem immer ganz am ende von text1/text2 angezeigt.
Code: Alles auswählen
# -*- coding: cp1252 -*-
name = input("Guten Tag. Mein Name ist DoS. Wie heißen Sie? (Bitte Vor- und Nachnamen angeben)")
if name == "name1":
print ("Hallo name1.")
feeling = input("text1.1")
if feeling == "antwort1.":
print ("text1.2")
bye = input("antwort1.1")
else:
print ("text1.3")
bye = input("antwort1.2")
if name == "name2":
print ("Guten Tag Herr name2.")
task = input("text2.1")
if task == "ja":
print ("text2.2")
bye = input("Auf Wiedersehen.")
else:
print ("text2.3")
bye = input("Auf Wiedersehen Herr name2.")
if name != "name1" or "name2":
know = input("text3")
Das Ergebnis aber sieht immer so aus:
Guten Tag. Mein Name ist... name1
texte/antworten1
text3
bzw.:
Guten Tag. Mein Name ist... name2
texte/antworten2
text3
Re: if name ==
Verfasst: Montag 14. November 2011, 21:57
von MikeDee
BlackJack hat geschrieben:Du verwendest nicht die `print()`-Funktion, sondern immer noch die ``print``-Anweisung. Nur weil Du überflüssige Klammern um den Ausdruck für die Anweisung setzt, wird ``print`` dadurch nicht auf magische Weise zu einer Funktion. Wenn es eine Funktion wäre, könnt man sie auch mit mehreren Argumenten aufrufen, dem Namen etwas zuweisen, oder die Funktion als Argument an andere Funktionen übergeben. Das geht alles mit der Anweisung nicht:
Korrigiere mich wenn ich falsch liege, kenne mich mit der Semantik noch nicht so aus, aber man kann doch print() mehrer Argumente aufrufen/übergeben/whatever?
print("text", sep=Seperator/Trennungszeichen, end=Zeilenende)
Re: if name ==
Verfasst: Montag 14. November 2011, 22:47
von BlackJack
@MikeDee: Damit liegst Du richtig. Genau das habe ich doch gesagt. Wenn es eine Funktion wäre — und das ist es in Python 2.x ohne den `__future__`-Import nicht — dann kann man das machen.
Re: if name ==
Verfasst: Montag 14. November 2011, 23:08
von MikeDee
BlackJack hat geschrieben:@MikeDee: Damit liegst Du richtig. Genau das habe ich doch gesagt. Wenn es eine Funktion wäre — und das ist es in Python 2.x ohne den `__future__`-Import nicht — dann kann man das machen.
Ach so, du meinst er/sie benutzt Python 2.x schreibt aber print() statt print, dann wird mir's klar.
Re: if name ==
Verfasst: Dienstag 15. November 2011, 18:05
von Saphareas
Könnte mir bitte jemand erklären warum das nicht funktioniert?:
Code: Alles auswählen
# -*- coding: cp1252 -*-
name = input("Guten Tag. Mein Name ist DoS. Wie heißen Sie? (Bitte Vor- und Nachnamen angeben): ")
if name == "Name1":
print ("Hallo name1.")
feeling = input("Wie geht's dir denn heute?")
if feeling == "gut":
print ("Schon das zu hören.")
bye = input("Schüssikofski! ;~D")
else:
print ("Schade. Naja, da kann man nichts machen.")
bye = input("Schüssikofski! Und Kopf hoch. ;~D")
if name == "name2":
print ("Guten Tag Herr name2.")
task = input("Haben sie schon ihre heutige Aufgabenliste abgearbeitet?")
if task == "ja":
print ("Sehr gut. Sie haben sich den Feierabend verdient.")
bye = input("Auf Wiedersehen.")
else:
print ("Wirklich nicht?\nVieleicht hilft ihenen eine Pause zur motivation.\nSie verstehen, was ich meine?\nIch frage später noch einmal nach.\nBis dahin sollten Sie alles erledigt haben.\n")
bye = input("Auf Wiedersehen Herr name2.")
while name != ["name1", "name2"]:
print ("Ich kenne sie nicht. Der Zugang wird gesperrt.")
name = input("Wie heißen Sie? (Bitte Vor- und Nachnamen angeben): ")
Nach dem man bei bye = input("...") nur Enter oder Return gedrückt hat, sollte sich das programm eigendlich beenden. Stattdessen wird
Code: Alles auswählen
while name != ["name1", "name2"]:
print ("Ich kenne sie nicht. Der Zugang wird gesperrt.")
name = input("Wie heißen Sie? (Bitte Vor- und Nachnamen angeben): ")
angezeigt.
Re: if name ==
Verfasst: Dienstag 15. November 2011, 18:15
von /me
Saphareas hat geschrieben:PS: Nach dem man bei bye = input("...") nur Enter oder Return gedrückt hat, sollte sich das programm eigendlich beenden. Stattdessen wird
Code: Alles auswählen
while name != ["name1", "name2"]:
print ("Ich kenne sie nicht. Der Zugang wird gesperrt.")
name = input("Wie heißen Sie? (Bitte Vor- und Nachnamen angeben): ")
angezeigt.
Angezeigt? Nicht ausgeführt?
Was glaubst du denn, was bei dem
name != ["name1", "name2"] miteinander verglichen wird?
Re: if name ==
Verfasst: Dienstag 15. November 2011, 19:23
von Saphareas
/me hat geschrieben:Saphareas hat geschrieben:PS: Nach dem man bei bye = input("...") nur Enter oder Return gedrückt hat, sollte sich das programm eigendlich beenden. Stattdessen wird
Code: Alles auswählen
while name != ["name1", "name2"]:
print ("Ich kenne sie nicht. Der Zugang wird gesperrt.")
name = input("Wie heißen Sie? (Bitte Vor- und Nachnamen angeben): ")
angezeigt.
Angezeigt? Nicht ausgeführt?
Was glaubst du denn, was bei dem
name != ["name1", "name2"] miteinander verglichen wird?
Ersteinaml habe keine Ahnung, was verglichen wird. Ich bin noch nicht so lange mit Python dabei.
Und dann wird der text halt angezeigt und wenn man dann enter drückt, wird der "ich kenne sie nicht. ..." text angezeigt. Aber eigentlich sollte sich das Teil nach der Enter-Eingabe beendet werden.
Re: if name ==
Verfasst: Dienstag 15. November 2011, 19:26
von lunar
@Saphareas: Wenn Du nicht verstehst, was dort verglichen wird, dann lies bitte das Tutorial in der Python-Dokumentation, so dass Du verstehst, wie Vergleiche funktionieren und was Datentypen sind.
Re: if name ==
Verfasst: Dienstag 15. November 2011, 20:17
von /me
Saphareas hat geschrieben:Ersteinaml habe keine Ahnung, was verglichen wird. Ich bin noch nicht so lange mit Python dabei.
Du musst doch irgendwie auf diese Syntax gekommen sein.
Computer sind penibel bei der Ausführung von Programmen. Sie tun das was man ihnen sagt, nicht das, was man vielleicht gemeint hat. Geh einfach das Tutorial weiter durch. Du wirst schon noch an die Stelle kommen an der erklärt wird wie man mit Listen umgeht.
Re: if name ==
Verfasst: Sonntag 27. November 2011, 13:35
von Saphareas
Danke /me,
ich hab einfach (!=) durch (in) ersetzt. Irgendwie auch logisch
Naja eine Frage bleibt: wie definiere ich
Code: Alles auswählen
if name == "Name1":
print ("Hallo Name1.")
feeling = input("Wie geht's dir denn heute?")
if feeling in("gut", "schön", "toll", "super"):
print ("Schon das zu hören.")
bye = input("Schüssikofski! ;~D")
if feeling in("schlecht", "nicht gut", "nicht so gut", "scheiße", "übel"):
print ("Schade. Naja, da kann man nichts machen.")
bye = input("Schüssikofski! Und Kopf hoch. ;~D")
als Funktion?? :K