Tá list() je tam zbytočná, tak žiadne asi :)
Příspěvky odeslané z IP adresy 188.167.34.–
#12 Marek Kadlčík
Pekne si sa vynašiel :)
Každopádne,
namiesto tohto:
print(functools.reduce(operator.pow, list(int(x) for x in input("Příklad: ").replace("*",""))))
by som dal toto:
print(functools.reduce(operator.pow, (int(x) for x in input("Příklad: ").replace("*",""))))
Keď nevieš, koľko má tých čísiel byť, radšej použi generátorovský výraz.
Využitie funkcie list() stojí nejaký čas aj výkon, + gen. výrazy sú šetrnejšie pre pamäť počítača
#6 fo
import string
import functools
import operator
def vyclen_integre(retazec):
""" Vrati zoznam cislic nachadzajucich sa v danom retazci. """
integre = []
for znak in retazec:
if znak in string.digits:
integre.append(int(znak))
return integre
print(functools.reduce(operator.pow, vyclen_integre(input("Vas retazec: "))))
Dalšia oprava, sorry, z toho štamprlíčka pred chvilou mi stále brní v hlave :(
#5 fo
Pardon , oprava, uvedomil som si jednu svoju logicku chybu :)
import string
import functools
def vyclen_integre(retazec):
""" Vrati zoznam cislic nachadzajucich sa v danom retazci. """
integre = []
for znak in retazec:
if znak in string.digits:
integre.append(int(znak))
return integre
print(functools.reduce(operator.pow, vyclen_integre(input("Vas retazec: "))))
Hmm, povedal by som, že ten druhý kód bude to, čo hľadáš :)
Hmm, neviem či som správne všetko pochopil.. Ale tu je niekoľko možností (nakoľko si neuviedol žiadnu modelovú situáciu:
zoznam_umocnovania = [2, 3, 2, 3, 5] # tento zoznam si predtym naplnil uživatel/programator
cislo = int(input("Zadajte cislo: "))
for exponent in zoznam_umocnovania:
cislo **= exponent
print("Hodnota cisla je {0}.".format(cislo))
Ďalšie riešenie, rozdelenie a spracovanie retazca:
import string
import functools
def vyclen_integre(retazec):
""" Vrati zoznam cislic nachadzajucich sa v danom retazci. """
integre = []
for znak in retazec:
if znak in string.digits:
integre.append(znak)
return integre
print(functools.reduce(operator.pow, vyclen_integre(input("Vas retazec: "))))
Mozno to vyzerá desne, ale na tebou zadnu ulohu, nemôžeš čakat oneliner.
Pardon ,nevšmiol som si KIIV-ov príspevok :)
No, či sa zrovna najviac hodí, to neviem...
Ale jeho štandardná knižnica obsahuje modul sqlite3 -> http://docs.python.org/…sqlite3.html
#26 ANV
Inak,
#faq_stred
{
background: url(http://s22.postimg.org/…aq_stred.png) repeat-x;
display:inline-block;
padding-top: 5px; //Vnútorny okraj od hora
padding-bottom: 5px; //Vnútorny okraj od dola
position: absolute;
Prečo je tu position : absolute?
Tak by sa dotyčný blok umiestnil do ľavého horného tela celého dokumentu..
Alebo je tam zase nejaký fígeľ s display: inline-block?
A prečo je zase faq_vlavo position: relative?
Ospravedlňujem sa, za moje prípadné omyly/dotazy, ale tiež nie som v CSS najviac doma.
Pokial angličtina nerobí problémy a ešte nemáte skúsenosti s iným prog.jazykom, tak môžete skúsiť toto: http://en.wikibooks.org/…r_Python_3.0
Ako som spomínal, nie je veľmi potrebné sa učiť livewires.
Lebo napríklad, kde by si tento modul používal?
V oknách tí postačí kresliace API Canvas v moduli tkinter.
A len taká drobnosť.. pokiaľ začínaš s Pythonom, tak rovno začni s verziou 3 a viac.
Vplyv 2.x sa postupom času bude zmenšovať.
Skús nastaviť padding-bottom na väčšiu hodnotu, napr. na 35 pixelov. Malo by sa to posunúť smerom nahor.
#faq_stred
{
background: url(images/icons/faq_stred.png) repeat-x;
display:inline-block;
padding-top:16px;
}
Toto ANV-ovo riešenie je správne, akurát tam zmeň to padding-top na padding-bottom.
Tak dosiahneš opačného efektu, ako ti vyšiel predtým (posunutie dole), takže sa to posunie hore.
#1 Marek Kadlčík
Myslím, že Stany Python Editor pre Python3 jednoducho nie je (aspoň v dobe, keď som toto prostredie využíval, som nič takého nenašiel.) Ako alternatívu pre SPE odporúčam Gedit. Je to síce na prvý pohľad ničím nezaujmujci textový editor, ale keď sa pohrabeš v ponuke Uložiť -> Nastavenia, a vyladíš ako je potrebné, hneď sa to zmení :)
Budeš si tam môcť vybrať farbu pozadia pri písaní kódu, spôsob zvýrazňovania syntaxe, počítadlo riadkov, ukazovateľ zalomenia riadkov (odporúčané nastaviť na štandardných 79 znakov), pythoní command line atď.
Alebo Freeze.
Skús sem vypísať/skopírovať presné znenie chyby(výnimky), ktorú si dostal.
...
...
....
....
....
Nešpecifikoval si, kde/čo s tým chceš robiť. To možno závisí aj od OS:
1) Unix (Linuxové distrá, OS X atd)
Otvoríš terminál (Ctrl-Lavý ALT-T),zadáš príkaz python [cesta k súboru] (sudiac podla kodu je to napísané v Py2).
2) Windows
Tu musí byt nainštalovaný python 2; nakolko narozdiel od unixov Python nie je sučastou štandardnej výbavy; potom by už len malo stačit odkliknutie ikonky
No, v každom prípade, mne to fičí :)
Dobrý deň/Zdravím,
hľadám nejakého ochotného človeka, ktorý sa učí Python(najlepšie 3) a bol by ochotný spolupracovať na rôznych projektíkoch v rámci učenia sa a prehlbovania znalostí Pythonu (vzájomné "vzdelávanie")
Podmienkou sú aspoň základy jazyka. (ale zase nie expert, ja ním tiež nie som :) )
V prípade záujmu môžete napísať sem do fóra, alebo na romanbeno273@gmail.com
Ďakujem
Keď využiješ geometrického sprácu GRID namiesto PACK, tak by si mohol dospieť k optimálnemu riešeniu.
Tam totiž keď umiestniš nejaký widget tam, kde už niečo je, pôvodný sa smaže a nahradí ho nový. Môžeš sa tiež pozrieť sem.
Príklad:
#! usr/bin/python3
# -*- coding: utf-8 -*-
from tkinter import Label
# toto je pre python 3, v 3.0- to nefunguje.
root = Tk()
Label(root, bg = "yellow", text = "Prvý Label").grid(row = 0, column = 0, sticky = "w,e,s,n")
# sticky = "w,e,s,n" je ekvivalent .pack(fill=BOTH)
Label(root, bg = "yellow", text = "Druhý Label").grid(row = 0, column = 0, sticky = "w,e,s,n")
root.mainloop()
Ked to spustíš, mal by si sa zobraziť len druhý Label.
Alebo, ked nechceš pomocou gridu widget nahradit, ale chceš ho úplne odstrániť:
konkretny_widget.grid_forget()
Musíš samozrejme využit správcu Grid
KIIV má pravdu, python tri zmenil mechaniku vstupu stdin.
Funkca raw_input neexistuje a funkcia input vracia VŽDY retazec.
To by ma tiež zaujímalo...
V pythone nesmieš v jednom kóde používať medzery aj tabulátory na odsadenie, to je príčina tvojej chyby.
Možno by si to mohol skúsiť prepísať ručne, alebo proste to skopírovať celé presne ako to je,
pretože mne ten kód funguje bez problémov.
Ako hovoril sairon, chyba je zrejme niekde na tvojej strane.
sorry za triplepost, ale sem tam sa vludi preklep
def vypis_prvocisla(minimum,maximum):
for x in range(minimum,maximum+1):
for h in range(2,x):
if x%h==0: break
else: yield x
prvocisla=list(vypis_prvocisla(1000,2000))
print(prvocisla)
Tá bodkočiarka na konci tam nemá byť.
A taktiež v riadku: prvocisla=list_a NEMA byt list_a ale list, čiže:
def vypis_prvocisla(minimum,maximum):
for x in range(minimum,maximum+1):
for h in range(2,x):
if x%h==0: break
else: yield x
prvocisla=list(x for x in vypis_prvocisla(1000,2000))
print(prvocisla)
To odsadenie riadkov je dôležité.
Zdravím,
asi poznáte stránku Python challenge s trápeniami intelektu návštevníkov?
Sice staršia, ale stále veľmi zaujímavá stránka.
Do koľkej úlohy ste sa dostali, a ako sa vám to celé páči, prípadne čo na to hovoríte s odstupom času?
Má to zmysel celé "absolovovať" ? (resp. snažit sa absolvovať )
Musím priznať že viaznem pri 2. úlohe (no vlastne 1., tá uplne prvá je nultá => rozohrievačka).
V žiadnom prípade však nechcem žiadnem žiadne riešenia, prídem si na to sám
Hmm..
mne to v poriadku vypísalo zoznam asi 50 čísiel...
Možno to bude verziou, mne to v Pythone 3.2.3 funguje.
Skopíruj sem celý kód, ktorý si TY skopíroval a presný výstup z konzoly/resp. v čom to robíš
Ahoj,
# -*- coding: utf-8 -*-
Toto odporúčam používat. Vdaka tomu možeš vo svojom programe používať pismenka s háčkami a čiarkami, t.j. č,dž,š,ť,á,í,é atď atď.
Po tomto kóde sa ti prvočísla nevypíšu samozrejme.
Funkcia, ktorú som napísal vyššie, je generátor, čiže jej obsah získaš až po iterovaní
Preto ak urobíš aj posledný riadok,
prvocisla=list(x for x in vypis_prvocisla(1000,2000))
a potom zavoláš tu premennu prvočísla... takto: print(prvocisla)
stane sa..
No schvalne, vyskušaj to sám, ak by ti to nefungovalo, tak vypíš aj konkrétny typ chyby (celu chybovu hlášku)
Všetky prvočísla od 1000 do 2000? hm..
# -*- coding: utf -*-
def vypis_prvocisla(minimum,maximum):
for x in range(minimum,maximum+1): # hovoril si ze chces overovat aj 2000
for h in range(2,x):
if x%h==0: break
else: yield x
# a teraz ked sa chces dostat k tym prvocislam
prvocisla=list(x for x in gen(1000,2000))
# a uz len das trebars print(prvocisla); a sledujes vysledok
Ešte by som dodal, while nemusí mat nutne podmienku na začiatku,
pomocou while True:
sada
ak podmienka:
break # vyskoci z cyklu
Ja davam prednost tomuto postupu, umožnuje lepšiu kontrolu nad cyklom.
Nie, dalsie typy cyklov uz python nemá, iba tieto dva.
Cykly su v programoch s GUI na opakovanie činností asi zbytočné.
Napíš funkciu, ktorá spracuje výsledok príkladu a napríklad k nejak vopred vytvorenej premennej pripocta 1:
premenna+=1
na zaciatok tej funkcie das dajme tomu:
if premenna==10:
urob to a to
Po každom kliknutí na tlačítko sa prevedie jeho funkcia, všetko teda musí byt jej sučastou.
Možná tu komprehenzaciu naradit generátorovou notací,
ak sa nemýlim vo väčšine prípadou je rychlejšia.
Neviem, či som správne pochopil... ale na čo su tie cykly v prubeh() ?
Tkinter je udalostami riadene programovanie, čiže by to mohlo byt urobene nejak v zmysle:
0) Tvorba kontrolnej premennej pre label, v ktorom sa bude tvorit otázka, ktoru chceš položit uživatelovi
O kontrolných premenných su tutorialy, možeš konkretne použit StringVar()
1) Tvorba labelu, kam sa dá test otázky
2) Tvorba widgetu Entry pre odpoved otázky v labele
3) Nastav hodnotu kontrolnej premennej na otázku, ktorú chceš položit
3b) Vytvor prazdny Label kam das odpoved
4) Tvorba tlačítka Další otázka pre dalšiu otázku, to tlačítko nech je na začiatku bloknuté, state=DISABLED
4b) Vytvorit funkciu, ktorá trebárs bude reagovat na stlačenie Enteru v udelátku - widgete Entry, čiže ked uživatel potvrdi odpoved Enterom čo sa ma stat
5) Ta funkcia by mohla obsahovat:
while True:
try:
obsah=int(pole_vstup.get())
if obsah==cislo_jedna*cislo_dva:
label_posudenie["text"]="Správne si odpovedal."
else:
label_posudenie["text"]="Nesprávne."
pole_vstup.configure(state=DISABLED)
tlacitko_dalsi.configure(state=NORMAL)
break # cyklus iba kvoli pripadu opakovania v pripade chyby :-)
except ValueError:
label_posudenie["text"]="Odpovedal si nesprávne" # retazec nemozme premenit na cislo
6) Teraz vytvorit funkciu ktoru dostane tlacitko Dalsi otazka:
tlacitko_dalsi.configure(state=DISABLED)
pole_vstup.configure(state=NORMAL)
kontrolna_premenna_otazky.set(text_dalsej_otazky) # toto je vlastne pseudokod
# otazku zmenis len znovuvygenerovanim cisel
Ach hej, ešte som zabudol, treba aj StringVar() pre pole pre vstup(Entry),
ked odpovieme na otazku, tak po klinuti na tlacitko_dalsi chceme aby sa obsah Entry vymazal:
premenna_entry.set("")
Ono vlastne v takychto pripadoch ani cykly netreba.
Staci to brat z hladiska, CO PRESNE sa ma stat po kliknutí na to ono tlačítko, program sa o všetko postará sam.
Vždy ked klikneme na tlačítko, proste sa znovu vykona ta funkcia.
Ahoj,
Prečo nepoužívaš komentáre? Každému kto bude od čítat to pomôže. Niektoré časti kódu sa mi zdajú nepochopiteľné.
Tak aspon nech sa vie, čo čím chceš dosiahnut.