Diskuze: Ternární výraz v Pythonu

Člen

Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ternární operátor v příkladu odpovídá tomuto:
if muz == True:
nazev_pohlavi = "muž"
else:
nazev_pohlavi = "žena"
If vždy vyhodnocuje následující výraz jako True/False, "muž" je truthy hodnota tedy vždy True (viz jeden z tvých předchozích dotazů) a výstupem bude vždy muž. Aby to fungovalo jak zamýšlíš muselo by to být nějak takto:
pohlavi = input("Zadejte pohlavi: (muž/žena)")
pohlavi = "muž" if pohlavi == "muž" else "žena"
print(pohlavi)
Smysluplnost takového kódu je otázkou.
Ano, to funguje.
Junými slovy:
pohlavi = input("Zadejte phlavi: (muz/zena) ")
if pohlavi == "muz":
pohlavi = "muž"
else:
pohlavi = "žena"
print(pohlavi)
Ten kód funguje také.
Ale if pohlavi == "muz":
je možné popsat jako
if (muz)
, nebo ne? A znamenalo by to "bool" význam?
Tehdy:
pohlavi = input("Zadejte phlavi: (muz/zena) ")
if (muz):
pohlavi = "muž"
else:
pohlavi = "žena"
print(pohlavi)
Ale nefunguje.
Tj. jak, jakým způsobem můžeme v kódu předdefinovat "True"? S výjimkou
přímého označení, že je to "True"?
muz = False # nějaká proměnná udávající pohlaví
nazev_pohlavi = "muž" if (muz) else "žena"
print(nazev_pohlavi)
Tamto je totiz nevnohdne napsany priklad
pohlavi = True # True = muzske, false = zenske
nazev_pohlavi = "muž" if (pohlavi) else "žena"
print(pohlavi, nazev_pohlavi)
pohlavi = True # True = muzske, false = zenske
nazev_pohlavi = "muž" if (pohlavi==True) else "žena"
print(pohlavi, nazev_pohlavi)
pohlavi = "muž"
nazev_pohlavi = "muž" if (pohlavi=="muž") else "žena"
print(pohlavi, nazev_pohlavi)
###
pohlavi = input("Zadejte pohlavi: (muz/zena) ")
if (muz): # --- tohle je nesmysl, "muz" je promena, kterou jsi prejmenoval na "pohlavi" na predchozim radku
pohlavi = "muž"
else:
pohlavi = "žena"
print(pohlavi)
Cele ten puvodni priklad je o tom, ze mas zaskrtavaci policko
[ ] jsem muz
. Jenom nevhnodne pojmenovali polozku/promenou
pohlavi
jako muz
. Takze te to mohlo zmast. Cili
muz "muz" "muž"
je kazde neco jineho.
Kdyz pouzijes input("Zadejte pohlavi: (muz/zena)
, tak ti tam
uzivatel napise text "muz" a pak tam musis mit porovnani pohlavi = "muz" (muz
bez diakritiky, pokud uzivatel zada bez diakritiky). Cili, uz to neni
zaskrtavaci policko, ale policko, kde zadavas text.
If funguje nejak takto, pseudokod:
if (bool):
delej neco
elif (bool):
delej neco jineho
else:
delej jeste neco jineho
a za bool si muzes dosadit:
True # -> True
False # -> False
pohlavi == "muž" # -> True/False, podle toho co je uloženo v pohlavi
"muž" # -> True
1 # ->True
0 # -> False
K tvému kódu:
pohlavi = input("Zadejte phlavi: (muz/zena) ")
if (muz):
# muz je promenna, ktera neni definovana, bud `muz` musi byt bool, nebo tam musi byt neco co se jako bool vyhodnoti viz vyse
pohlavi = "muž"
else:
pohlavi = "žena"
print(pohlavi)
Jsem myslil, že v kódu:
pohlavi = input("Zadejte phlavi: (muz/zena) ")
if (muz):
......
Předpokládal jsem, že do pole 'vstup' jsem zadal ne proměnnou, ale
hodnotu,
která se pak porovná funkcí "if" a vytvoří hodnotu "bool": buď "true" nebo
"false".
Byla to chyba?
Finkce "if" v tomto případě vrátit shodu nebo ne? Neznamená to "boool"?
Ale v proměnné muz
nemáš nic uloženo v proměnné
pohlavi
máš uloženo, to co napíše uživatel. Takže musíš
proměnnou pohlavi
převést na bool, který vyjadřuje nějaký
tvůj předpoklad.
# napr.
muz = True if pohlavi == "muž" else False
# nebo
if pohlavi == "muž":
muz = True
zena = False
elif pohlavi == "žena":
muz = False
zena = True
else:
print("Zadejte muž/žena")
Teď jasně.
Myslil jsem "chabně!", že stači napsat if (muz):
a program, tj.
Python, to pochopi jako nutnost porovnání textu, uvedeného uživatelem
(muz/zena), a podmínky if (muz):
, a pak vrati "bool" hodnotu
"True" nebo "False".
Teď vidím, jak to je nutné napsat.
Děkuji!
Jak psal pavel, if ocekava vyhodnoceni podminky, respektive, aby vysledek
vyrazu byl True.Pokud tam napises muz
a nikde predtim do nej nic
nedas muz=neco
, tak se to bere jako
muz = None nebo False
a if (muz)
pak skoci na else
if (True)
if (False)
if (pohlavi=="muž")
if (pohlavi=="žena")
muz = True
if (muz) # je totez jako napsat (true)
if (muz==True) # true
muz = "žena" # je neprazdny string (to tam pavel nezminil, pro zajimavost)
if (muz) # true
if (muz==True) # true
if pohlavi == "muž":
muz = True
zena = False
elif pohlavi == "žena":
muz = False
zena = True
else:
print("Zadejte muž/žena")
To není zrovna úplně dobrá programovaci technika přenastavovat flagy všech variant a používat duplicitnich proměnných. To způsobí extrémní zpomalení běhu programu. Mnohem lepší je přiřadit ID pomocí kterého lze snadno určit aktuální stav.
Tak ono primárně není úplně šťastné ptát uživatele, jestli je muž/žena. Ideální je nějaké zaškrtávací políčko, a tím se to vyřeší samo. Ale to je asi nad rámec toho se Alexandr učí. Asi mu postačí naučit jak to vůbec funguje a pak třeba bude řešit optimalizaci.
Ano, drtivá většina aplikací má interaktivní vstup. Výběry z několika variant se skutečně neřeší vypsáním té konkrétní varianty. Naučit se podmíněný příkaz a jeho varianty je otázkou nekolika minut, naučit se správně používat různých technik je záležitost dlouhodobá. A takovýto informativní doplněk mu v pozdější fázi ušetří dosti času.
Udělat v Pythonu v CLI něco na způsob selectu, znamená buď si to pomocí knihovny curses napsat sám, nebo si najít knihovnu která na tom bude založená, má rozumnou dokumentaci a někdo jí udržuje. Nemyslím si, že je to úkol pro někoho, kdo se teprve učí if. Takže holt mají úkol, napište jaké máte pohlaví, a tom se mají naučit jak funguje if. Víc bych v tom nehledal.
Zobrazeno 14 zpráv z 14.