zjadacz samogłosek

zjadacz samogłosek
KK
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:4
0

Cześć,
Kilka dni temu wystartowałem z nauką programowania..
Utknąłem z następującym ćwiczeniem i potrzebuję pomocy aby ruszyć dalej z kursem, a co najważniejsze chcę to zrozumieć.
Poniżej treść zadania:


Twoje zadanie tym razem jest bardzo szczególne: musisz zaprojektować brzydkiego zjadacza samogłosek! Napisz program, który wykorzystuje:

  • pętlę for;
  • koncepcję warunkowego wykonywania (if-elif-else)
  • instrukcję continue.

Twój program musi:

-poprosić użytkownika o wpisanie słowa;

  • użyć metody upper() (tzn. slowo_uzytkownika = slowo_uzytkownika.upper()) do zamiany słowa wprowadzonego przez użytkownika na słowo pisane wielkimi literami;
  • wykorzystać koncepcję wykonywania warunkowego i instrukcję continue do "zjedzenia" następujących samogłosek A, E, I, O, U z wprowadzonego przez użytkownika słowa;
  • wyświetlić niezjedzone litery na ekranie - każdą z nich w osobnej linii.

Dodatkowo jest podany zalążek programu:

Poproś użytkownika o wprowadzenie słowa

i przypisz je do zmiennej slowo_uzytkownika

Uzupełnij pętlę for poniżej:

for litera in slowo_uzytkownika:


Szukałem już trochę rozwiązań, ale wszystko co do tej pory stworzyłem w kontekście tego programu jest bezsensu.
Będę wdzięczny za pomoc.

Pozdrawiam,
Krzysztof

Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Pokaż co już napisałeś i z którym punktem konkretnie masz problem.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
KK
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:4
0
Shalom napisał(a):

Pokaż co już napisałeś i z którym punktem konkretnie masz problem.

Napisałem dwie wersje

  1. w pierwsze wyświetla tylko pierwszą literę.
Kopiuj
# Poproś użytkownika o wprowadzenie słowa
# i przypisz je do zmiennej slowo_uzytkownika
slowo_uzytkownika = input("Podaj słowo: ")
slowo_uzytkownika = slowo_uzytkownika.upper()
litera = ("AEIOU")
var = 0
# Uzupełnij pętlę for poniżej:
for litera in slowo_uzytkownika:
    if litera == slowo_uzytkownika:
#       var = +1
        continue
    elif litera !=slowo_uzytkownika:
    print (slowo_uzytkownika [var])
var = +1 

  1. W drugiej - nic się nie dzieje
Kopiuj
# Poproś użytkownika o wprowadzenie słowa
# i przypisz je do zmiennej slowo_uzytkownika
slowo_uzytkownika = input("Podaj słowo: ")
slowo_uzytkownika = slowo_uzytkownika.upper()
litera = ("AEIOU")
var = 0
# Uzupełnij pętlę for poniżej:
for litera in slowo_uzytkownika:
    if litera in slowo_uzytkownika:
#        var = +1
        continue
    
    else: print(slowo_uzytkownika[var])
var = +1
edytowany 3x, ostatnio: Shalom
Tasmanian Devil
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.9999967)
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 3 godziny
2

Najważniejsze zastanów się czy gdybyś miał to zrobić ręcznie na kartce / tablicy etc użył byś właśnie takiego sposobu jaki tu próbujesz zakodować? Dla nie to pomieszanie z poplątanym. poza tym:
do kodów używaj tagu dostępnego pod </>, z wcięciami łatwiej się czyta, dodatkowo w Pythonie takowe mogą być źródłem problemu.
Daj też inne nazwy dla listy i iteratora for-a.

ps zapomniałeś o Y

