Python3 / Geany / Debug ???

Probleme bei der Installation?
Antworten
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Morgen Leute,

also ich bin nicht nur hier komplett neu, sondern watschele auch grade meine ersten Schritte in Python.

Mein System was ich jetzt neuerdings benutze ist Linux Mint (LMDE). Vorher immer nur Windows, seit kurzem RaspberryPi. Von da bin ich auch zu Python gekommen.

So. Ich habe mir über die Paketverwaltung von Mint geany plus sämtliche Plugins installiert.
Ich hab mir mal ein kleines Programm geschrieben. Es geht um eine Zufallszahll die man erraten muss. Das Programm läuft, jedenfalls über Ausführen (F5) in geany, einwandfrei.

Zwei Probleme hab ich jedoch. Und zwar kann ich das Programm nicht selber ausführen, sprich durch Doppelklick. Wieso weiß ich nicht. In den Dateieigenschaften habe ich es als ausführbar markiert. Auch im Terminal kann ich es im entsprechenden Verzeichnis nicht durch

Code: Alles auswählen

. /zahl_erraten.py
ausführen. Ich muss jedesmal

Code: Alles auswählen

python3 zahl_erraten.py
eintippen.
Die Shebang-Zeile ist drin.

Das zweite Problem ist, dass ich mit geany zwar ganz gut zurechtkomme, den Debug-Modus aber nicht starten kann.
Anfangs stand da "Konnte den GDB Prozess nicht starten". Daraufhin habe ich über sudo apt-get update && sudo apt-get install gdb das Paket runtergeladen. Jetzt kommt mal, dass er die Datei (welche, meine?) nicht starten kann, und manchmal den GDB-Prozess.


Was mach ich falsch? Geany plus GDB nochmal komplett raushauen und neu installieren? Oder ist das irgendwo eine Einstellungssache die ich nicht sehe??

Auch dass ich das Script nicht einfach per Doppelklick oder wenigstens per Terminal ohne die Angabe python3 ....py starten kann, macht mir irgendwie zu Denken...hmpf :K



Für alle die es interessiert, hier mal mein Code. Ist ein nettes kleines Spielchen, wer mag, kann es sich schwieriger machen, indem er die Anzahl der Versuche verringert (for i in range -> if i == x)
Als nächsten Schritt möchte ich das Programm so erweitern, dass man einerseits die Anzahl der Versuche nach jedem Spiel [loop zu main()] auf Wunsch verändern kann. Als nächstes will ich das Ganze dann Objektorientiert umschreiben, also eine Klasse erzeugen. Nicht weil es Sinn macht, sondern weil ich da wohl ohne ausreichend Übung einfach nicht weiterkomme :mrgreen:
Irgendwann will ich es dann in tkinter einbauen. Dazu kommen dann noch zwei, drei andere kleine Spielchen, die ich in der Art schon erstellt habe und joa, dann gibt's ne "Mega-Compilation der phänomenal-unglaublichen 5KB-Skripte" ...


Viele Grüße
BSA

Code: Alles auswählen

#!/usr/bin/python3
#!-*- coding: utf-8 -*-

import random, sys, time
from sys import exit
random.seed()


def intro():
	print("In diesem kleinen Ratespiel geht es darum, die gesuchte Zahl zu erraten.")
	print("Du hast dafür 7 Versuche.")
	print("Möglich sind alle ganzen Zahlen zwischen 1 und 100.")
	print("***************************************************************")
	print("***************************************************************")
	main()

def main():
	wp_1 = True
	while wp_1 == True:
		try:
			interact_1 = int(input(">> Drücke [enter] um fortzufahren. Mit [0] + [enter] beendest du das Programm."))
			if interact_1 == 0:
				raise SystemExit																							# sys.exit() überarbeiten
			else:
				continue
		except:
			wp_1 = False
			game()
			
def game():
    while True:
        starttime = time.time()
        count = 0
        x = random.randint(1,100)
        print("***************************************************************")
