Python3 / Geany / Debug ???
Verfasst: Freitag 6. Dezember 2013, 08:24
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 ausführen. Ich muss jedesmal 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
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
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 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 ...
)
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
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
Code: Alles auswählen
python3 zahl_erraten.py
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

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))

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 ...

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
