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

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