tag:blogger.com,1999:blog-7850634310261594358.post7126237240841453191..comments2024-03-01T07:17:27.493+00:00Comments on Programação com Python: Problema 2.18Ernesto Costahttp://www.blogger.com/profile/11136340077636547515noreply@blogger.comBlogger9125tag:blogger.com,1999:blog-7850634310261594358.post-68783359713209698332009-10-15T13:39:16.624+01:002009-10-15T13:39:16.624+01:00Eu não estava confusa. Funciona, claro. Só falta f...Eu não estava confusa. Funciona, claro. Só falta fazer antes o import do módulo string. Ha sempre muitas maneiras de resolver um problema e outras tantas de aprender...Ernesto Costahttps://www.blogger.com/profile/11136340077636547515noreply@blogger.comtag:blogger.com,1999:blog-7850634310261594358.post-40666357877097690362009-10-14T10:58:32.334+01:002009-10-14T10:58:32.334+01:00Estou confusa.
Não chegaria:
def stuff(cadeia):
...Estou confusa.<br />Não chegaria:<br /><br />def stuff(cadeia):<br /> cadeia=string.split(cadeia)<br /> cadeia=string.join(cadeia)<br /> return cadeia<br /><br />...?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-7850634310261594358.post-38966119963147948122009-10-13T00:17:29.467+01:002009-10-13T00:17:29.467+01:00Pois, percebo que se houverem muitos espaços, o ci...Pois, percebo que se houverem muitos espaços, o ciclo while repete-se muitas vezes, muito maior que o ciclo for na sua solução.Milton Sêconoreply@blogger.comtag:blogger.com,1999:blog-7850634310261594358.post-38801455390355949612009-10-12T21:22:28.724+01:002009-10-12T21:22:28.724+01:00A solução do Milton é interessante ... mas pouco e...A solução do Milton é interessante ... mas pouco eficiente computacionalmente.Ernesto Costahttps://www.blogger.com/profile/11136340077636547515noreply@blogger.comtag:blogger.com,1999:blog-7850634310261594358.post-34914039761861629812009-10-12T20:30:27.874+01:002009-10-12T20:30:27.874+01:00Creio que existe uma solução ainda (e muito) mais ...Creio que existe uma solução ainda (e muito) mais fácil. É a seguinte usando um ciclo while:<br /><br />def espacos(cadeia):<br />....while ' ' in cadeia:<br />........cadeia = cadeia.replace(' ',' ')<br />....return cadeia<br /><br />O que faz é que enquanto existirem dois espaços seguidos (' '), o programa substitui-os apenas por um (' '). Penso que resulta sempre.<br /><br />PS: Eu coloquei 2 espaços seguidos mas penso que ao postar aqui no blog eles passam a 1, mas ideia está lá.Milton Sêconoreply@blogger.comtag:blogger.com,1999:blog-7850634310261594358.post-58929820887144154402009-10-11T16:25:56.891+01:002009-10-11T16:25:56.891+01:00Tiago(1) e Marco: vejam a resposta que dei noutro ...Tiago(1) e Marco: vejam a resposta que dei noutro post sobre o problema.<br /><br />Tiago(2): As soluções são sempre mais do que uma. Por vezes é difícil dizer a que é melhor. Começa pelo significado de "ser melhor": tempo de execução, espaço ocupado pelo programa, elegância, concisão, etc... Mas uma coisa é certa: quanto mais dominarmos as técnicas, independentemente da linguagem melhor. Depois é saber: tenho isto na minha linguagem?Ernesto Costahttps://www.blogger.com/profile/11136340077636547515noreply@blogger.comtag:blogger.com,1999:blog-7850634310261594358.post-86571956820330475942009-10-11T11:57:13.817+01:002009-10-11T11:57:13.817+01:00Ora ai esta o problema de nao conhecer o Python (e...Ora ai esta o problema de nao conhecer o Python (e de nao saber ainda programar, em geral...) !<br />Existe, regra geral, sempre uma maneira mais simples de fazer as coisas, que desconheco (regra geral, por funcoes e modulos que desconheco!)Tiago Roldãohttps://www.blogger.com/profile/14873270862264411910noreply@blogger.comtag:blogger.com,1999:blog-7850634310261594358.post-14383591133030737562009-10-11T08:11:27.591+01:002009-10-11T08:11:27.591+01:00Creio que seria mais simples usar um ciclo for com...Creio que seria mais simples usar um ciclo for com somente 1 if.<br />**********<br />def espaco(frase):<br /> ppr=''<br />frase=string.strip(frase)<br />for i in range (len(frase))<br />if ((ord(frase[i])) <> 32) or ((ord(frase[i]) == 32) and (ord(frase[i-1]) <> 32)):<br />ppr=ppr+frase[i]<br />print ppr<br />**********<br />após aproveitar a boleia do string.strip(),<br />cada caracter da cadeia inserida é avaliado segundo o seu valor na tabela ascii: passa se for diferente de 32(espaco) ou, a ser igual, também passa se o caracter antecessor for tudo menos outro espaço.<br /><br />Obviamente que, ao invés de utilizar a tabela ascii, poderia fazer uma comparação directa com " ".Marco Pereiranoreply@blogger.comtag:blogger.com,1999:blog-7850634310261594358.post-2214118337939000192009-10-11T04:22:48.014+01:002009-10-11T04:22:48.014+01:00Professor, partilho uma hipotese alternativa:
Ao i...Professor, partilho uma hipotese alternativa:<br />Ao invés de criar um "filtro" que varia com o aparecimento de um espaco, podemos apenas comandar que de um dado conjunto de espacos, apenas o ultimo será copiado, ou seja, apenas o espaco cujo caracter que o siga NAO seja um espaco:<br /><br />def blank(frase):<br /> ..import string<br />..newfrase = ''<br />..frase = string.strip(frase)<br />..for i in range(0,len(frase)):<br />....if (frase[i]==' '):<br />......if (frase[i+1]!=' '):<br />........newfrase=newfrase+frase[i]<br />....else:<br />......newfrase=newfrase+frase[i]<br />..return newfrase<br /><br />O unico problema sera que so funciona SEM espaco no fim.. o loop, como esta, nao funciona sem o string.strip, daria erro ao pedir um caracter[i+1] inexistente..Tiago Roldãohttps://www.blogger.com/profile/14873270862264411910noreply@blogger.com