Avatar
MadaraCZech
Redaktor
Avatar
MadaraCZech:

Ahoj,
mám tu svoji kalkulačku se schopností umocňovat zvolené číslo (a nebo b). Ovšem když zadám a, umocní se b. Když zadám b, umocní se a. Zdroják :

#Zadání čísel

a = int(input("Zadejte první číslo : ")) #První číslo
b = int(input("Zadejte druhé číslo : ")) #Druhé číslo

#Volby

print("1 - Sčítání")
print("2 - Odčítání")
print("3 - Násobení")
print("4 - Dělení")
print("5 - Umocnění") #Výpis všech voleb


#Výběr volby

volba = int(input("Volba = "))

#Výpočet

if (volba == 1):
    print("Výsledek = ", a + b)
elif (volba == 2):
    print("Výsledek = ", a - b)
elif (volba == 3):
    print("Výsledek = ", a * b)
elif (volba == 4):
    print("Výsledek = ", a / b)
elif (volba == 5):
    volbadve = input("Mám umocnit číslo a(první) nebo b(druhé) ? : ")
    if (volba == a):
            print("Výsledek = ", a * a)
    else:
            print("Výsledek = ", b * b)

#Konec
 
Odpovědět  +1 28.7.2014 1:49
Avatar
Pavel Junek
Redaktor
Avatar
Odpovídá na MadaraCZech
Pavel Junek:

Nemá tam být toto

if (volbadve == a):

?

 
Nahoru Odpovědět  ±0 28.7.2014 8:10
Avatar
hanpari
Redaktor
Avatar
hanpari:

Pacvel má pravdu.

Jinak závorky v Pythonu takto nemusíš (ani bys neměl podle PEP8) používat:

Správně je to takto:

elif volba == 5:
 
Nahoru Odpovědět  +1 28.7.2014 8:56
Avatar
MadaraCZech
Redaktor
Avatar
MadaraCZech:

Ahoj,
po čase jsem narazil na další problém a to s průměrem. Přesto, že je zadaná volba, program pokračuje dál.

retezec = "Výsledek = "
#Často používaná fráze
pokracovat = True
#Počáteční hodnota

while pokracovat == True:
#Pokud je hodnota pravda, spustit kalkulačku

    pokracovat = False

    #Zadání čísel

    a = int(input("Zadejte první číslo : ")) #První číslo
    b = int(input("Zadejte druhé číslo : ")) #Druhé číslo

    #Volby

    print("1 - Sčítání")
    print("2 - Odčítání")
    print("3 - Násobení")
    print("4 - Dělení")
    print("5 - Umocnění")
    print("6 - Počítání (0-x)")
    print("7 - Výpočet průměru") #Výpis všech voleb


    #Výběr volby

    volba = int(input("Volba = "))

    #Výpočet

    if volba == 1:
        print(retezec, a + b)
    elif volba == 2:
        print(retezec, a - b)
    elif volba == 3:
        print(retezec, a * b)
    elif volba == 4:
        if b == 0:
            print("Nelze dělit nulou !") #Kontrola (dělení nulou)
        else:
            print(retezec, a / b)
    elif volba == 5:
        volbadve = input("Mám umocnit číslo a(první) nebo b(druhé) ? : ") #Výběr umocněného čísla
        if volbadve == a:
            print("Výsledek = ", a * a) #Umocnění prvního čísla
        else:
            print("Výsledek = ", b * b) #Umocnění druhého čísla
    elif volba==6:
        a = a + 1
        b = b + 1
        for cislo in range(a):
            print(cislo)
        print("")
        for cislo in range(b):
            print(cislo)
    elif volba==7:
        volbaprumer = input("Použít zadaná čísla, nebo zadat jiná ? (A/N) : ")
        if (volbaprumer == "A") or (volbaprumer == "a"):
            print(retezec, (a + b) / 2)
        if (volbaprumer == "B") or (volbaprumer == "b"):
            cisla = []
            c = 1
            while(cisla[c]-1 > 0):
                print("Zakonči zadáním nuly")
                cisla[c] = input("Zadej ", c, ". číslo : ")
                c = c + 1


    volbatri = input("Vypočítat další příklad ? (A/N) :") #Pokračovat / nepokračovat v cyklu
    if (volbatri == "A") or (volbatri == "a"):
        pokracovat = True
    else:
        pokracovat = False

#Konec základní kalkulačky
 
Nahoru Odpovědět  +1 29.7.2014 16:03
Avatar
hanpari
Redaktor
Avatar
Odpovídá na MadaraCZech
hanpari:

Projed si to s debuggerem, ať víš, co se ti v kódu děje. Když člověk netuší, oč se snažíš, je to celkem oříšek :)

Co je třeba tohle:

while(cisla[c]-1 > 0):

Mimochodem,
i když vidím, že moji poznámku o závorkách vesele ignoruješ, dám ti gratis další tip :)

if (volbaprumer == "A") or (volbaprumer == "a"):

můžeš směle nahradit:

if volbaprumer.upper() == "A":
c = c + 1

můžeš nahradit

c += 1
Editováno 29.7.2014 18:52
 
