Pythonchallenge Level3

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

Mir geht's ähnlich. Ich weiss, dass ich damals Notizen gemacht habe, aber auf welchem Rechner oder Backup-Medium die nun abgeblieben sind… :-)

Edit:
@SchneiderWeisse: In dem Bild ist etwas das nach Daten aussieht. Die kann man lesen wenn man herausfindet wie die Informationen zu deuten sind. Die `Python Imaging Library` (PIL) könnte hier nützlich sein.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Ja, PIL hilft!
Und wo wir grad dabei sind, weiß einer was bei Level 12 zu tun ist? Hab zwar ein paar Unterseiten gefunden, aber bin trotzdem nicht weiter gekommen. Ist auch schon wieder etwas her...Irgendwann machts nämlich keinen Spaß mehr. :(
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Ich hänge gerade an Level 7, its in the air. look at the letters.
Das ist noch nicht Level 7, sondern das Ende von Level 6.
Die "letters" beziehen sich auf den Namen der HTML-Datei, die dir den Text ausgespuckt hat, den du oben zitiert hast - das war ja als "Lösungswort" bei Level 6 herausgekommen. Du musst ein bisschen mit den Buchstaben spielen, dann kommt was raus, was ungefähr so klingt wie das, wonach gesucht ist ...
BlackJack hat geschrieben:In dem Bild ist etwas das nach Daten aussieht. Die kann man lesen wenn man herausfindet wie die Informationen zu deuten sind. Die `Python Imaging Library` (PIL) könnte hier nützlich sein.
Soweit ist er noch nicht. Das Bild sieht er erst, wenn er das Rätsel oben gelöst hat. Dann braucht er die PIL.
BlackJack

Hm tja ist schon lange her. Ich hatte hier halt noch ein Bild auf der Platte liegen und da steht oben links die Levelnummer 7, darum dachte ich das wäre schon gemeint. :-)
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Ah, das war ja kagge...

In diesen großen Buchstaben vom letzten Ergebnis waren die neuen auch schon wieder drin...

Danke!

Hat jemand eine Ahnung warum das hier in der IDLE funktioniert, aber in der normalen Kommandozeile nicht?

Code: Alles auswählen

import zipfile
import re
stri = ""
zahl = "90052"
zip_datei = zipfile.ZipFile("C:\Data\Pythonchallenge\channel.zip")
datei_anzahl = len(zip_datei.namelist()) - 1 							#minus Readme.txt
print datei_anzahl
for one in range(datei_anzahl):
	code = zip_datei.read("%s.txt" %zahl) 								#Dateiinhalt
	stri += zip_datei.getinfo("%s.txt" %zahl).comment 					#Banner
	a = re.compile(r"([0-9]+)") 										#nächste Datei
	results = re.findall(a,code)										#nächste Datei
	for two in results:
		zahl = two
	print zahl

print stri
ende = raw_input()
//Und über Verbesserungsvorschläge bin ich natürlich froh...^^

@BlackJack und Leonidas: Wenn euch das was hilft, kann ich euch die Lösung von Level 0 bis Level 7 schicken, habe alles mitdokumentiert.
BlackJack

``zahl = results[-1]`` um auf den letzten Match zuzugreifen ist vielleicht etwas direkter und eleganter als die Schleife in den Zeilen 13-14.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

schlangenbeschwörer hat geschrieben:Ja, PIL hilft!
Und wo wir grad dabei sind, weiß einer was bei Level 12 zu tun ist?
Ja.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Code: Alles auswählen

import zipfile
import re
stri = ""
zahl = "90052"
zip_datei = zipfile.ZipFile("C:\Data\Pythonchallenge\channel.zip")
datei_anzahl = len(zip_datei.namelist()) - 1 							#minus Readme.txt
print datei_anzahl
for one in range(datei_anzahl):
	code = zip_datei.read("%s.txt" %zahl) 								#Dateiinhalt
	stri += zip_datei.getinfo("%s.txt" %zahl).comment 					#Banner
	a = re.compile(r"([0-9]+)") 										#nächste Datei
	results = re.findall(a,code)										#nächste Datei
	for two in results:
		zahl = two
	print zahl

print stri
ende = raw_input()
In diesem Fall ist for two in results: zahl = two aber besser, da bei der letzten Zahl kein Inhalt mehr da ist und somit nicht mehr per -1 darauf zugegriffen werden kann-...

Mich würde viel mehr interessieren warum das Programm hier in der IDLE funktioniert, aber nicht in der Windows Eingabeaufforderung...

Jemand eine Idee?

Danke!
BlackJack

Na dann prüft man halt ob es Treffer gab, oder nicht bevor man drauf zu greift, oder benutzt den `IndexError` gleich als Abbruch für die Schleife.

Was heisst "nicht funktionieren" denn genau? Explodiert der Rechner?
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Ich mach einen doppelklick, die Eingabeaufforderung öffnet sich und schließt sich auch gleich wieder...
BlackJack

Dann lass doch erstmal den Doppelklick weg und starte es direkt in der Eingabeaufforderung.

Mit dem `IndexError` als "Abbruchbedingung":

Code: Alles auswählen

import re
import sys
import zipfile


archive = zipfile.ZipFile('channel.zip')
try:
    number = '90052'
    while True:
        filename = number + '.txt'
        sys.stdout.write(archive.getinfo(filename).comment)
        number = re.findall('([0-9]+)', archive.read(filename))[-1]
except IndexError:
    pass
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

SchneiderWeisse hat geschrieben:Ich mach einen doppelklick, die Eingabeaufforderung öffnet sich und schließt sich auch gleich wieder...
Die Lösung steht seit Jahren in unseren FAQ.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Code: Alles auswählen

  File "level6.py", line 11
SyntaxError: Non-ASCII character '\xe4' in file level6.py on line 11, but
oding declared; see http://www.python.org/peps/pep-0263.html for details
Was mir nicht besonders viel sagt...

Was ist hier das Problem?

Vielen Dank!
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

also ich bedanke mich recht herzlich für die Hilfe!!!

Besonders das letzte Beispiel von BlackJack hat mir sehr weitergeholfen und mir einen Einblick gegeben, wie man klarer und kürzer programmieren kann.

Vielen Dank!

Code: Alles auswählen

import zipfile
import re
import sys

zip_datei = zipfile.ZipFile("C:\Data\Pythonchallenge\channel.zip")
try:
	zahl = "90052"
	while True:
		file_name = zahl + ".txt"
		sys.stdout.write(zip_datei.getinfo(file_name).comment)
		zahl = re.findall(r"([0-9]+)",zip_datei.read(file_name))[-1]
except IndexError:
	pass
ende = raw_input()
So funktioniert es, nur verstehe ich nicht warum er mir bei der anderen Version diese Fehlermeldung ausgibt...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

SchneiderWeisse hat geschrieben:Was mir nicht besonders viel sagt...

Was ist hier das Problem?
Du musst das Encoding angeben, also etwa ``# -*- coding: utf-8 -*-`` oben im Skript.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

ah ok!

Vielen Dank!
Antworten