Prefix do infix – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Prefix do infix – Python – Fórum – Programujte.comPrefix do infix – Python – Fórum – Programujte.com

 

rontorto
~ Anonymní uživatel
6 příspěvků
5. 12. 2019   #1
-
0
-

 Ahoj, mám problém s prefixu do infixu kodem
Poteřbuji změnit kod tak, aby bral inputy v tomto stylu: +-4 2 3 nebo *4-2 3
s tím, že output musí být bez zbytečných závorek ............ 4-2+3 nebo 4*(2-3)

Protože kod funguje,ale vkládá závorky mezi všechny operátory (např (7+7)+7)+7)

Dokážete mi pomoci? Díky

class Calculator:
    def __init__ (self):
        self.stack = []
 
    def push (self, p):
        if p in ['+', '-', '*', '/']:
            op1 = self.stack.pop ()
            op2 = self.stack.pop ()
            self.stack.append ('(%s %s %s)' % (op1, p, op2) )
        elif p == '!':
            op = self.stack.pop ()
            self.stack.append ('%s!' % (op) )
        elif p in ['sin', 'cos', 'tan']:
            op = self.stack.pop ()
            self.stack.append ('%s(%s)' % (p, op) )
        else:
            self.stack.append (p)
 
    def convert (self, l):
        l.reverse ()
        for e in l:
            self.push (e)
        return self.stack.pop ()
 
c = Calculator ()
Nahlásit jako SPAM
IP: 2a02:8308:23d:fb00:9d44:d631:51b5:df0f...–
gna
~ Anonymní uživatel
1891 příspěvků
5. 12. 2019   #2
-
0
-

Nedávej závorky kolem výrazu, ale kolem jeho operandů a jen pokud je to potřeba.

Nahlásit jako SPAM
IP: 213.211.51.–
rontorto
~ Anonymní uživatel
6 příspěvků
8. 12. 2019   #3
-
0
-

#2 gna
díky za hint, teď ještě otázka, protože si nemůžu vzpomenout

 mám tento input:

/-*+*++**85 27 39 87 65 65 37 63 91

a netuším, jak ho zakomponovat do kodu, protože klasicky využívám tuto formu:

a = list(map(str, input().split()))

ta ale funguje pouze když by byly u všeho mezery. Navíc se můež stát situace, kdy operátory budou 2 po sobě jdoucí násobení, které se oddělují mezerou (/-*+*++* *85 27 39 87 65 65 37 63 91)

Nahlásit jako SPAM
IP: 2a02:8308:23d:fb00:e427:2939:ee54:2961...–
rontorto
~ Anonymní uživatel
6 příspěvků
8. 12. 2019   #4
-
0
-

#3 rontorto
popřípadě input  +*-73+54 64 52/*97 22 36

Nahlásit jako SPAM
IP: 2a02:8308:23d:fb00:e427:2939:ee54:2961...–
gna
~ Anonymní uživatel
1891 příspěvků
8. 12. 2019   #5
-
0
-

Asi bych použil regex. Skupina čísel, nebo operátor.

>>> s = '/-*+*++**85 27 39 87 65 65 37 63 91'
>>> re.findall(r'\d+|[-+*/]', s)
['/', '-', '*', '+', '*', '+', '+', '*', '*', '85', '27', '39', '87', '65', '65', '37', '63', '91']
Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1891 příspěvků
8. 12. 2019   #6
-
0
-

číslic

Nahlásit jako SPAM
IP: 213.211.51.–
rontorto
~ Anonymní uživatel
6 příspěvků
8. 12. 2019   #7
-
0
-

#6 gna
skoro už funguje, jen jedna záležitost, na kterou jsem zapomněl naspat. Mám tam i operátor s mocninou


/-*+*++**85 27 39 87 65 65 37 63 91
............^............
............I.............

je mocnina

rozdíl mezi mocninou a 2 po sobě jdoucíma násobeníma je ten, že mocnina je je kalsicky ** a 2x násobení p osobě má mezeru... * *

Nahlásit jako SPAM
IP: 2a02:8308:23d:fb00:e427:2939:ee54:2961...–
gna
~ Anonymní uživatel
1891 příspěvků
8. 12. 2019   #8
-
0
-

   

r'\d+|\*\*|[-+*/]'
Nahlásit jako SPAM
IP: 213.211.51.–
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, 11 hostů

 

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