• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ćwiczenie z if-else

Object Storage Arubacloud
0 głosów
195 wizyt
pytanie zadane 16 grudnia 2022 w Python przez Przemol64 Nowicjusz (160 p.)

Cześć

Nie tyle co problem z rozwiązaniem, ale mam zagadkę, która może być albo brakiem wiedzy bo źle coś doczytałem (a wątpię), albo błędem w książce (lub bardziej tłumaczeniu).

Ćwiczenie z Python. Instrukcje dla programisty, treść skrócona

Przygotuj konstrukcję if-else ustalającą etapy życia...
a) Jeżeli osoba ma mniej niż 2 lata...
b) Jeżeli osoba ma co najmniej 2 lata, ale mniej niż 4
c) Jeżeli osoba ma co najmniej 13 lat...

Jak to wykonać konstrukcją if-else, skoro instrukcja po spełnieniu pierwszego warunku zakończy? Powinno być elif, ale skoro autor pisze o else:, więc może ktoś mi coś podpowie.

 

Dla mnie to, ta konstrukcja jest prawidłowa

age = 4

if age < 2:
    print("Niemowlęcie")
elif age < 4:
    print("Dziecko uczące się chodzić")
elif age < 13:
    print("Dziecko")

Używając else tak jak pisze autor w ćwiczeniu to przecież ten program nie ma racji bytu.

3 odpowiedzi

0 głosów
odpowiedź 16 grudnia 2022 przez Wiciorny Ekspert (270,190 p.)
age = 3

if age < 2:
  stage = "infant"
elif age < 4:
  stage = "toddler"
elif age < 13:
  stage = "child"
else:
  stage = "teenager or adult"

print(stage)

W powyższym przykładzie, jeśli osoba ma mniej niż 2 lata, zostanie określona jako "infant", jeśli ma co najmniej 2 lata, ale mniej niż 4, zostanie określona jako "toddler", a jeśli ma co najmniej 13 lat, zostanie określona jako "teenager or adult". Jeśli osoba nie spełnia żadnego z tych warunków, zostanie określona jako "child".

W powyższym przykładzie założone jest, że wiek osoby jest przechowywany w zmiennej age

Zakończy się  wtedy kiedy warunek jest prawidłowy, natomiast 4 nie jest mniejsze od 4 np. więc się nie zakończy tutaj jest równe, a równy to nie mniejszy, to że się coś kończy wcześniej oznacza, że spełniło wymogi i nie musi być dalej sprawdzane. 

elif - to jest if-else w pyhtonie.
Zauważ, że else być musi ... bo co jeśli ktoś ma 14 lat? :) 
 Jeżeli osoba ma co najmniej 13 lat... to znaczy albo 13 albo więcej a nie mniej niż 13 

komentarz 17 grudnia 2022 przez Przemol64 Nowicjusz (160 p.)
To nie całość ćwiczenia, ma kilka dalszych wariatów m.in osoba dorosła do 65 lat i senior powyżej więc nie ma tu sensu wg mnie stosować else, bo dokładny przedział wiekowy dla danego wyświetlenia komunikatu określam dokładnie w elif.

 

Dlatego nie wiem właśnie co autor miał na myśli pisząc if-else, może faktycznie (a raczej na pewno) konstrukcje uznał jako if -elif- else.
komentarz 17 grudnia 2022 przez VBService Ekspert (253,420 p.)

@Wiciorny, 

elif - to jest if-else w pyhtonie

chyba jednak if-else to

if warunek:
    pass
else:
    pass

a elif to skrót od else if

if warunek1:
    pass
elif warunek2:
    pass
elif warunek3:
    pass

 

komentarz 17 grudnia 2022 przez Przemol64 Nowicjusz (160 p.)

Podejrzewam jednak, że jest to błąd w książce i miało być if-elif, nie ma innego sensownego wykonania tego ćwiczenia dysponując wiedzą przedstawioną w książce dotychczas do tego rozdziału.

Napotkałem się również z inną rzeczą choć nie tyle co błędem. 

 

... dodaj polecenie if sprawdzające, czy lista użytkowników nie jest pusta. Jeżeli lista jest pusta, wyświetl komunikat...

 

 

Materiał w rozdziale opiera się o

if x not in x:

 

gdy, właściwym rozwiązaniem dla ćwiczenia jest

if not x

 