lion137
Może igreka nie musi zjadać
KK
Dzięki - Y dodam ;-). Sposób zakodowania jest wymuszony przez treść zadania. Pętla "for litera in slowo_uzytkownika:" jest narzucona. Próbuję z tego wybrnąć ale nie potrafię :(
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

A może zrób tak:

  • zrób pusty wynikowy string
  • dla każdej literki z tekstu użytkownika:
    • jeśli literka jest na blackliście to nie robisz nic
    • jeśli literki nie ma na blackliście, to dodajesz ją do wynikowego stringa

A te twoje kody nie mają sensu, między innymi dlatego ze dajesz zmiennym tzw nazwy z dupy. Zauważ że w tym twoim kodzie używasz litera w dwóch różnych kontekstach! Skąd w ogóle litera = ("AEIOU") ? o_O Dla mnie to jest jakieś blacklist ale na pewno nie litera.
W efekcie jak masz:

Kopiuj
for litera in slowo_uzytkownika:
    if litera in slowo_uzytkownika:

To przecież ten pierwszy for NADPISUJE ci zmienną litera, więc ten if niżej nie ma absolutnie żadnego sensu bo zawsze zwróci true.

Ten twój pomysł z licznikiem jest bez sensu, ale zadziałałby nawet, gdyby nie ta zła nazwa zmiennej.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 2x, ostatnio: Shalom
KK
Dzięki za odpowiedź. To co proponujesz jest chyba wskazówką jak rozwiązać następne zadanie z tej serii, ponieważ program zaczyna się od '''slowo_bez_samoglosek ='''. Natomiast tutaj Zmienna '''litera''' pojawiła się od autora zadania, bez żadnych dodatkowych wskazówek, dlatego próbowałem z tego wybrnąć poprzez przypisanie do zmiennej samogłosek. Ogólnie nie mam pomysłu jak porównać samogłoski z strumieniem znaków z wykorzystaniem założeń zadania. Chyba łatwiej byłoby mi zrozumieć gdyby ktoś pokusił się o napisanie kodu. Ale nie wiem czy nie proszę za wiele.
Shalom
Ale ten kod jest prawie ok, jedyne co jest zrypane to nazwa zmiennej, nic więcej. Jakbyś zrobił dupa = "AEIOU" a potem if litera in dupa: to cały kod zadziała, o ile te var+=1 będą dobrze wstawione.
Shalom
Patrz: https://ideone.com/FLw4UD oczywiście widać że ten var w ogóle nie jest potrzebny, można by przecież robić print(litera) po prostu.
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 3 godziny
0

Jak dla mnie to powinieneś porównywać zmienną litera z listą samogłosek (jak już ta będzie się sensownie nazywać) i wtedy wypisać litera albo i nie. Do tego albo continue albo else, stosowanie obu nie ma sensu, bo w tym przypadku robią to samo (aczkolwiek w niczym zadaniu nie zaszkodzi). zmienna var jest tu całkowicie zbędna

bearek
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad rok
  • Postów:85
1

Najprostsze rozwiązanie zgodne z treścią zadania:

Kopiuj
slowo_uzytkownika = input('Wpisz słowo: ')
slowo_uzytkownika = slowo_uzytkownika.upper()

for litera in slowo_uzytkownika:
    if litera in 'AEIOUY':
        continue
    print(litera)

Zauważ, że dodałem Y, bo w języku polskim Y to też samogłoska. Nie dodałem polskich samogłosek, jak chcesz to dodaj.

edytowany 2x, ostatnio: bearek
SI
Każda litera ma być w osobnej linii
bearek
Aha, faktycznie. No to jeszcze prościej. Wyedytowałem.
KK
Dzięki serdeczne! :) do ''' end''' znacznik przeniesienia do następnej linii '''\n''' i działa tak jak powinno.
bearek
@Krzysztof_K: ten end nie jest w ogóle potrzebny - nie doczytałem, że znaki mają być w osobnych liniach. Linie są domyślnie kończone \n.
KK
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:4
0

Dziękuję wszystkim którzy odpowiedzieli. Wasze komentarze pozwoliły mi lepiej zrozumieć temat.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.