#        print("<<<TESTING>>> Die gesuchte Zahl lautet: ", x)#
        
        for i in range(1,9):
            count = count + 1
            if i == 8:
                print("-----------------------------------")
                print("Du hast es leider nicht geschafft.")
                print("Versuche es gleich noch einmal!")
                main()
                
                
            print("Versuch ", i)
            try:
                digit = int(input("Deine Zahl: "))
            except:
                print("Ungültige Eingabe. Wiederhole deine Eingabe...")
                continue

            if x > digit:
                print("Die gesuchte Zahl ist größer als {0}".format(digit))
            if x < digit:
                print("Die gesuchte Zahl ist kleiner als {0}".format(digit))
            if x == digit:
                endtime = time.time()
                time_used = endtime-starttime
                print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
                print("+      Herzlichen Glückwunsch! Die gesuchte Zahl war {0}.      +".format(digit))
                print("+      Benötigte Versuche: ", count, "                                +")
                print("+      Deine Zeit: {0:.2f} Sekunden oder ({0:.2f}/60) Minuten.    +".format(time_used))
                print("+      Ergebnis erzielt:", time.strftime("%d.%m.%Y %H:%M:%S                  +"))
                print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
                break

        break
    print()
    print()
    print("***************************************************************")
    print("***************************************************************")
    print("***************************************************************")
    main()


if __name__ == '__main__':
    intro()

BTW: Hat jemand ne Idee wie ich bei der Ausgabe der Zeitmessung am Ende die Zeit auch in Minuten anzeigen lassen kann? Als Platzhalter habe ich "(sek/60) Minuten" stehen, was ich auch mache, ich krieg das Ergebnis von

Code: Alles auswählen

... ({0:.2f}/60) Minuten.    +".format(time_used))
nicht in Minuten umgerechnet... :?:

Ach so, und das die Rahmenbegrenzungen am Ende wie Kraut und Rüben aussehen, war im Grunde doch schon ne recht harte Feinarbeit. *hust*
Ich weiß, dass es nicht elegant gelöst ist, es gibt mit Sicherheit Module die den Abstand zu allen Seiten bei jeder Ausgabe gleich einhalten, zumindest hab ich das irgendwo gelesen, aber wie gesagt, soweit bin ich noch nicht und solange die Sekunden-Zahl zweistellig ist, passt es - im Terminal zumindest - und wird grade ausgegeben
(Ausnahme 2: es war diesmal nicht die zweistellige Sekundenzahl sondern die Zahl x=100 ... :lol: )

Ach so, und noch was. Vielleicht kann mir da ja auch gleich noch wer weiterhelfen? Und zwar kriege ich das mit dem SystemExit nicht hin. Ich habe alles probiert -> sys.exit() -> sys.exit(0) -> sys.exit(1) - und aktuell wie man sieht auch raise SystemExit.
Es funktioniert einfach nicht. Die Ausnahmebehandlung führt schonmal dazu, dass jede Zahl außer der 0 zur exception-Anweisung führt...die 0 selber jedoch führt zum genauen Gegenteil - das Programm geht in main() über und Versuch 1 startet :K :mrgreen:
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

@BSA: Wenn Du »./zahl_erraten.py« eingibst, kann ja nicht einfach nichts passieren, da muß es eine Fehlermeldung geben.

Zum Programm: Du hast noch viel Arbeit vor Dir. Versuch zuerst einmal etwas Struktur reinzubringen: Statt »intro« solltest Du »main« aufrufen, das ist so Konvention. Innerhalb von »main« kannst Du dann »intro« und die Schleife mit den »game«-Aufrufen schreiben. »main«, »intro« und »game« sollten dabei im ganzen Programm jeweils nur an einer einzigen Stelle aufgerufen werden! Du hast einige seltsame rekursive Aufrufe von »main«, die für Dauerspieler zu Problemen führen.
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Also erstmal Danke für die Tipps! Ich hab die gleich mal umgesetzt, musste zwar einmal komplett umdenken aber ich hoffe mal, dass das nun so in Ordnung geht. Wenn nicht, ruhig bescheid geben, damit ich weiß wo ich noch dran arbeiten muss!

Aber erstmal zu der Sache mit dem Ausführen.
Wenn ich im Terminal im Verzeichnis bin wo auch die Datei liegt, und >./zahl_erraten.py< eingebe kommt: keine Berechtigung.
Wenn ich dann den sudo-Befehl davor setze kommt sudo: ./zahl_erraten.py: command not found


Den Code hab ich mal schnell überarbeitet. Ob er nun so durchgeht weiß ich nicht, aber das Programm beginnt mit dem Aufruf von "main", "intro" ist ganz rausgeflogen und die beiden vorhandenen Funktionen "main" und "game" kommen jetzt im code jeweils nur einmal vor. Ich hab das über eine weitere Schleife realisiert. Ob das richtig war, weiß ich nicht.
Wenn Dir noch etwas auffällt, ruhig her damit! :-)

zahl_erraten.py

Code: Alles auswählen

#!/usr/bin/python3
#!-*- coding: utf-8 -*-
# überarbeitet am 06.12.2013 | 09:30 Uhr

# Module
import random, sys, time
from sys import exit
random.seed()

# Main-Funktion
def main():
	print("In diesem kleinen Ratespiel geht es darum, die gesuchte Zahl zu erraten.")
	print("Du hast dafür 7 Versuche.")
	print("Möglich sind alle ganzen Zahlen zwischen 1 und 100.")
	print("***************************************************************")
	print("***************************************************************")
	game()

# Hauptspiel, mit eingebettetem intro			
def game():
	
	wp_1 = True
	game = True

	while True:
		
		while wp_1 == True:
			try:
				interact_1 = int(input(">> Drücke [enter] um fortzufahren. Mit [0] + [enter] beendest du das Programm."))
				if interact_1 == 0:
					raise SystemExit																							# sys.exit() überarbeiten
				else:
					continue
			except:
				wp_1 = False
				game = True
				
		
			while game == True:
				starttime = time.time()
				count = 0
				x = random.randint(1,100)
				print("***************************************************************")
				print("<<<TESTING>>> Die gesuchte Zahl lautet: ", x)
        
				for i in range(1,9):
					count = count + 1
					if i == 8:
						print("-----------------------------------")
						print("Du hast es leider nicht geschafft.")
						print("Versuche es gleich noch einmal!")
						wp_1 = True
						break
                
                
					print("Versuch ", i)
					try:
						digit = int(input("Deine Zahl: "))
					except:
						print("Ungültige Eingabe. Wiederhole deine Eingabe...")
						continue

					if x > digit:
						print("Die gesuchte Zahl ist größer als {0}".format(digit))
					if x < digit:
						print("Die gesuchte Zahl ist kleiner als {0}".format(digit))
					if x == digit:
						endtime = time.time()
						time_used = endtime-starttime
						print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
						print("+      Herzlichen Glückwunsch! Die gesuchte Zahl war {0}.      +".format(digit))
						print("+      Benötigte Versuche: ", count, "                                +")
						print("+      Deine Zeit: {0:.2f} Sekunden oder ({0:.2f}/60) Minuten.    +".format(time_used))
						print("+      Ergebnis erzielt:", time.strftime("%d.%m.%Y %H:%M:%S                  +"))
						print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
						wp_1 = True
						break
					
				game = False
				break
				
				print()
				print()
				print("***************************************************************")
				print("***************************************************************")
				print("***************************************************************")
				break


if __name__ == '__main__':
    main()



edit: Ich habe jetzt mal folgendes ausprobiert:

Code: Alles auswählen

chmod u+x zahl_erraten.py
- das hat die Datei wohl tatsächlich ausführbar gemacht! Sie wird jedenfalls im Terminal grün angezeigt. Dennoch erhalte ich folgende Fehlermeldung:
bash: ./zahl_erraten.py: /usr/bin/python3.3^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden

Ich denke, ich hab da wohl etwas zuviel durcheinander installiert. Unter /usr/bin habe ich
python | python2 | python2.6 | python2.7 | python3 | python 3.2 | python 3.2mu | python 3.3 | python3.3m | python3m + noch einige andere python-Sachen, die mir aber auch noch nichts sagen.
Ich werd python wohl mal komplett purgen und 2.7 und 3.3 neu-installieren. Mal schauen ob das hilft.
Zuletzt geändert von Anonymous am Freitag 6. Dezember 2013, 09:45, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

@BSA: Du siehst das ^M hinter python3? Das ist der Zeilenumbruch von Windows. Du mußt also im Editor Deiner Wahl den Zeilenumbruch auf UNIX-Konvention umstellen.
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