To nie błąd, ale zaczynam mieć wątpliwości co do książki i co będzie dalej skoro już na wstępie są niejasności i zamiast się uczyć, to rozkminiam nad poprawnością treści w książce...

komentarz 17 grudnia 2022 przez Wiciorny Ekspert (270,190 p.)

@VBService,  no mówi jedno myśli drugie. Tak miałem na myśli else if, warunek kolejnego sprawdzenia, a nie przypadku przeciwnego, Thanks.

0 głosów
odpowiedź 17 grudnia 2022 przez VBService Ekspert (253,420 p.)
edycja 17 grudnia 2022 przez VBService

Czy autorowi nie chodziło o taki np. zapis

[ on-line ]

age = 2

if age < 2: # Jeżeli osoba ma mniej niż 2 lata...
    child = 'Niemowlęcie'
else:
    if age < 4: # Jeżeli osoba ma co najmniej 2 lata, ale mniej niż 4
        child = 'Dziecko uczące się chodzić'
    else:
        if age < 13: # Jeżeli osoba ma co najmniej 13 lat...
            child = 'Dziecko'
        else:
            child = 'Nastolatek'
print(f'{age:2} {child}')

 


@Przemol64

Dlatego nie wiem właśnie co autor miał na myśli pisząc if-else, może faktycznie (a raczej na pewno) konstrukcje uznał jako if -elif- else.

kod staje się prostszy w zapisie i bardziej czytelny 

komentarz 17 grudnia 2022 przez Oscar Nałogowiec (29,320 p.)
Jesli program wchodzi w else (linia 5) to znaczy że ma nie mniej niż 2 lata, po co to jeszcze  raz sprawdzać?

elif to taki syntax sugar - równoważny else - if tyle że umożliwienie pisanie na jednym poziomie wcięć, else - if wymaga coraz głębszego wcięcia.
komentarz 17 grudnia 2022 przez VBService Ekspert (253,420 p.)

Tak zauważyłem to, już poprawiłem (późna pora - głowa wolniej pracuje) angel

komentarz 17 grudnia 2022 przez Przemol64 Nowicjusz (160 p.)

@VBService, nie, ponieważ tego typu konstrukcja nie była prezentowana dotychczas

komentarz 17 grudnia 2022 przez Oscar Nałogowiec (29,320 p.)
Każdej moźliwej kombinacji instrukcji to raczej nie podadzą na kursie. Wewnątrz if mogą być dowolne instrukcje, kolejne if-y też.
komentarz 17 grudnia 2022 przez VBService Ekspert (253,420 p.)
edycja 17 grudnia 2022 przez VBService

@Przemol64, To może

[ on-line ]

    if age >= 2 and age < 4: # Jeżeli osoba ma co najmniej 2 lata, ale mniej niż 4
        child = 'Dziecko uczące się chodzić'
    else:
        child = 'Niemowlęcie' # Jeżeli osoba ma mniej niż 2 lata...

    if age >= 4 and age <= 13: # Jeżeli osoba ma co najmniej 13 lat...
        child = 'Dziecko'
        
    if age > 13:
        child = 'Nastolatek'
        
    print(f'{age:2} {child}')

 

lub chodzi o tzw. "operator warunkowy"

[ on-line ]

    child = 'Niemowlęcie' if age < 2 else 'Dziecko uczące się chodzić' if age < 4 else 'Dziecko' if age < 13 else 'Nastolatek'
    print(f'{age:2} {child}')

 

komentarz 17 grudnia 2022 przez Wiciorny Ekspert (270,190 p.)

@VBService, na jakiej podstawie kod staje sie bardziej czytelny? 

0 głosów
odpowiedź 17 grudnia 2022 przez Przemol64 Nowicjusz (160 p.)

Dobra, jest błąd w książce.

Pobrałem anglojęzycznego ebooka i w treści ćwiczenia jest napisane

"Write an if-elif-else chain that determines a person’s stage of life. Set a value for the variable age, and then", a nie if-else.

Podobne pytania

0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 28 czerwca 2022 w Python przez franek7e3 Nowicjusz (180 p.)
+1 głos
1 odpowiedź 1,049 wizyt
pytanie zadane 24 maja 2019 w Python przez Ventre90 Obywatel (1,170 p.)
0 głosów
0 odpowiedzi 323 wizyt
pytanie zadane 22 kwietnia 2022 w Python przez mewtwo Użytkownik (830 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...