Několikanásobné mocniny – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Několikanásobné mocniny – Python – Fórum – Programujte.comNěkolikanásobné mocniny – Python – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Marek Kadlčík
~ Anonymní uživatel
25 příspěvků
7. 6. 2013   #1
-
0
-

Dobrý den

Mám jeden problém, potřebuji z řetězce, ve kterém je příklad, pomocí eval() dostat výsledek. Pokud je vpříkladě např.: 2², pomocí replace z toho udělám 2**2, nato použiju eval() a vyjde mi správný výsledek, v dalším případě třeba 2² ^ ² ^ ² si znovu přepíšu na 2**2**2**2, ale python už mocní s předností a proto místo 2**8 počítá 2**16 a vyjde naprosto zkreslený výsledek. Mohl by mi někdo poradit? ;)

Nahlásit jako SPAM
IP: 212.96.185.–
Reklama
Reklama
fo
~ Anonymní uživatel
37 příspěvků
7. 6. 2013   #2
-
0
-

#1 Marek Kadlčík
(2**2)**2 = 16

((2**2)**2)**2 = 256

Zátvorky sú ešte silnejšie ako mocniny

Do výrazov môžeš dávať len gulaté zátvorky.

Nahlásit jako SPAM
IP: 188.167.34.–
Marek Kadlčík
~ Anonymní uživatel
25 příspěvků
7. 6. 2013   #3
-
0
-

#2 fo
Ano, děkuji a o tom vím, ale v tomhle případě bych potřeboval způsob, jak napsat, aby do daného příkladu (jako řetězce) program doplnil automaticky závorky... A o akovém způsobu nevím, takže problém mi přetrvává... :

Nahlásit jako SPAM
IP: 212.96.185.–
fo
~ Anonymní uživatel
37 příspěvků
7. 6. 2013   #4
-
0
-

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.

Nahlásit jako SPAM
IP: 188.167.34.–
fo
~ Anonymní uživatel
37 příspěvků
7. 6. 2013   #5
-
0
-

Hmm, povedal by som, že ten druhý kód bude to, čo hľadáš :)

Nahlásit jako SPAM
IP: 188.167.34.–
fo
~ Anonymní uživatel
37 příspěvků
7. 6. 2013   #6
-
0
-

#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: "))))
Nahlásit jako SPAM
IP: 188.167.34.–
fo
~ Anonymní uživatel
37 příspěvků
7. 6. 2013   #7
-
0
-

#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 :(

Nahlásit jako SPAM
IP: 188.167.34.–
yetty
~ Redaktor
+5
Super člen
7. 6. 2013   #8
-
0
-

#7 fo
Kdyby ses zaregistroval, mohl bys své odpovědi upravovat ;)

Nahlásit jako SPAM
IP: 46.23.51.–
Marek Kadlčík
~ Anonymní uživatel
25 příspěvků
7. 6. 2013   #9
-
0
-

#7 fo
Ano děkuji, tohle je přesně to co jsem hledal.... Opravdu jste mi pomohl, včera jsem se s tím bezvýsledně patlal 2 hodiny :D Teď to jdu pochopit... :D

Nahlásit jako SPAM
IP: 212.96.185.–
fo
~ Anonymní uživatel
37 příspěvků
7. 6. 2013   #10
-
0
-

#9 Marek Kadlčík
Čo konkrétne sa ti zdá nejasné? :)

Nahlásit jako SPAM
IP: 188.167.34.–
Marek Kadlčík
~ Anonymní uživatel
25 příspěvků
7. 6. 2013   #11
-
0
-

#7 fo
Zkrátil jsem si Váš kód na:

---

import functools, operator

print(functools.reduce(operator.pow, list(int(x) for x in input("Příklad: ").replace("*",""))))

---

... A funguje mi skvěle, děkuji ;)

Nahlásit jako SPAM
IP: 212.96.185.–
Marek Kadlčík
~ Anonymní uživatel
25 příspěvků
7. 6. 2013   #12
-
0
-

#10 fo
Už nic děkuji :D

Nahlásit jako SPAM
IP: 212.96.185.–
Fo0
Duch
7. 6. 2013   #13
-
0
-

#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

Nahlásit jako SPAM
IP: 188.167.34.–
Marek Kadlčík
~ Anonymní uživatel
25 příspěvků
9. 6. 2013   #14
-
0
-

#13 Fo
Jo jo, děkuju, asi to bude rychlejší :D

Nahlásit jako SPAM
IP: 212.96.185.–
Fo0
Duch
9. 6. 2013   #15
-
0
-

Tá list() je tam zbytočná, tak žiadne asi :)

Nahlásit jako SPAM
IP: 188.167.34.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 31 hostů

Podobná vlákna

Mocniny — založil Buckyx

C++ mocniny a odmocniny — založil Phoenix

Mocniny a odmocniny — založil Scruffy

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý