if i kolejność wykonywania poleceń

0

Witam kilka dni temu rozpocząłem swoją przygodę z programowaniem i trafiłem na działający przykład którego nie rozumiem. W tym programie wpisujemy 3 liczby a on ma za zadanie podać najmniejszą.

print ('wpisz trzy cyfry by dowiedzieć się która z nich jest najmniejsza')

x = input()
y = input()
z = input()

if x < y:
    if x < z:
        print ('najmniejszą liczbą jest ',x)

    else:
        print ('najmniejszą liczbą jest ',z)    # tej linijki nie rozumiem

elif y < z:
    print ('najmniejszą liczbą jest ',y)
else:
    print ('najmniejszą liczbą jest ',z)
    

if sprawdził że x jest większe od "y" i "z" i od razu pod spodem jest polecenie else które nakazuje wysłać komunikat że "z" jest najmniejszą liczbą, a przecież nie sprawdziliśmy jeszcze "y"

to polecenie jest pod spodem, dlatego nie ogarniam kolejności

1
if x < y:
    if x < z:
        print ('najmniejszą liczbą jest ',x)
    else:
        print ('najmniejszą liczbą jest ',z)    # tej linijki nie rozumiem

Jeśli x jest mniejsze od y, ale nie jest mniejsze od z, to znaczy, że z jest najmniejsze. Czego tu nie rozumiesz?

To że y na pewno jest większe od z wiemy, bo wiemy że x jest od niego mniejsze, a skoro x jest mniejsze od y i x jest większe od z, to z musi być najmniejsze i dodatkowe sprawdzenia nie są potrzebne.

Jeśli się nie pomyliłem to zależności dla konkretnych wyników wyglądają tak:

if x < y:
    if x < z:
        print ('najmniejszą liczbą jest ',x) #   x < z < y
    else:
        print ('najmniejszą liczbą jest ',z) #   z < x < y
elif y < z:
    print ('najmniejszą liczbą jest ',y)     #   y < z < x
else:
    print ('najmniejszą liczbą jest ',z)     #   z < y < x

Jeśli uważasz, że okomentowana linijka nigdy nie powinna być wykonana, to spróbuj podać takie wartości dla zmiennych, dla których zostanie wyświetlona błędna informacja. ;)

0

pierwsze dwa if sprawdzają czy x jest najmniejszą liczbą jeżeli się tak nie dzieje program przeskakuje do else nakazuje wyświetlić że z jest najmniejszą liczbą a przecież nie porównaliśmy jeszcze z do y

Edit: wiem wiem próbowałem :)

1

Można też łopatologicznie zamienić

else:

na:

if x > z:

W tej części akurat masz porównywany x do pozostałych wartości tj z. I jak już raz został porównany do y to zostało sprawdzenie czy jest mniejszy czy większy od z. Ta część tylko to sprawdza.

0

Należy też pamiętać o klamerkach nawet przy pojedynczej instrukcji po if {}. No i z matematyki wynika: a > b > c to a > c ....

9
R3id4k napisał(a):

Należy też pamiętać o klamerkach nawet przy pojedynczej instrukcji po if {}.

.
.
W Pythonie?!
.

0

Dziękuje wszystkim za odpowiedzi, zrozumiałem przykład :)

0

@enedil nie pisałem w tym 3 lata ale jak widać pamiętam więcej niż ty.

1
Pętliczek napisał(a):

@enedil nie pisałem w tym 3 lata ale jak widać pamiętam więcej niż ty.

a. Wprowadzasz ludzi w błąd
b. Ktoś zwraca Ci uwagę, że się mylisz
c. Upierasz się przy swoim
d. Obrażasz innych
c. Starasz się zabłysnąć dając bzdurny przykład (tworzysz dwa puste słowniki, bloki kodu w Pythonie tworzy się przez wcięcia) i dalej wprowadzać ludzi w błąd.

Według twojej wizji taki kod powinien zadziałać:

if i > 0: {
    print('if block 1')
    print('if block 2')    
}
else: {
    print('else block 1')
    print('else block 2')
}

Niespodzianka, otrzymasz SyntaxError: invalid syntax.

Krótko, chłopie ogarnij się.

@hello world Swoją drogą program, który podałeś można napisać bez takiej kaskady if-ów. Jedna z propozycji może być następująca:

def num(s):
    try:
        return int(s)
    except ValueError:
        return float(s)

print ('wpisz trzy cyfry by dowiedzieć się która z nich jest najmniejsza')

inputs = [input(), input(), input()]
inputs = [num(i) for i in inputs]

print ('najmniejszą liczbą jest ', min(inputs))

EDIT A nawet jeszcze prościej:

print ('wpisz trzy cyfry by dowiedzieć się która z nich jest najmniejsza')

inputs = [input(), input(), input()]
print ('najmniejszą liczbą jest ', min(inputs))

0

@hello world Swoją drogą program, który podałeś można napisać bez takiej kaskady if-ów. Jedna z propozycji może być następująca:

def num(s):
    try:
        return int(s)
    except ValueError:
        return float(s)

print ('wpisz trzy cyfry by dowiedzieć się która z nich jest najmniejsza')

inputs = [input(), input(), input()]
inputs = [num(i) for i in inputs]

print ('najmniejszą liczbą jest ', min(inputs))

EDIT A nawet jeszcze prościej:

print ('wpisz trzy cyfry by dowiedzieć się która z nich jest najmniejsza')

inputs = [input(), input(), input()]
print ('najmniejszą liczbą jest ', min(inputs))

Da się to napisać prościej :)

print ('wpisz trzy liczby by dowiedzieć się która jest najmniejsza')

x = input()
y = input()
z = input()

a = [x,y,z]

a.sort()                                    
print ('najmniejsza liczba to ', a[0])      

Temat założyłem bo chciałem zrozumieć tą "kaskadę if-ów"

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