Nahoru Odpovědět 29.7.2014 18:51
Avatar
MadaraCZech
Redaktor
Avatar
MadaraCZech:

Prostě mi to tu podmínku celou vynechá.

Použít zadaná čísla, nebo zadat jiná ? (A/N) : N
Vypočítat další příklad ? (A/N) : WTF ?!

Aktuální kód :

retezec = "Výsledek = "
#Často používaná fráze
pokracovat = True
#Počáteční hodnota

while pokracovat == True:
#Pokud je hodnota pravda, spustit kalkulačku

    pokracovat = False

    #Zadání čísel

    a = int(input("Zadejte první číslo : ")) #První číslo
    b = int(input("Zadejte druhé číslo : ")) #Druhé číslo

    #Volby

    print("1 - Sčítání")
    print("2 - Odčítání")
    print("3 - Násobení")
    print("4 - Dělení")
    print("5 - Umocnění")
    print("6 - Počítání (0-x)")
    print("7 - Výpočet průměru") #Výpis všech voleb


    #Výběr volby

    volba = int(input("Volba = "))

    #Výpočet

    if volba == 1:
        print(retezec, a + b)
    elif volba == 2:
        print(retezec, a - b)
    elif volba == 3:
        print(retezec, a * b)
    elif volba == 4:
        if b == 0:
            print("Nelze dělit nulou !") #Kontrola (dělení nulou)
        else:
            print(retezec, a / b)
    elif volba == 5:
        volbadve = input("Mám umocnit číslo a(první) nebo b(druhé) ? : ") #Výběr umocněného čísla
        if volbadve == a:
            print("Výsledek = ", a * a) #Umocnění prvního čísla
        else:
            print("Výsledek = ", b * b) #Umocnění druhého čísla
    elif volba==6:
        a = a + 1
        b = b + 1
        for cislo in range(a):
            print(cislo)
        print("")
        for cislo in range(b):
            print(cislo)
    elif volba==7:
        volbaprumer = input("Použít zadaná čísla, nebo zadat jiná ? (A/N) : ")
        if volbaprumer == "A" or volbaprumer == "a":
            print(retezec, (a + b) / 2)
        if volbaprumer == "B" or volbaprumer == "b":
            print("Zadávání se ukončuje nulou : ")
            pokracovat = "true"
            cisla = []
            c = 1
            nove_cislo = 0
            while pokracovat == "true":
                nove_cislo = input("Zadej číslo : ")
                if nove_cislo == 0:
                    break
                c += 1
                cisla.append(nove_cislo)
            for cislo in cisla:
                dohromady = dohromady + cisla[cislo]
            pocet = len(cisla)
            prumer = dohromady / pocet
            print(retezec + prumer)


    volbatri = input("Vypočítat další příklad ? (A/N) :") #Pokračovat / nepokračovat v cyklu
    if volbatri == "A" or volbatri == "a":
        pokracovat = True
    else:
        pokracovat = False

#Konec základní kalkulačky
 
Nahoru Odpovědět 29.7.2014 19:56
Avatar
gcx11
Redaktor
Avatar
Odpovídá na MadaraCZech
gcx11:

Vždyť tam máš B/b jako volbu...

 
Nahoru Odpovědět  +1 29.7.2014 20:09
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na gcx11
MadaraCZech:

Ajo. Díky, příště to nebudu dělat ve tři ráno.. :D

 
Nahoru Odpovědět  +1 29.7.2014 20:36
Avatar
gcx11
Redaktor
Avatar
Odpovídá na MadaraCZech
gcx11:

A dej si pozor na proměnnou pokračovat, máš ji tam vícekrát a zdá se, že pokaždé ovlivňuje něco jiného. Navíc ti u uživatelem zadávaného průměru nefunguje ukončení, jelikož dostaneš vstup z input() jako řetězec a ty ho porovnáváš s číslem.
Místo:
[code python]
nove_cislo = input("Zadej číslo : ")
if nove_cislo == 0:
break
[/code]
By mělo být:
[code python]
nove_cislo = int(input("Zadej číslo : "))
if nove_cislo == 0:
break
[/code]
A můžeš zkusit ošetřit zadávání čísel.

Editováno 29.7.2014 20:50
 
Nahoru Odpovědět  +2 29.7.2014 20:47
Avatar
MadaraCZech
Redaktor
Avatar
MadaraCZech:

Co zde ? Program se nemůže z cyklu dostat, i když zadám 0.

while pokracovat == "true":
                nove_cislo = input("Zadej číslo : ")
                c += 1
                cisla.append(nove_cislo)
                if nove_cislo == 0:
                    pokracovat = "false"
                    del cisla[c]

// PSÁNO PŘED PŘEČTENÍM PŘÍSPĚVKU NAHOŘE

Editováno 29.7.2014 20:50
 
Nahoru Odpovědět 29.7.2014 20:49
Avatar
gcx11
Redaktor
Avatar
Odpovídá na MadaraCZech
gcx11:

Vždyť jsem to tam psal.
Místo:

nove_cislo = input("Zadej číslo : ")
if nove_cislo == 0:
break

By mělo být:

nove_cislo = int(input("Zadej číslo : "))
if nove_cislo == 0:
break

Jelikož funkce input() ti vrací řetězec (klidně si to zkus v interaktivní konzoli), tak porovnáváš řetězec s číslem. Takže pokud zadáš nulu, tak porovnáváš, jestli "0" == 0, což samozřejmě neplatí. Proto musíš vstup přetypovat na int.

 
Nahoru Odpovědět 29.7.2014 20:55
Avatar
hanpari
Redaktor
Avatar
Odpovídá na MadaraCZech
hanpari:
for cislo in cisla:
               dohromady = dohromady + cisla[cislo]
           pocet = len(cisla)
           prumer = dohromady / pocet
           print(retezec + prumer)

můžeš nahradit:

print(sum(cisla) / len(cisla))
 
Nahoru Odpovědět 29.7.2014 21:00
Avatar
MadaraCZech
Redaktor
Avatar
 
Nahoru Odpovědět 29.7.2014 21:07
Avatar
hanpari
Redaktor
Avatar
hanpari:
pokracovat = "true"

nahrad:

pokracovat = True

a zaroven:

while pokracovat == "true":

nahrad:

while pokracovat:

No a nebo se na to celé vykašli a napiš:

while True:
 
Nahoru Odpovědět  +1 29.7.2014 21:08
Avatar
gcx11
Redaktor
Avatar
Odpovídá na hanpari
gcx11:

Anebo se to nahradit od Pythonu 3.4+ tímto:

from statistics import mean
print(mean(cisla))

Ale to už je trochu pokročilejší :)

 
Nahoru Odpovědět  +1 29.7.2014 21:08
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na gcx11
MadaraCZech:

To já zatím neumím, to se možná dozvím v tvých tutoriálech :)

 
Nahoru Odpovědět 29.7.2014 21:09
Avatar
coells
Redaktor
Avatar
Odpovídá na MadaraCZech
coells:
;-)
c = [int(x) for x in iter(lambda: input('zadej cislo (enter ukonci zadavani):'), '')]
print('prumer =', sum(c)/len(c))
 
Nahoru Odpovědět 29.7.2014 21:16
Avatar
hanpari
Redaktor
Avatar
Odpovídá na coells
hanpari:

Ty jsi srandista :) Vždyť ho odradíš. Ale jinak pěkné

 
Nahoru Odpovědět  +1 29.7.2014 22:01
Avatar
MadaraCZech
Redaktor
Avatar
MadaraCZech:

Tento problém mě trápí skoro u každého programu. Co dělám špatně ? Vždy píše "out of range", to vím, co znamená, prostě píšu do pozice pole, které není.

text = list(input("Zadej zprávu : "))
i = 0

for znak in text:
    text[i] = znak
    ord(znak[i])
    i += 1

print(text)
 
Nahoru Odpovědět 30.7.2014 22:57
Avatar
hanpari
Redaktor
Avatar
Odpovídá na MadaraCZech
hanpari:

No problém je v tom, že je naprostá záhada, o co se pokoušíš :) Já to opravdu nevím. Možná jsi potřeboval tuto konstrukci:

for i, znak in enumerate(text):
    print(i, znak)
 
Nahoru Odpovědět 31.7.2014 6:14
Avatar
gcx11
Redaktor
Avatar
Odpovídá na MadaraCZech
gcx11:

A co má ten program dělat?

 
Nahoru Odpovědět 31.7.2014 8:17
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na gcx11
MadaraCZech:

Má to být šifrovač zpráv. Prostě převod písmen na čísla.

 
Nahoru Odpovědět 31.7.2014 16:29
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na MadaraCZech
Filip Šohajek:

V tom pripade :

#!/usr/bin/python3
text = list(input("Zadej zprávu : "))
for i, znak in enumerate(text):
    text[i] = str(ord(znak))

print(" ".join(text))
 
Nahoru Odpovědět 31.7.2014 16:50
Avatar
gcx11
Redaktor
Avatar
gcx11:

Pak by to mělo být asi takhle:

text = input("Zadej zprávu: ")
vysledek = []

for znak in text:
    vysledek.append(ord(znak))

print(vysledek)

Můžeš se inspirovat tady:
http://www.itnetwork.cz/…ezce-zaklady

 
Nahoru Odpovědět  +1 31.7.2014 16:56
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na gcx11
MadaraCZech:

Díky. Jak přemýšlet správně ? :D Protože někdy to prostě dopadá takhle.

 
Nahoru Odpovědět 31.7.2014 19:34
Avatar
hanpari
Redaktor
Avatar
hanpari:

Tohle mne jen tak napadlo, ale to rozhodně není nic, nad čím by sis měl lámat hlavu. To je taková prasečina :) Jen pro zajímavost:

>>> text = list(input().encode())
Tohle děti doma nedělejte :)
>>> text
[84, 111, 104, 108, 101, 32, 100, 196, 155, 116, 105, 32, 100, 111, 109, 97, 32, 110, 101, 100, 196, 155, 108, 101, 106, 116, 101, 32, 58, 41]
 
Nahoru Odpovědět 31.7.2014 20:18
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 26 zpráv z 26.