Drei Anfängerfragen

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.
Antworten
Lord Abstellhaken
User
Beiträge: 2
Registriert: Montag 12. November 2012, 19:51

Hallo, liebes Forum,

ich beschäftige mich seit Neustem nebenher mit Python, da ich mich schon immer in eine Programmiersprache einarbeiten wollte. Nun ist meine Wahl auf Python gefallen, da man, wie ich finde auch schon am Anfang zu sichtbaren Ergebnissen kommt.

Jetzt geht es aber um drei Dinge, die mir Kopfzerbrechen bereiten.

1. Ich nutze Python 3.3 und würde die Skripts gerne als Standalone für Mac konzipieren. Dummerweise geht es mit vielen Programmen nicht, da sie nicht mit Version 3.3 kompatibel sind. Gibt es da eine Alternative? Habe leider nichts befriedigendes in SuFu und Internet gefunden.

2. Bei Funktionen mit if ... or... or ... bzw. while ... or .... or... müsste es doch normalerweise so sein, dass nicht nur eine Bedingung gilt, sondern alle, die mit 'or' zusätzlich gekennzeichnet sind. Das funktioniert bei mir aber nicht! Ich kann nur die erste eingeben.

Einfaches Beispiel:
while input() == 'r' or input() == 'right':
print(Coordinates[1])
print('Right or left now?')

Aber es funktioniert nur das 'r'. Was mache ich also falsch, oder habe ich da was nicht verstanden?

3. Gibt es eine Möglichkeit, ein Programm auf "elegante" Art zu beenden? Also ohne exit, bzw. sys.exit() etc.? Weiterführend dazu, gibt es sozusagen einen Befehl, der bei einer bestimmten Bedingung das Skript augenblicklich stoppt? Ich hoffe das ist verständlich formuliert.

Danke schon mal, im voraus!
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

1. Ich verstehe die Frage nicht ganz: was genau ist inkompatibel?

2. ``input`` fragt jedes mal nach einer neuen Eingabe. Du willst so etwas:

Code: Alles auswählen

eingabe = input()
if eingabe == 'r' or eingabe=='right:
....
3. Im Prizip willst du nur das Skript zuende laufen lassen.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
BlackJack

@Lord Abstellhaken: 1. Verstehe ich nicht?

2. Nein, bei ``or`` müssen nicht alle Teilbedingungen gelten sonden nur eine. Wenn alle Bedingungen gelten müssen, dann verwendet man ``and``.

Dein Beispiel hat das Problem das `input()` wenn es ausgeführt wird den Nebeneffekt hat, dass der Benutzer nach einer Eingabe gefragt wird. Wenn Du es in jeder Teilbedingung verwendest, dann wird es auch für jede Teilbedingung erneut ausgeführt. Der Ausdruck wird von links nach rechts ausgewertet. Du wirst also erst nach einer Eingabe gefragt und wenn die nicht 'r' ist, dann wird die nächste Teilbedingung ausgewertet wo wieder ein `input()` ausgeführt wird und da kannst Du dann 'right' eingeben wenn Du in die Schleife möchtest. Das macht so aber wenig Sinn, denn Du möchtest ja sicher nicht zwei verschiedene Eingaben machen, sondern das Ergebnis *einer* Eingabe auf zwei verschiedene Bedingungen prüfen.

Das könnte man in diesem Fall mit dem ``in``-Operator machen:

Code: Alles auswählen

while input() in ['r', 'right']:
    print(coordinates[1])
Ob die nächste Zeile bei Dir noch zur Schleife gehört kann man ohne Einrückung nicht erkennen. Darum solltest Du Quelltext hier in Code-Tags setzen. Da ist über dem Textfeld für einen Beitrag so eine Schaltfläche wo „Python“ drauf steht.

3. `sys.exit()` ist die Funktion zum Verlassen eines Programms. Mehr oder weniger augenblicklich. Was ist daran unelegant? Man sollte es allerdings nur im Hauptprogramm tun, und nicht in Bibliotheken oder Funktionen die nicht zum Hauptprogramm gehören, weil man die dann nicht wirklich sinnvoll wiederverwenden oder auch nur testen kann. *Das* wäre dann nicht elegant. :-)
Lord Abstellhaken
User
Beiträge: 2
Registriert: Montag 12. November 2012, 19:51

Vielen Dank. Das hat mir schon sehr weitergeholfen! Ich hatte früher mal beim TES Construction Set für Morrowind viel mit Scripts gearbeitet. Da war das halt einfacher, weil sämtliche Funktionen vordefiniert waren und es gab das angenehme Global Script "doOnce" :D. Aber hier macht sich die Komplexität schon deutlicher bemerkbar ;)

Zu 1. Ich möchte einfach ein standalone Programm aus dem Skript machen, so dass man Python nicht mehr braucht. Also wie in Windows eine .exe bloß eben für Mac. Und da gab es ja "py2app" aber das funktioniert ab der Python Version 3.x nicht mehr...
BlackJack

@Lord Abstellhaken: Dann nimm halt Python 2.7.
Antworten