Zadanie z tablicami - błąd kodu

0

Zadanie z książki Python.Head First polega na wypisaniu liczby wystąpień samogłosek w podanym przez użytkownika słowie. Należy przy tym korzystać wyłącznie z tablic.
Chciałem wykorzystać funkcje len(), do zliczania samogłosek w łańcuchu znakowym, otrzymanym z przekształcenia tablic. Brzydki jak noc skrypt po uruchomieniu: podaje jako słowo "lipa"
wyświetla komunikat
if o==True:
NameError: name 'o' is not defined
Z góry dziękuję za pomoc.


word=input("podaj slowo do sprawdzenia wystapienia samoglosek")
vowels=['a','o','u','y','e','i']
vowel_a=[]
vowel_o=[]
vowel_u=[]
vowel_y=[]
vowel_e=[]
vowel_i=[]

samogloski=[]
for letter in word:
    if letter in vowels:
        samogloski.append(letter)

for letter in samogloski:
    if letter =='a':
        vowel_a.append(letter)
        a=''.join(vowel_a)
    elif letter =='o':
        vowel_o.append(letter)
        o=''.join(vowel_o)
    elif letter =='u':
        vowel_u.append(letter)
        u=''.join(vowel_u)
    elif letter =='y':
        vowel_y.append(letter)
        y=''.join(vowel_y)
    elif letter =='e':
        vowel_e.append(letter)
        e=''.join(vowel_e)
    elif letter =='i':
        vowel_i.append(letter)
        i=''.join(vowel_i)



if a==True:
    print("slowo zawiera"+len(a) +"samogloski a")
if o==True:
    print("slowo zawiera"+len(o) +"samogloski o")
if u==True:
    print("slowo zawiera"+len(u) +"samogloski u")
if y==True:
    print("slowo zawiera"+len(y) +"samogloski y")
if i==True:
    print("slowo zawiera"+len(i) +"samogloski i")
if e==True:
    print("slowo zawiera"+len(e) +"samogloski e")







1

jesli w slowie lipa nie ma litery 'o' to o nie jest zdefinowane bo dopiero

elif letter =='o':
        vowel_o.append(letter)
        o=''.join(vowel_o)

musialbys zdefiniowac samogloski czyli o = null, a = null itd zeby byly zdefiniowane na poczatku zainicjoiwane

2

Dostajesz błąd, bo słowo lipa nie zawiera o stąd cały warunek jest pomijany (definicja zmiennej). Jednym z rozwiązań jest to co podał przedmówca, czyli sztywna definicja definicja zmiennych z wynikiem ```None``. Niemniej uważam, że źle podchodzisz do całego rozwiązania, ponieważ można zrobić to na milion sposobów krócej i bardziej czytelnie. Tą część zostawiam Tobie do rozkminy :)

0

troszkę skróciłem skrypt i wykorzystałem funkcję count do zliczanie liczby wystąpień samogłoski w liście


word=input("podaj slowo do sprawdzenia czestosci samoglosek")
vowels=['a','o','u','i','y','e']
list_Of_Vowels_In_Word=[]

for letter in word:
    if letter in vowels:
        list_Of_Vowels_In_Word.append(letter)

if 'a' in list_Of_Vowels_In_Word:
    print("samogloska a wystepuje " + str(list_Of_Vowels_In_Word.count('a')) + " raz(y)")
if 'o' in list_Of_Vowels_In_Word:
    print("samogloska o wystepuje " + str(list_Of_Vowels_In_Word.count('o')) + " raz(y)")
if 'u' in list_Of_Vowels_In_Word:
    print("samogloska u wystepuje " + str(list_Of_Vowels_In_Word.count('u')) + " raz(y)")
if 'i' in list_Of_Vowels_In_Word:
    print("samogloska i wystepuje " + str(list_Of_Vowels_In_Word.count('i')) + " raz(y)")
if 'y' in list_Of_Vowels_In_Word:
    print("samogloska y wystepuje " + str(list_Of_Vowels_In_Word.count('y')) + " raz(y)")
if 'e' in list_Of_Vowels_In_Word:
    print("samogloska e wystepuje " + str(list_Of_Vowels_In_Word.count('e')) + " raz(y)")
1

@crispia: tutaj masz poradnik w jaki sposób operować na listach w pythonie

1
a_string = "Abcde"
lowercase = a_string.lower()

vowel_counts = {}

for vowel in "aeiou":
    count = lowercase.count(vowel)
    vowel_counts[vowel] = count

print(vowel_counts)
0

nie wiem czy ma to jakieś znaczenie, ale Wasze skrypty wykorzystują chyba słownik dict w kodzie jednolinijkowym Arthan i vowel_count masterc.Nie zajmuje się programowaniem zawodowo ani edukacyjnie, co widać w kodzie Korzystam jedynie, i to od czasu do czasu, dla rozrywki z tej książki. lubię czasem pokombinować i działający kod sprawia mi wielka frajdę. Zadanie to należało rozwiązać wyłącznie przy pomocy list (metody list np funkcje count też chyba można do nich zaliczyć) , stad takie kombinacje.
jeszcze raz dziękuję za pokazanie jak przepaść algorytmiczna dzieli mnie od znawców Pythona. Pozdrawiam:)

1

@crispia: ok, to jak się trzymasz tych tablic to tylko jeszcze dopowiem, że można skrócić Twoją wersję tych if'ów wrzucając je w prostą pętlę:

for vowel in vowels:
    if vowel in list_Of_Vowels_In_Word:
        print(f"samogloska {vowel} wystepuje {list_Of_Vowels_In_Word.count(vowel)} raz(y)")

1 użytkowników online, w tym zalogowanych: 0, gości: 1