? Versteh ich nicht. Ich hab zwar ein Dual-Boot aber was hat Windows in meinem Linux zu suchen ??
Oder steh ich grad aufm Schlauch.. ?

Ich hab mir Nano nachinstalliert, funktioniert aber nur im Terminal. VIm hab ich auch, kann aber noch nicht mit umgehen.

Wie oder wo stell ich denn den Zeilemumbruch auf UNIX um und wieso ist das überhaupt verstellt?

Danke für Deine Hilfe! :K



Edit:
Habs gesehen. Hab die Datei mal mit nano aufgemacht, da steht dann DOS-Format. Ich schau mal wie ich das am besten gradebieg.
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
BlackJack

@BSA: In die Kommentarzeile für die Kodierungsangabe gehört eigentlich kein '!' nach dem '#'. Streng genommen ist das nicht falsch, aber ziemlich ungewöhnlich. Bei Python 3 geht der Compiler ohne diese Zeile übrigens sowieso von UTF-8 als Kodierung aus, so dass man diese Zeile nur braucht wenn man etwas anderes verwendet. Was man IMHO eher vermeiden sollte.

Kommentare sollten dem Leser einen Mehrwert zum Quelltext geben, also nicht offensichtliches enthalten was man in der/den Zeile(n) darunter nicht nochmal sieht. Also zum Beispiel ``# Module`` vor den ``import``-Anweisungen oder ``# Main-Funktion`` vor der definition der Hauptfunktion mit ``def main():``. Am besten versucht man sich bei Kommentaren darauf zu beschränken zu erklären *warum* etwas gemacht wird, und warum es so gemacht wird wie es gemacht wird. Denn das *was* gemacht wird, steht ja schon als Quelltext da. Der sollte nicht so kompliziert werden, dass man das „was” erklären muss. Dann sollte man eher überlegen wie man den Quelltext verständlicher schreibt bevor man ihn in einem Kommentar erklärt.

Schlimmer als überflüssige Kommentare sind falsche Kommentare. So ein Kommentar soll ja eigesetzt werden um dem Leser den Sinn vom Code zu erklären. Wenn der Kommentar nun nicht zu dem passt was im Quelltext tatsächlich passiert, weiss der Leser nicht ob nun der Kommentar oder der Quelltext falsch ist. Wenn so etwas öfter vorkommt, weiss der Leser nicht mehr ob er den Kommentaren generell noch vertrauen kann, und damit werden sie insgesamt wertlos(er). Die `game()`-Funktion enthält im Widerspruch zum Kommentar gar kein Intro (mehr).

Der ``random.seed()``-Aufruf ist überflüssig.

Weder das `sys`-Modul noch die noch einmal explizit importiertierte `exit()`-Funktion werden verwendet. Der Style Guide for Python Code empfiehlt ausserdem nicht mehrere Module mit einem ``import`` zu importieren.

Der Quelltext ist zu tief eingerückt. Konvention sind vier Leerzeichen pro Ebene (keine Tabulator-Zeichen). Auch mit nur vier Leerzeichen sind einige Zeilen ziemlich lang. Der Style-Guide ist da in der letzten Überarbeitung etwas entspannter geworden, aber ich bin immer noch für maximal 80 Zeichen pro Zeile. :-)

Falls Dir das zu „kosmetisch” erscheint: Die Zeilen werden zu lang weil der Quelltext zu oft eingerückt ist. Du hast für eine Funktion zu viele Verschachtelungsebenen und damit zu viel Komplexität.

Namen sollen dem Leser verraten wofür der Wert dahinter im Zusammenhang mit dem Programm steht. Deshalb sollte man klare Namen verwenden. Keine unbekannten Abkürzungen. Durchnummerieren sollte man Namen auch nicht, insbesondere keine sinnfreien Nummern anhängen wie bei `wp_1` und `interact_1`. Ich habe jetzt eine ganze Weile nachgedacht was `wp_1` aussagen soll. Ich weiss wozu der Wert davon im Programm verwendet wird, aber nicht warum das so heisst wie es heisst.

Wozu soll die äusserste ``while``-Schleife gut sein? Warum hast Du die hinzugefügt? Was würde für den Benutzer anders ablaufen wenn sie nicht vorhanden wäre?

Wahrheitswerte mit ``==`` und einem weiteren literalen Wahrheitswert zu vergleichen macht in aller Regel keinen Sinn. Da kommt nur wieder ein Wahrheitswert heraus. Es gibt eigentlich nur zwei Fälle: Entweder man will den ursprünglichen Wahrheitswert *direkt* verwenden, denn bei ``a_bool == True`` kommt sowieso nur wieder der Wert von `a_bool` heraus, oder man möchte den gegenteiligen Wahrheitswert haben: dafür gibt es ``not``. Also statt ``if a_bool == True:`` schreibt man ``if a_bool:`` und statt ``if a_bool == False:`` schreibt man ``if not a_bool:``.

In der zweiten ``while``-Schleife wird dann am Anfang Dein `exit()`-Problem deutlich. Die Funktion macht fast das gleiche was Du jetzt direkt selber machst: Eine Ausnahme auslösen. Und ein nacktes ``except:`` ohne konkrete Ausnahmen anzugeben behandelt *jede* Ausnahme, also auch `SystemExit`. Du verhinderst an der Stelle selber den Programmabbruch in dem Du an der Stelle `SystemExit` abfängst und in Deinem Code weiter machst. Du solltest immer nur Ausnahmen mit ``except`` behandeln die Du auch erwartest und die Du *sinnvoll* behandeln kannst und nicht einfach *alle*.

An der Stelle könnte man die gesamte Funktion aber auch einfach mit einer ``return``-Anweisung verlassen. `sys.exit()` sollte man sowieso nicht ohne sehr gute Gründe in beliebigen Funktionen verwenden. Das beendet das gesamte Programm an der Stelle. Ohne Rücksicht darauf ob der Aufrufer der Funktion das überhaupt möchte, oder danach nicht vielleicht noch gerne etwas getan hätte.

``continue`` sollte man auch nur sehr sparsam einsetzen. Das erschwert es unheimlich den Kontrollfluss nachzuvollziehen weil man sowie ein ``continue`` vohanden ist, einen unbedingten Sprung an den Schleifenanfang im Code hat, der die sonst übliche baumartige Verzweigungsstruktur durchbricht.

Mit ``break`` gehst Du auch zu freigiebig um. Das lässt sich zwar nicht so oft vermeiden wie ``continue``, aber man sollte es schon versuchen. Wenn man Code mit ``break`` ohne ``break`` ausdrücken kann ohne das er dadurch komplexer wird, sollte man darüber nachdenken. Dass Du ``break`` nicht so wirklich im Griff hast sieht man am Code ab Zeile 81. Wann wird der denn Deiner Meinung nach ausgeführt?

Das die `game()`-Funktion zu komplex ist habe ich ja schon weiter oben geschrieben. Nur weil Du so viele Sachen dort vermengst und Schleifen verschachtelst brauchst Du überhaupt erst diese beiden Wahrheitswerte um über den Gesamtzustand von diesem kleinen Monster Buch zu führen. Es würde durch die sinnvolle Aufteilung auf Funktionen also nicht nur der vorhandene Quelltext in verständlichere Häppchen zerlegt, sondern die würden teilweise dadurch auch nicht einfacher werden.

Schau Dir in der inneren Spielschleife mal die Werte von `i` und von `count` an und erkläre was die jeweils bedeuten und warum Du die beiden brauchst. ;-)
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Okay. Das war jetzt eine ganze Menge Stoff. Ich sehe die Probleme und Fehler die Du meinst, und auch dass der Code im Grunde komplett gegen die Python-Regeln oder Empfehlungen verstößt.
Ich werde mich noch eingehender mit meinem Code beschäftigen und ihn wohl von vorne neu aufarbeiten müssen. Das mach ich gerne, denn lieber ist es mir, es von vornherein richtig zu machen als dass ich mir falsche Sachen erst so richtig angewöhne.

