IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Python zadání různého počtu čísel

V předchozím kvízu, Online test znalostí Python 2.7, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Aleš Fiala
Člen
Avatar
Aleš Fiala:16.6.2019 14:38

Ahoj, nevíte jestli se dá v Pythonu udělat program tak, aby mohl uživatel zadat libovolný počet čísel a stisknutím nuly dal jejich sečtení nebo tam musí pokaždé být určitý počet čísel na sečtení? Díky.

Zkusil jsem: Zkoušel jsem parsování, forcyklus a nic dalšího už nevím.

Chci docílit: Snažím se dosáhnout vzdělanosti na střední škole, ale zatím mi to moc nejde. Asi jsem přeskočil důležitý začátek.

 
Odpovědět
16.6.2019 14:38
Avatar
heavyblack1
Člen
Avatar
Odpovídá na Aleš Fiala
heavyblack1:16.6.2019 15:13

neskoušel jsem to ale mělo byto fungovat

Napadá mně akorat Regular expression
umí pracovat s textem input vraci string
by měl zajistit že když zadaš
1151+14551+14515
tak mužeš to rozdělit na časti a sečíst

https://www.w3schools.com/…on_regex.asp
https://docs.python.org/…rary/re.html

a co se tyče zachytavaní 0
když udělaš TUI pomoci curses tak mužeš zachtavat stisky kláves
https://docs.python.org/…/curses.html
https://www.youtube.com/watch?…
https://www.youtube.com/watch?…

jinak v curses user input uděláš takto
https://docs.python.org/…/curses.html#…

 
Nahoru Odpovědět
16.6.2019 15:13
Avatar
Aleš Fiala
Člen
Avatar
Aleš Fiala:16.6.2019 15:49

A anglicky taky moc neumím a ve škole mě nechtějí naučit ani jedno ani druhý když si na to doma nenajdu čas.

 
Nahoru Odpovědět
16.6.2019 15:49
Avatar
Aleš Fiala
Člen
Avatar
Odpovídá na heavyblack1
Aleš Fiala:16.6.2019 17:19

Tam už vůbec nevím o co jde, teprve jsem skončil 3. lekci prvního oddílu.

 
Nahoru Odpovědět
16.6.2019 17:19
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:17.6.2019 8:25

To zadani vypada jako typicky skolni priklad, kalkulacka v pythonu. Ocekaval bych, ze mas nejaky kod. A ze jsi zkousel googlovat nejake reseni, ze mas nejake tipy, co by mohlo fungovat, jen nevis proc nefunguje. Ve tvem zadani bohuzel nic z toho neni. Zadny kod, zadne treba top 3 moznosti, ktere by to meli delat, ale z nejakeho duvodu nefunguji (aspon treba copy-paste nejake vygooglovane).
Pusobi tak jakoby arogantne. Tady mate zadani. Ja nic delat nebudu. Vyreste to za mne. A zakaznik mi da 30.000 za to :) Tak takhle vy to nefungovalo.

No, zpet k tve otazce. Odpovim presne tak, jak byla polozena.
"jestli se dá v Pythonu udělat program ..."
Ano, da.

 
Nahoru Odpovědět
17.6.2019 8:25
Avatar
Martin Petrovaj
Tvůrce
Avatar
Martin Petrovaj:17.6.2019 11:26

Tak aby ITnetwork zase nevyzeral ako elearningová sieť, kde nikto nie je ochotný začiatočníkovi s niečím pomôcť…

Začiatočníkom síce zo zásady nedávame hotové riešenie, ani postup krok za krokom ako niečo spraviť, ale pokúsim sa pomôcť aj tak.

  1. Brali ste v škole okrem cyklu for aj cyklus while? Rozdiel medzi nimi je v tom, že kým for pracuje s konkrétnym počtom opakovaní (napr. 3, 10, 99999, len("ahoj"), x, …), while cyklus beží dovtedy, kým je splnená nejaká podmienka (napr. kým je číslo v premennej väčšie ako 0, kým sa premenná nerovná určitej hodnote, kým používateľ nezadá nejaký konkrétny vstup…). Vehemetne sa ti to snažím naznačiť, takže asi už tušíš, že práve while budeš pri tejto úlohe potrebovať :-)
  2. Vrátim sa ešte k tvojmu kódu zo screenshotu, pretože tam je niekoľko vecí nesprávne. Skúsim ti ten program preložiť "do ľudštiny" (s pár pomocnými poznámkami), možno skôr nájdeš tie chyby a napadne ti aj spôsob, ako ich opraviť (ak nie, tak zase píš).

cislo = int(input("Zadejte číslo:"))

