Diskuze: Lekce 14 - Funkce a výjimky v Pythonu. Nemohu pochopit Vylepšení kalkulačky

Člen

Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Význam těchto úryvků kódu je v tom, že představují samostatnou funkcionalitu. To zjednodušuje čitelnost hlavního programu ve kterém je prosté volání funkcí s argumenty.
Dobře, ale jak ta samostatna funkcionalita funguje, jak ona startuje, příklad?
Třeba takto:
def nacti_cislo(text_zadani, text_chyba):
spatne = True
while spatne:
try:
cislo = float(input(text_zadani))
spatne = False
except ValueError:
print(text_chyba)
else:
return cislo
def dalsi_priklad():
nezadano = True
while nezadano:
odpoved = input("\nPřejete si zadat další příklad? y / n: ")
if (odpoved == "y" or odpoved == "Y"):
return True
elif (odpoved == "n" or odpoved == "N"):
return False
else:
pass
print("Kalkulačka\n")
pokracovat = True
while pokracovat:
prvni_cislo = nacti_cislo("Zadejte první číslo: ", "Neplatná volba!")
druhe_cislo = nacti_cislo("Zadejte druhé číslo: ", "Neplatná volba!")
print("1 - sčítání")
print("2 - odčítání")
print("3 - násobení")
print("4 - dělení")
print("5 - umocňování")
cislo_operace = nacti_cislo("Zadejte číslo operace: ", "Neplatná volba!")
if cislo_operace == 1:
print("Jejich součet je:", prvni_cislo + druhe_cislo)
elif cislo_operace == 2:
print("Jejich rozdíl je:", prvni_cislo - druhe_cislo)
elif cislo_operace == 3:
print("Jejich součin je:", prvni_cislo * druhe_cislo)
elif cislo_operace == 4:
print("Jejich podíl je:", prvni_cislo / druhe_cislo)
elif cislo_operace == 5:
print(prvni_cislo, "na", druhe_cislo, "je:", prvni_cislo ** druhe_cislo)
else:
print("Neplatná volba!")
pokracovat = dalsi_priklad()
input("\nStiskněte klávesu Enter...")
Teď rozumím, děkuji!
Je dobré vytvářet funkce tak, aby se pro ně naslo pokud možno co nejvíce uplatnění. Zkus modifikovat následující funkci tak aby prijimala výzvu a vracela boolovskou hodnotu True při y a False při n.
def dalsi_priklad():
nezadano = True
while nezadano:
odpoved = input("\nPřejete si zadat další příklad? y / n: ")
if (odpoved == "y" or odpoved == "Y"):
return True
elif (odpoved == "n" or odpoved == "N"):
return False
else:
pass
Myslím, že je možné takto:
def dalsi_priklad():
odpoved = input("\nPřejete si zadat další příklad? y / n: ")
if (odpoved == "y" or odpoved == "Y"):
return True
else:
return False
Kód jsem zkontroloval, funguje. Je to tak?
Nebo:
...
def dalsi_priklad(odpoved):
if (odpoved == "y" or odpoved == "Y"):
return True
else:
return False
...
...
odpoved = input("\nPřejete si zadat další příklad? y / n: ")
pokracovat = dalsi_priklad(odpoved)
...
Zkontroloval jsem, také funguje.
Ne, textovou informaci musíš dát do parametru a nemůžeš sloučit n či N spolu s ostatními znaky do False.
Tehdy jen takto:
def dalsi_priklad():
odpoved = input("\nPřejete si zadat další příklad? y / n: ")
if (odpoved == "y" or odpoved == "Y"):
return True
elif (odpoved == "n" or odpoved == "N"):
return False
else:
pass
Takto:
def yes_no(prompt):
while True:
odpoved = input(prompt + " [y / n]: ")
if odpoved.lower() == "y":
return True
elif odpoved.lower() == "n":
return False
else:
pass
Funkci yes_no() lze nyní používat všude tam kde očekáváme výzvu a odpověď yes/no.
A co tady je prompt
, co znamená prompt +
?
Prompt je proměnná přes kterou předáváš data funkci. Představuje řetězec s výzvou která se má zobrazit na obrazovce. + je operátor pro spojení proměnné a řetězce do jednoho celku. Jináč místo odpověď by bylo dobré dát identifikátor answer, když už to celé ostatní je v AJ.
Omlouvám se, nerozumím.
Představuje řetězec s výzvou která se má zobrazit na obrazovce.
- co tím myslíš?
Jde pro otázku "\nPřejete si zadat další příklad?"
?
Tj. měla by výzva vypadat takto:
pokracovat = yes_no("\nPřejete si zadat další příklad?")
Ale to nefunguje.
Zde je ukázkový program pro prezentaci funkce yes_no()
def yes_no(prompt):
while True:
answer = input(prompt + " [y / n]: ")
if answer.lower() == "y":
return True
elif answer.lower() == "n":
return False
else:
pass
# Hlavní část programu
pokracovat = yes_no("Přejete si pokračovat?")
if pokracovat:
print("Pokračujeme dál!")
else:
print("Program ukončen.")
Program je validní, spouštěno v online překladači
Online Compiler
Výzva (prompt) představuje řetězec který se zobrazí na obrazovce aby uživatel porozuměl na co programu odpovídat. Následně se od uživatele čeká že zadá y nebo n a potvrzení klávesou Enter.
Je třeba porozumět funkcím, je to alfa a omega programování. To co je v závorce definice funkce jsou parametry funkce. Data se předávají funkci prostřednictvím parametrů. Parametr je proměnná existující pouze uvnitř funkce. Často se nazývá formální parametr. S těmi uvnitř funkce pracuješ. Data předávané funkci při jejím volání jsou tzv. skutečné parametry, jinak řečeno argumenty funkce. Argument je hodnota která se předává funkci při jejím volání.
Tedy prompt je parametr (formální parametr) a "Přejete si pokračovat?" je argument funkce (skutečný parametr).
Teď je všchno zasně. Děkuji!
Bezva. Pouze malý dodatek k mému předchozímu příspěvku. Uvedl jsem mnoho pojmů pro stejnou věc. Postačí, když v praxi budeš používat pouze dva z nich - Parametr a Argument. Nakonec nad těmito pojmy později nebudeš přemýšlet a budeš definovat a volat funkce z fleku.
V jednom ze svých příspěvků si se dotazoval co je prompt. Když si se díval na definici funkce, nebylo to pro tebe patrné. Oprávněně. Neboť není zřetelné, co funkce očekává. Je dobré si udělat svůj systém značení pro rozpoznání typu. Pokud by sis označil proměnnou jako sPrompt, pak Ti pohled na název proměnné jasně dává informaci, že se jedná o řetězec (s - string). Popřípadě lze použít type hints.
Velmi dobře a jasné, děkuji!
Na svou obranu mohu pouze říci, že důvodem mého nedorozumění bylo, že
když jsem testoval Tvůj kód, vložil jsem jej (kód) do programu bez
potřebných odrážek, tedy naopak - s dvojitými odrážkami. Tvůj kód
nefungoval a já jsem nepochopil důvod a začal jsem hledat chybu tam, kde
žádná nebyla, požádal jsem Tebe o vysvětlení.
Ale když na druhou stranu – dostal jsem od Tebe spoustu užitečných
informací a vysvětlení, které mi pomohly lépe porozumět tématu.
Děkuji!
Zobrazeno 18 zpráv z 18.