Python metodička zbirka

Poštovani,

Obraćam se u vezi konkretnog primera iz zbirke. Mislim da je naslov prikladan jer bih možda imao još koje pitanje, nekad, ukoliko se zapetljam.

U okviru poglavlja 4.1.3 Filtriranje, konkretno u zadatku Preticanje, predložene su unapred tri moguće situacije (3 od mogućih 6). U okviru svake od petlje if, jedan od uslova je da not bilo_preticanja. Dvoumim se zbog čega je taj uslov potreban.

Pozdrav,
Milutin

Pozdrav Milutine,

Pokušaću da Vam pojasnim ovaj zadatak na konkretnom primeru.
Zamislite da posmatramo trku tri automobila i da želimo da zapamtimo poslednji put kada je neko nekog pretekao.

Ako još nijednom nije bilo preticanja, onda ćemo zapamtiti svako prvo koje vidimo — jer do tada nismo videli.
Ako smo već videli jedno preticanje, i sad se desi novo, poredimo da li se to desilo kasnije nego ono prethodno

  • Ako jeste → pamtimo ovo novo, jer nas zanima najkasnije preticanje.
  • Ako nije → ignorišemo, jer nas zanima samo ono najkasnije.

Ukratko:

  • not bilo_preticanja znači — prvi put se nešto desilo, pamtimo
  • t_preticanja > t_poslednjeg_preticanja znači — ovo novo je kasnije, pamtimo

Uslov if not bilo_preticanja or t_preticanja > t_poslednjeg_preticanja: je tu da:

  • uvek zabeleži prvo preticanje koje se desi,
  • i da kasnije zamenjuje to zapamćeno vreme samo ako je novo preticanje bilo kasnije.

Nadam se da Vam je ovo pojašnjenje zadovoljavajuće.

Za sva dodatna pitanja stojimo Vam na raspolaganju.

S’poštovanjem,
Nemanja

Pozdrav,

Probao sam primer sa i bez tog uslova u okviru petlje if (koja je unutar petlje if) i dobijem isto rešenje.

Ja sam kod napisao drugačije, i baš sam se udubio u taj uslov, iz nekog razloga mi je zanimljiv jer je logika suprotna mojoj ili je priroda stvari takva da sam samo morao da nešto napišem ovde.

print("Uneti startna vremena i brzine: ")
h1 = input().split()
h2 = input().split()
h3 = input().split()
t1 = float(h1[0]); v1 = float(h1[1])
t2 = float(h2[0]); v2 = float(h2[1])
t3 = float(h3[0]); v3 = float(h3[1])

def preticanje(t1, v1, t2, v2):
t = 0
if v1 != v2: # ispravljeno
t = (v1 * t1 - v2 * t2)/(v1 - v2)
if t > 0 and t > t1 and t > t2 :
return t
else:
return 0

t12 = preticanje(t1, v1, t2, v2)
t21 = preticanje(t2, v2, t1, v1)
t13 = preticanje(t1, v1, t3, v3)
t31 = preticanje(t3, v3, t1, v1)
t23 = preticanje(t2, v2, t3, v3)
t32 = preticanje(t3, v3, t2, v2)

tmax = max(t12, t21, t13, t31, t23, t32)

if tmax == 0:
print(“Nema”)
else:
print(format(tmax, ‘.2f’))

S poštovanjem,
Milutin