Vypíš na obrazovku text "Zadejte číslo", zisti, čo zadá používateľ, tento jeho vstup preveď na celé číslo a ulož ho do premennej cislo. (S týmto riadkom súhlasím, ten je ešte v pohode. Ďalej to už bude horšie)

for cislo in range(999999999­999999):

Do premennej cislo postupne ukladaj hodnoty 0 až 99999999998 (pri 1. prechode cyklom bude v premennej cislo 0, pri 2. prechode cislo == 1, pri 3. cislo == 2 atď) a zakaždým vykonaj to, čo nasleduje ďalej v tele cyklu.

if cislo>0: int(input("Zadejte číslo"))

Ak je číslo v premennej cislo väčšie ako 0, tak vypíš na obrazovku text "Zadejte číslo", zisti, čo zadá používateľ a tento jeho vstup preveď na celé číslo. (Pozn.: nenapísal si ale, čo sa má s týmto medzivýsledkom stať. Takto sa len vyhodnotní a program ho hneď "zahodí")

elif cislo is 0: vysledek = cislo + 1

Ak predchádzajúca podmienka neplatí a zároveň je obsah premennej cislo 0, tak do premennej vysledek ulož hodnotu cislo + 1. (Pozn.: skús si nájsť v mojej odpovedi trochu vyššie, čo je vlastne v premennej cislo).

print(vysledek)

Vypíš obsah premennej vysledek. Aj keď je to zdanlivo jednoduchá operácia, daj si pozor na to, že ak by sa pri prvom prechode cyklom nevytvorila premenná vysledek, tak by ti program spadol s chybou (pretože taká premenná by ešte neexistovala). To by sa v tvojom konkrétnom programe mohlo stať v hypotetickom prípade, keď by sa pri prvom prechode cyklom vykonala prvá vetva if, nie elif. (Ak si to chceš vyskúšať, zmeň riadok "for cislo in range(9999)" na "for cislo in range(1, 9999)" a uvidíš, že takto ti ten program spadne)

Skús si to celé poriadne prečítať a porozmýšľaj, či ten program robí to, čo od neho očakávaš a chceš ;-)

Nahoru Odpovědět
17.6.2019 11:26
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
heavyblack1
Člen
Avatar
Odpovídá na Aleš Fiala
heavyblack1:17.6.2019 18:03

To je normalní dokonči zaklady pythonu a pak se mužeš vrhnout do pokročilích věcí a ostatních knihoven.

 
Nahoru Odpovědět
17.6.2019 18:03
Avatar
Pluhtík
Člen
Avatar
Pluhtík:17.6.2019 21:12

Ahoj, co tohle řešení?

def main():
    result = 0
    number = int(input("Zadejte cislo: "))
    while number != 0:
        result += number
        number = int(input("Zadejte cislo: "))
    print(result)

main()

Dal jsem ti to do funkce a rovnou ji volám, takže by ti to mělo jít normálně. Pokud z nějakého důvodu funkci nechceš, tak hlavičku (řádek s def ...) odstraň, ale potom zároveň musíš také odstranit řádek s main()!!!
Tvé řešení bylo špatné, protože jsi nemohl načíst libovolný počet čísel, ale pouze 9999... atd. (nevím kolik těch devítek jsi tam zadal).

edit. pokud se rozhodneš tu funkci odstranit (viz výše), tak musíš posunout zarovnání ostatních řádků vždy o jeden tabulátor doleva (zpět).

Editováno 17.6.2019 21:14
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
17.6.2019 21:12
Avatar
Aleš Fiala
Člen
Avatar
Odpovídá na Pluhtík
Aleš Fiala:18.6.2019 17:11

Ta zkusím result. To ještě neznám. :) Ve které lekci Pythonu to je?

 
Nahoru Odpovědět
18.6.2019 17:11
Avatar
Aleš Fiala
Člen
Avatar
 
Nahoru Odpovědět
18.6.2019 17:13
Avatar
Aleš Fiala
Člen
Avatar
Odpovídá na Pluhtík
Aleš Fiala:18.6.2019 17:17

Dík funguje to a teď se půjdu doučit zbylé lekce :)

 
Nahoru Odpovědět
18.6.2019 17:17
Avatar
Pluhtík
Člen
Avatar
Odpovídá na Aleš Fiala
Pluhtík:18.6.2019 17:27

result je název proměnné (v angličtině to znamená výsledek (je dobrým zvykem pojmenovávat funkce a proměnné v angličtině)). Klidně můžeš všechny result v programu změnit na jakékoliv jiné slovo/písmeno, které není zakázané.

 
Nahoru Odpovědět
18.6.2019 17:27
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.