ubuntuusers.de

Fragen zu Python

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

gkuhl

Avatar von gkuhl

Anmeldungsdatum:
1. Dezember 2007

Beiträge: 99

Wohnort: Hong Kong

Solange du nicht erzählst was du vor hast, ist es eigentlich unmöglich dir zu helfen. Poste doch bitte deine komplette Problemstellung mit eventuell schon vorhandenem Code.

phst

Anmeldungsdatum:
24. Juni 2007

Beiträge: 527

BodomBeachTerror schrieb:

Es geht ja nicht darum sie anzuzeigen, ich will sie ja eigentlich analysieren können. Also will ich durch die Zeilen durch gehen während sie in der Liste sind und ich dachte das geht ja wohl am einfachsten, wenn ich das einfach mit einer Variable machen.

Ja, wie auch sonst? Nochmal: Du brauchst keine Indexvariable! Falls du eine Zeilennummer oder Ähnliches benutzen willst, nimm enumerate, wie vorgeschlagen. Wenn du nur über die Zeilen iterieren willst, brauchst du sie auch nicht in eine Liste einzulesen. Das ist nur nötig, wenn du wahlfreien Zugriff auf die Zeilen benötigst.

Ja ich schau mir noch ein paar an, aber alle die ich schon durch habe gehen nicht auf mein Problem ein

Ja, die sind auch dafür da, dir Grundlagenwissen zu vermitteln, damit du jedes Problem selbst lösen kannst. Du klebst noch zu stark an C. Das ist kein Problem – die meisten kommen nicht sofort von ihrer alten Sprache los – aber du solltest es wissen und versuchen gegenzusteuern. Du kannst in Python vermutlich 5 bis 20 Mal produktiver arbeiten als in C, aber nur, wenn du das meiste aus C nicht weiterführst. Versuche deine C-Kenntnisse für Python zu vergessen, auch wenn es schwerfällt.

Fredo Team-Icon

Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

BodomBeachTerror schrieb:

Hier mal der ganze Code:

1
2
3
4
5
6
7
8
9
#!/usr/bin/python

f = open('datei')
text = []
for line in f:
	text.append(line)
i = 0
for i in f:
	print text[i]

So das funktioniert aber nicht. Es liegt an dem 2ten "f". Ich hoffe ihr versteht was ich erreichen möchte und könnt mir helfen 🙄

Zum Einen, und wie hier schon öfters erwähnt, eigentlich ist es in diesem Beispiel ziemlich sinnlos, die Zeilen erst in eine Liste einzulesen und dann über diese Liste zu iterieren. Dann kannst Du auch gleich über die Zeilen der Datei iterieren. Genau das, was gkuhl geschrieben hat:

gkuhl schrieb:

1
2
3
f = open('datei')
for line in f:
    print line

Wenn Du aus irgend einem Grund wirklich die Zeilen in einer Liste brauchst, dann könntest Du genau das, was Du oben versuchst, so erreichen:

1
2
3
4
5
6
#!/usr/bin/python

f = open('datei')
text = f.readlines()
for line in text:
    print line

Wie Du siehst, zig mal kürzer als Dein Versuch. Vor allem solltest Du ganz dringend versuchen, von der C-Version einer Schleife wegzukommen. Viele, die von Sprachen mit C-ähnlicher Syntax kommen, suchen etwas wie

1
2
3
for(i=0;i<length(my_array);i++){
    print my_array[i];
}

Das ist in Python aber gar nicht nötig. Die for-Schleife in Python ist eher vergleichbar mit for-each in anderen Sprachen:

1
2
for element in liste:
    print element

In 99% der Fälle braucht man auch gar nichts anderes. Und falls doch, behilft man sich mit xrange, enumerate oder zip.

Liebe Grüße
Fredo

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Ok danke ich werde jetzt einfach etwas herumprobieren und versuchen von C weg zukommen (jedenfalls wenn ich python coden will) 😀

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

Und bitte lies doch mal die ganzen Beiträge hier. Du sollst das Tutorial aus der Dokumentation durcharbeiten. Da wird der Umgang mit Listen erklärt.

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Ok hätte jetzt doch noch eine Frage, und zwar wie kann man die Zeichen einer Datei einzeln einlesen?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

Zeichen oder Bytes? Wenn Zeichen, dann würde ich zeilenweise einlesen und über die Zeile iterieren, bei Bytes blockweise einlesen und dann über die einzelnen "Zeichen"/Bytes itertieren. Das könnte man dann auch in eine Generator-Funktion verpacken, damit man am Ende doch eine Schleife über alle Zeichen/Bytes schreiben kann.

busfahrer

Avatar von busfahrer

Anmeldungsdatum:
9. April 2007

Beiträge: 3052

Hallo

hoffe ich verstehe dich richtig

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
inhalt = "abcde"
erstes = inhalt[0]
print erstes
'a'
letztes = inhalt[-1]
print letztes
'e'
die_ersten_drei = inhalt[0:3]
print die_ersten_drei
'abc'

Gruß busfahrer

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Ok danke dann mach ichs so 😉

Antworten |