Názory ke článku Python - 9. lekce
26. 11. 2006
ahoj chcem pochvalit tento serial je uplne super ale mam maly problem s tym zoznamom mal som:
...
mena=[]
cisla=[]
vsetko=[mena,cisla] ale najprv mi to vypise mena a az tak cisla tak som skusil toto:
...
cisla=[]
mena=[cisla] ale tu mi zas vuhodilo len jedno meno a potom vsetky cisla prosim kde robim chybu? poradte...skusal som poprosit ludi na irc ale nepomohli :(
Mohl by mi někdo prosím trochu víc vysvětlit toto ?´
:def porovnej(mestoSeznam):
# definice funkce, která bude spolupracovat se sort()
return mestoSeznam[1] # zde vracíme tu položku, podle které chceme řadit
mesta=[['Praha', 1000000], ['Brno', 350000], ['Ostrava', 300000], ['Zlin', 80000]]
mesta.sort(key=porovnej) # serad podle klice (= funkce) "porovnej"
print "Serazeno podle poctu obyvatel: ", mesta
¨
Není mi jasné jak pracuje ten argument key ??? a navíc mi není jasné jak mu můžem předat parametr funkci porovnej bez uvedení argumentu ??? Děkuji za odpověď .
4. 7. 2007
Na tohle jsem taky koukal :(
zkoušel jsem key měnit na všechno možný ale funguje to jen v tomhle tvaru :(
5. 7. 2007
Ahoj, hrozně chválím váš seriál, je bezva. Hrozně se mi líbí styl, kterým je psán - vysvětlení funkcí a úkol pro vlastní vyzkoušení. Jen bych chtěl dodat k tomuto článku, konkrétně k rubrice extra pro pokročilé, že vyhledání nového parametru funkce sort() není pořeba - indexovat můžeme i rozdílem :-D
2. 8. 2007
.... co znamena toto, alebo vlastne, ako sa to da vysvetlit, ako sa da zadat do toho key(u) funkcia porovnej, ked ma jeden argument?
def porovnej(mestoSeznam):
# definice funkce, která bude spolupracovat se sort()
return mestoSeznam[1] # zde vracíme tu položku, podle které chceme řadit
mesta=[['Praha', 1000000], ['Brno', 350000], ['Ostrava', 300000], ['Zlin', 80000]]
mesta.sort(key=porovnej) # serad podle klice (= funkce) "porovnej"
print "Serazeno podle poctu obyvatel: ", mesta
Ano, "porovnej" je nejen bez argumentu, ale i bez závorek. S tímto se ještě setkáte u Tkinter, až budete chtít, aby se po stisku tlačítka něco stalo ;-) MEtoda "sort" si tam prostě argumenty dosadí sama. NEvím přesně jak, protože algoritmů na třídění je několik, to se hodně probírá v Pascalu na SŠ a VŠ. "Key" se do Pythonu dosatl tuším později, jako zjednodušení předchozího "cmp" (compare), které fungovalo nějak takto:
def porovnej_cmp(x,y):
porovnani= x < y # bude jedna, pokud x<y, jinak nula
return porovnani
mesta.sort(cmp=porovnej_cmp) # serad podle klice (= funkce) "porovnej"
print "Serazeno podle poctu obyvatel: ", mesta
Snad je to u cmp jasnější, co se děje - u key se děje to samé, jen o tom nevíte. Prostě mu jen ve funkci "porovnej" řeknete, podle kterého "sloupečku" řadit.
9. 9. 2007
Nejprve chci rict, ze serial je opravdu super :-)... mno... tento ukol sice neodevzdam, pze jsem to cely delal pomoci slovniku a uvnitr hratky se seznamama, ale je to stejne dost jednoduchy... ale chtel jsem navrhnout, jestli by nebylo dobre vysvetlit lambda funkce... myslim, ze pro argument key jsou lambda funkce naprosto vybornou volbou ;-)... napriklad kdybych mel seznam:
mesta=[['Praha', 1000000], ['Brno', 350000], ['Ostrava', 300000], ['Zlin', 80000]]
a chtel to seradit, tak podle poctu obyvatel, tak to nejelegantneji udelam takto, ne?:
mesta.sort(key = lambda x: x[1])
Moja verzia programu pre "extra pokročilé" :)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "Telefóny zoznam \n"
zoznam = []
while True:
kontakt = []
meno_prez = raw_input("Zadaj meno a priezvisko: ")
telefon = raw_input("Zadaj telefóne číslo: ")
print
kontakt = [meno_prez, telefon]
zoznam.append(kontakt)
koniec = raw_input("Chceš pridať ďalší kontakt? Ano/Nie: ")
if koniec.upper() == "N":
print
break
print ("Ďakujem, zadávanie ukončené")
print ("Tuje Váš nový telefóny zoznam:")
print ("------------------------------")
zoznam.sort(reverse=True)
for meno, tele in zoznam:
print meno, ":", tele
print "\nPočet kontaktov v zozname: ", len(zoznam)
PS: super serial :)