Ir para o conteúdo
msmsms

transformar cadeia

Mensagens Recomendadas

msmsms

boas

tenho a seguinte cadeia

c = 'ab[4c]'

e quero transforma-la de maneira a ficar com abcccc

ou seja, multiplicar de alguma forma o 4 em c

como faço?

Editado por msmsms

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Gnrtuga

Boas, quando olhei a primeira vez parecia-me que tinhas uma lista um bocado estranha, mas depois vi que afinal tens uma string..

Não deve ser bem isto que queres, mas aqui fica:

cria 3 listas vazias

faz um for loop por cada carácter na string,

dentro desse for loop faz um if (ex: if not in 'abcd..'), e faz um append à primeira lista,

depois utilizas o ultimo valor da lista para multiplicares e adicionares a segunda lista para ficares ficares com cccc,

finalmente concatenas as duas primeiras na terceira..

Confuso? (confeso que eu também me perdi um bocadinho, quando comecei a escrever só tinha uma lista :)...)

Boa Sorte!

edit: quando comecei a escrever o thoga31 ainda não tinha dito nada, e o meu raciocínio parecia-ME ter lógica... lol

Editado por Gnrtuga

Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ffunenga
Citação
faz um for loop por cada carácter na string,

Gnrtuga espero que n leves a mal mas: nem pensar! :) aliás, é importante colocar essa hipotese na mesa mas, posteriormente, decidir que não é uma boa ideia por se complicar muito facilmente. (Embora, seja a solução mais obvia para uma primeira analise)

Na minha opinião, o melhor para resolver este tipo de problemas é o modulo re [1] (no entanto, tenho pouca experiência com este modulo).

Em primeiro lugar, no interior dos parenteses rectos está uma linguagem propria. Mesmo que seja só:

"[" (inteiro a definir o numero de repetições) (string para repetir) "]"
eu não reconheço este tipo de gerador de strings.

Com isto em mente, eu diria para procurares com este padrão:


>>> exemplo1 = "ab[4c]de[5f]gh"
>>> exemplo2 = "As pe[2s]oas co[2r]em para o Ar[2e]iro"
>>> import re
>>> p = re.compile(r"\[\w*\]")
>>> for m in p.finditer(exemplo1): print m.group()[1:-1], m.span()
...
4c (2, 6)
5f (8, 12)
>>> for m in p.finditer(exemplo2): print m.group()[1:-1], m.span()
...
2s (5, 9)
2r (15, 19)
2e (31, 35)
Agora tens que hackar (não sei qual é a palavra portuguesa para este verbo... artimanhar?) os ciclos for de forma a extraires o número. Algo do género:

>>> exemplo3 = "O número de série é o [5F12g7]6B"
>>> p2 = re.compile(r"[-+]?\d+")
>>> for m in p1.finditer(exemplo3):
...	 generator = m.group()[1:-1]
...	 g = p2.match(generator)
...	 print m.group(), "->", int(g.group()), "vezes", generator[g.end():], "=", int(g.group())*generator[g.end():]
...
[5F12g7] -> 5 vezes F12g7 = F12g7F12g7F12g7F12g7F12g7
e substituires a string gerada na string original.

Tenho a sensação que existe um metodo dos objectos p1 e p2 para fazer a substituição directamente, mas n sei como se usa...

[1] http://docs.python.org/2/howto/regex.html#regex-howto

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Gnrtuga

ffunenga , claro que não levo a mal (se receberes alguma multa para pagar não fui eu.. :) ) , como disse a MIM parecia-me ter lógica..lol

Nunca tinha ouvido falar deste modulo... e muito sinceramente nem estou a perceber a utilidade.. mas acredito que deve ter.. :)


Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

O módulo re é poderosíssimo. Mas acho que o @msmsms ainda não está exactamente numa fase de o poder utilizar.

Além disso, acho que este exercício é excelente para treinar, de uma forma geral, a criação de mini-parsers e que pode ser facilmente transcrito noutras linguagens.

Resolvi o problema proposto não com um for mas sim com um while. Claro que não é universal e considera que qualquer string que tenha [] é uma string com "código". Seria necessário fazer um pequeno controlo para saber quando é que os [] eram código ou não.

Como digo, é um exercício muitíssimo interessante para nos obrigar a raciocinar.


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.