Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności:
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Słowa zaczynające się na daną literę  (Przeczytany 60 razy)
« : 00:22 13/02/18 »
MaxRebo Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 5


Witam. Stawiam pierwsze kroki w programowaniu w Pythonie. Uczę się od kilku miesięcy. W ramach przygotowania do kolokwium, postanowiłem napis program o poniższej treści. Niestety, zamiast wypisywać słowa zaczynające się na literę z, program wypisuje same litery "z". Proszę o pomoc w poprawieniu kodu.

Kod
# Napisz program, ktory wypisuje z linii o parzystych numerach te slowa, które zaczynaja sie na litere "z".
 
nazwa = input("Podaj nazwe pliku:")
f = open(nazwa,"r")
file_content = f.read()
linia = 0
for line in file_content:
   linia += 1          #kazdej linnii przypisuje liczbe
   if linia % 2 == 0:   #Gdy ta liczba dzieli sie przez 2
       wordlist = line.split()     #tworze liste slow tej linii
           for word in wordlist:       #iteruje po slowach
               if word[0] == 'z':
                   print(word)

Za wszelką pomoc i objaśnienie będę bardzo wdzięczny.

MaxRebo
Zapisane
« Odpowiedz #1 : 06:29 13/02/18 »
zuo Offline
Professional Python User

Zobacz profil
***

Reputacja: 126
Wiadomości: 412


Jak Twój program działa:

file_content jest napisem (stringiem). Gdy iterujesz po jego elementach za pomocą pętli for line in file_content, iterujesz po pojedynczych znakach (ściślej: napisach o długości 1), czyli zmiennej line zawsze przypisywany jest pojedynczy znak (napis o długości 1).

Jak chciałbyś, żeby działał:

file_content powinien być czymś, czego elementy będą liniami (napisami, z który każdy zawierać będzie zawartość jednej linii z odczytanego pliku), a nie pojedynczymi znakami (napisami o długości 1). Istnieje kilka rozwiązań... Np. tym czymś, po elementach czego będziesz iterować, może być obiekt reprezentujący otwarty plik tekstowy (czyli to, co zwróciła funkcja open).

Mam nadzieję, że ta podpowiedź wyjaśni Ci, co potrzebujesz zmienić w Twoim programie.

PS. Przy okazji: dobrą praktyką jest jawne zamykanie pliku po tym, gdy jego zawartość została odczytana -- przy czym powinno się to zrobić tak, żeby zamknięcie pliku nastąpiło również wtedy, gdy program (lub dany jego fragment) się wysypie (tzn. gdy rzucony zostanie wyjątek). Taką gwarancję zamknięcia pliku, gdy już nie jest potrzebny, najprościej uzyskać za pomocą instrukcji with -- patrz: https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files
Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2018 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot