Diskuze: Při umocnění se proměnné obrátí

Tvůrce

Zobrazeno 26 zpráv z 26.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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
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
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
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.
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
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.
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))
Anebo se to nahradit od Pythonu 3.4+ tímto:
from statistics import mean
print(mean(cisla))
Ale to už je trochu pokročilejší
To já zatím neumím, to se možná dozvím v tvých tutoriálech
c = [int(x) for x in iter(lambda: input('zadej cislo (enter ukonci zadavani):'), '')]
print('prumer =', sum(c)/len(c))
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)
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)
Má to být šifrovač zpráv. Prostě převod písmen na čísla.
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))
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
Díky. Jak přemýšlet správně ? Protože někdy to prostě
dopadá takhle.
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]
Zobrazeno 26 zpráv z 26.