Die Codierungs-Zeile nehme ich raus.
Die Kommentare werde ich komplett überarbeiten bzw. bei so einem Programm gleich weglassen. Evtl. werde ich sie für mich selber zur Übung eintragen.
Den "random.seed()"-Aufruf werde ich auch rausnehmen. Die Module werden einzeln aufgerufen, sys werde ich erstmal komplett auslassen (s.weiter unten).

Die Verschachtelung des gesamten Codes wird überarbeitet, mind. eine while-Schleife muss wegfallen. Der Code muss insgesamt schlanker und viel einfacher werden.
"wp_1" ist noch ein Überbleibsel aus einer älteren Version. Da gab es "wp_2" (wartepunkt_2) noch, den hab ich jedoch rausgenommen weil er unnötig war. (zu der Zeit gab es noch mehr print-Ausgaben, die der Anwender, hier ich, sonst nicht hätte verfolgen können oder es hätten ständig time.sleep()-Anweisungen erfolgen müssen...chaos pur, ich weiß :lol: )

"interact_1" habe ich in weiser Voraussicht eingeführt, da ich später noch eine mind. eine weitere Abfrage bzw. Anwender-Interaktion einführen möchte, in der die Anzahl der möglichen Versuche geändert werden kann. Wird aber erstmal passend zum aktuellen überarbeitet.
Die Einrückung hat geany gemacht, ich stimme Dir aber voll und ganz zu, dass mir der Code irgendwie auch zu wuselig ist... wird also auch überarbeitet.
Und zu kosmetisch erscheint mir das mit Sicherheit nicht - sogar eher im Gegenteil: ich bin froh, dass man hier auch als totaler Anfänger ein vernünftiges Feedback bekommt ;-)

Die äußere while-Schleife habe ich eingeführt, um einen zweiten Aufurf der Funktion "game()" nach ihrem Durchlauf zu umgehen und so über einen break der inneren Schleife(n) wieder zum Anfang ("Bestätige mit Enter oder drücke die 0" ... ) zurückkommen zu können.
Das Problem war, dass das Programm nach einmaligem Durchlauf nämlich stehen geblieben ist. Das liegt aber wahrscheinlich, wie Du ja sagst, am exzessiven Gebrauch der cotinue-/ break-Schleifen.
Und diese beiden Sachen werden wohl der haarigste Teil von allen denke ich - sollte aber wohl auch nicht unlösbar sein (falls es sowas überhaupt gibt...)

Ja. Also jetzt wo Du es so darlegst, wird mir natürlich auch etwas klarer, warum der "SystemExit" nie hätte funktionieren können... :oops: Auch da gibt es Nachbesserungsbedarf! (natürlich, hatte ja sowieso nicht funktioniert...)
Ich werde dann auch versuchen, einen eleganteren Weg zu wählen. Da heißt's dann wohl viel rumprobieren. Und so soll es dann auch sein. Ich weiß jedoch schonmal definitiv, dass ich dafür eine eigene Funktion für ein "sanftes Programmende" schreiben werde (einen sanften Programmabsturz gibt es ja wahrscheinlich nicht...[ironie=0])

Das mit der Baumartigkeit habe ich zwar nicht verstanden, aber ich gehe mal von aus, dass das wahrscheinlich irgendwie mit der Zeit kommt... :lol:

Zum break ab Zeile 81: Kein Kommentar. :mrgreen:

Ich denke grade, wenn ich im Hauptprogramm (if __name__ == '__main__':) mit einer while-Schleife arbeiten würde, wäre der restliche Code um einiges entlastet. Ich werds also ausprobieren.
Das Problem was ich noch sehe, ist, dass wenn ich jede Funktion im Optimalfall nur einmal aufrufen soll...wobei, nee! Eine while-Schleife im Hauptprogramm (if name = main) könnte das Problem evtl lösen, wenn der Code der einzelnen Funktionen wirklich schlank gehalten würde und nicht überall mit den boolschen Werten um sich geschmissen würde...hm, ich würd mich am liebsten jetzt gleich dransetzen, muss aber gleich raus, schade eigentlich.

Ja, das war mir auch aufgefallen als ich count erstellt hatte, i ist de facto count bzw. gibt den gleichen Wert aus. Hab es dann aber nicht weiter verfolgt...wieso eigentlich nicht ? :K
Wahrscheinlich weil's so komplexer war :mrgreen:


