» Poradna » Programy

Python - break mi znovu nespustí cyklus

 |   |  Microsoft Windows 7 Chrome 80.0.3987.116

Dobrý večer,rád bych vás požádal o pomoc. Mám program a vstup (viz soubory). Myšlenka je taková, že mám určitý rozpočet a seznam cen zboží ze vstupu. Cílem programu je vyházet "z košíku" (seznamu) nejmenší počet věcí, abych se vešel do rozpočtu (poctu_korun).Načtu všechny potřebné údaje, srovnám seznam cen a v druhém cyklu se snažím pomocí .pop() odstraňovat nejdražší položky, dokud se nevejdu do rozpočtu. Moje představa byla taková, že tento if cyklus se bude opakovat, dokud nebude nesplněna podmínka a přejde se na "else" a to tím, že cena zboží dohromady bude nižší nebo rovna rozpočtu (poctu_korun).Tato myšlenka fungovala dobře - problém je, že sice odebrala největší částku, ale pouze jednou. Dál se cyklus už neopakoval.Veškerou pomoc bych velmi ocenil a omluvte mou smělost, ale vůbec si s tím nevím rady, i když jsem si jistý, že problém je ukrytý v nějaké opravdu banální věci (mojí hlouposti).Předem děkuji.obrázky:https://pasteboard.co/IVrBVb9.png (program)https://pasteboard.co/IVrCqXh.png (vstup)soubor:https://pastebin.com/etYjuZGb

Odpovědi na otázku

avatar
 | Microsoft Windows 10 Firefox 68.0

Ten break patri do te vetve "else:", protoze cyklus chces ukoncit v okamziku, kdy se ti ty polozky do ceny vejdou. Je ale nerozumne to resit pomoci for ... range(10). Lepsi by to bylo resit pomoci cyklu "while dohromady > pocet_korun:". Jo a samozrejme musis tu promennou "dohromady" znovu spocitat po kazde zmene seznamu, tj. uvnitr cyklu. Jinak se ti nebude menit a muzes vyhazovat polozky jak chces, porad ti to nebude vychazet.Priste ten kod dej prosim na https://pastebin.com - lustit to z obrazku je celkem neprijemne.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 80.0.3987.116

Děkuji za odpověď, jdu to pozměnit. Ta 10 tam byla jenom pro jakýsi test, ale samozřejmě máte pravdu. Odkaz na Pastebin by měl být hned pod obrázky, jestli není vidět, tak se omlouvám, asi jsem pokazil nahrání, takže snad se ukáže tady - https://pastebin.com/etYjuZGb.

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 10 Firefox 68.0

Pardon, odkaz na Pastebin jsem prehlidnul.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 77.0.3865.121

Sice python moc neznám, ale z obecného hlediska ti příkaz break funguje správně. Break slouží k tomu aby cyklus přestal cyklit a program pokračoval až za cyklem. Je to prostě kompletní ukončení toho cyklu, a to je přesně to co ti to udělá.Možná jsi chtěl použít příkaz continue, ten funguje trochu jinak. Ten ukončí jen aktuální otočku cyklu, aby se nevykonal zbývající kód v cyklu. Následně cyklus pokračuje další iterací. Jenže ve tvém případě to nemá smysl, protože máš break na konci cyklu, takže tam psát continue nemá smysl. S ním i bez něj se to bude chovat stejně.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 80.0.3987.116

Ahoj, Jirka Ti myslím poradil, ale ještě takový podnět k logice celé aplikace. Píšeš, že se snažíš docílit výsledku s minimem vyhozených položek, na což jdeš samo o sobě v základu správně. Ovšem pro optimálnější výsledek by bylo ještě dobré porovnat alespoň počet vyhozených položek při výchozím řazení od nejdražší vs. při řazení od nejlevnější.Pro ukázku jednoduchý příklad. Můžeš mít rozpočet 2000 a položky za 1000 + 500 + 250 + 200 + 100 (2050). Když vyhodíš tu za 1000, budeš mít zůstatek rozpočtu 950, ale pokud vyhodíš položku za 100, bude tvůj zůstatek 50 při stejném množství položek. Rozpočet využiješ optimálněji.Samo sebou to je ještě složitější problém, protože při položkách 1000 + 500 + 250 + 200 + 80 + 20 by nebylo optimální ani 1000 a ani 20 + 80 (2 položky řazené od nejnižší), ale jen odstranit položku za 80 se zůstatkem 30.Je to fakt jen postřeh, ovšem třeba Ti to k něčemu pomůže.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Python, Break, Cyklus, Myšlenka, Pastebin


Určitě si přečtěte

Z rozmazané šmouhy krásná fotka. Takhle kouzlí nová umělá inteligence MyHeritage

Z rozmazané šmouhy krásná fotka. Takhle kouzlí nová umělá inteligence MyHeritage

** MyHeritage slibuje nejlepší neuronovou síť pro vylepšování fotek ** Funguje tím líp, čím horší fotku upravuje ** Otestovali jsme desítky různých snímků

Marek Lutonský, Lukáš Václavík | 36

Na měsíc jsem opustil Google a potupně se zase vrátil zpět (komentář)

Na měsíc jsem opustil Google a potupně se zase vrátil zpět (komentář)

** Zkusil jsem se zbavit závislosti na vyhledávači od Googlu ** Jako alternativy posloužily Bing, Seznam a DuckDuckGo ** Mají své silné stránky, ale i nepřekonatelná negativa

Lukáš Václavík | 54

Jak nahradit webkameru: jde to telefonem, zadarmo a s lepším obrazem

Jak nahradit webkameru: jde to telefonem, zadarmo a s lepším obrazem

** Koronavirus donutil mnohé zaměstnance pracovat z domova ** V souvislosti s tím vzrostla poptávka po webových kamerách ** Webkameru ale nemusíte kupovat – stačí mobil a aplikace!

Karel Kilián | 15

Nejlepší programy z roku 2000: Další várka zapomenutých legend, které jste měli v PC

Nejlepší programy z roku 2000: Další várka zapomenutých legend, které jste měli v PC

** Pokračujeme ve vzpomínání na prehistorické programy ** Pročetli jsme vaše tipy v diskuzi ** A všechny ty vykopávky spustili na Windows 2000

Jakub Čížek | 72


Aktuální číslo časopisu Computer

Megatest SSD s kapacitou 1 TB

Srovnávací test robotických vysavačů

Vybíráme nejlepší telefony na trhu

Jak zlepšit zvuk televize