Nee gut, Danke für Dein bzw. euer Feedback - ich werd mich mal drum kümmern. Vielleicht heute noch, hängt davon ab wie sich der restliche Tag entwickelt. Jetzt muss ich leider erstmal gleich raus.


BTW:
Ich habe über geany die Zeilenumbrüche auf UNIX gesetzt, dafür hab ich jetzt (chronologisch aufgelistet) diese Ausgaben bekommen :lol:

[Unicode auf UTF-8 gesetzt - mit geany]

Code: Alles auswählen

: Datei oder Verzeichnis nicht gefundenpython3.3
./zahl_erraten.py: Zeile 3: $'\r': Kommando nicht gefunden.
import.im6: unable to grab mouse `': Die Ressource ist zur Zeit nicht verfügbar @ error/xwindow.c/XSelectWindow/9047.
from: can't read /var/mail/sys
./zahl_erraten.py: Zeile 6: Syntaxfehler beim unerwarteten Wort `$'\r''
'/zahl_erraten.py: Zeile 6: `random.seed()
________________________________________

[Zeilenende auf UNIX gesetzt - mit geany]

Code: Alles auswählen

./zahl_erraten.py: Zeile 1: #!/usr/bin/python3: Datei oder Verzeichnis nicht gefunden
from: can't read /var/mail/sys
./zahl_erraten.py: Zeile 9: Syntaxfehler beim unerwarteten Wort `def'
./zahl_erraten.py: Zeile 9: `def main():'
________________________________________

[Shebang-Zeile von ..python3.3 auf python3 geändert]

Code: Alles auswählen

./zahl_erraten.py: Zeile 1: #!/usr/bin/python3: Datei oder Verzeichnis nicht gefunden

Es geht aber voran, wenn auch nur Schritt für Schritt, so doch wenigstens immerhin :lol:
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nutz am besten `#!/usr/bin/env python3`` als Shebang, dann wird der Ort wo dein Python 3 ist automatisch gesucht und sofern installiert auch gefunden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Habe ich, folgender Fehler wird ausgegeben:

Code: Alles auswählen

... Python/Scripts $ ./zahl_erraten.py
./zahl_erraten.py: Zeile 1: #!/usr/bin/env: Datei oder Verzeichnis nicht gefunden
Sieht (mir) so aus, als ob mein LMDE weder /env noch /python3 findet - beides sollte aber definitiv installiert sein.

Auch wenn ich #!/usr/bin/python3 in der Shebang-Zeile angebe, kommt die gleiche Meldung nur statt .../env eben .../python3... ??

Laut "aptitude show python3" ist aber alles installiert. Habe python3 auch gepurged und wieder installiert - keine Besserung.


Was mach ich falsch?
Habt ihr eine Idee, was ich noch machen könnte?
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mach mal in der Konsole ein ``ls -l /usr/bin/env`` um zu schauen ob und wie das da in dem Ordner existiert oder nicht existieren tut.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Code: Alles auswählen

~ $ ls -l /usr/bin/env
-rwxr-xr-x 1 root root 27144 Jul 20 23:52 /usr/bin/env

~ $ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 Aug 13 07:10 /usr/bin/python -> python2.7

~ $ ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 9 Aug  5 09:24 /usr/bin/python3 -> python3.3
Python3.3 läuft auch. Ich bin mir sicher, dass /env im Endeffekt auch läuft. Nur versteh ich es nicht. Wäre das Windoof, würd ich auf die Registry wetten oder irgendeine Verknüpfung, aber linux ist noch Neuland für mich.

Ich frag parallel mal noch im mint-Forum.
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
BSA
User
Beiträge: 38
Registriert: Freitag 6. Dezember 2013, 07:49

Der Vollständigkeit halber vielleicht kurz: Das Problem ist gelöst. Lag wahrscheinlich an irgendeiner Einstellung in geany.
Ich kann jetzt ganz normal python-Scripts im Terminal wie auch über die GUI von LMDE ausführen.
Oftmals beschleicht mich hier im Forum das heimliche Gefühl, an verschiedenen Stellen mal ein einfaches "Bahnhof" zu posten.

Wann du den Fisch auch fängst, er ist frisch. Sprichwort
Antworten