Codigo funciona so no python 3.0 e não no python3.2 [RESOLVIDO]

1. Codigo funciona so no python 3.0 e não no python3.2 [RESOLVIDO]

emanuel douglas sousa costa
o.outro.cara

(usa Ubuntu)

Enviado em 08/12/2011 - 01:02h

Estou estudando programação e peguei um livro para exercitar logica no caso esse livro ensina programação com a linguagem python. o meu problema é: uso Ubuntu e Ruindows, escrevi o seguinte codigo de um exercicio proposto no livro:


scores = {}
result = open("res.txt")
for line in result:
(name, score) = line.split()
scores[score] = name
result.close()

print("The top score were -- ")
for each_score in scores.keys():
print("Surfer " + scores[each_score] + "scored" + each_score)

[color=red]o arquivo "res.txt" esta na mesma pasta[/color]
[color=blue]conteudo do arquivo res.txt[/color]

Johnny 8.65
Juan 9.12
Joseph 8.45
Stacey 7.81
Aideen 8.05
Zack 7.21
Aaron 8.31

executei esse codigo no pyton do windows que é o 3.0 e funcionou normal, mas quando executo no python do linux que é o 3.2 ele exibe o seguinte erro

Traceback (most recent call last):
File "/home/colossus/Área de trabalho/pythons/cap4.py", line 4, in <module>
(name, score) = line.split()
ValueError: need more than 0 values to unpack

aqui um print:
http://img51.imageshack.us/img51/4148/capturadetelaem20111208.png

O livro é Use a Cabeça Programação


  


2. Re: Codigo funciona so no python 3.0 e não no python3.2 [RESOLVIDO]

fabricio erdmann
fabricio.er

(usa Debian)

Enviado em 09/12/2011 - 00:13h

copiei o código e identei ele como imaginei como o código deveria funcionar e aqui ele rodou sem problemas tanto no python3.2 e no python2.7

use o [ code ] em vez do [ quote ] pois assim ele manterá o código certo

veja:

scores = {}
result = open("res.txt")
for line in result:
(name, score) = line.split()
scores[score] = name
result.close()

print("The top score were -- ")
for each_score in scores.keys():
print("Surfer " + scores[each_score] + "scored" + each_score)



3. Re: Codigo funciona so no python 3.0 e não no python3.2 [RESOLVIDO]

Antonio Thomacelli
tonnytg

(usa Outra)

Enviado em 09/12/2011 - 00:20h

Aproveitando o python requer espaços praticamente exatos também:


for line in result:
(name, score) = line.split()
scores[score] = name
result.close()

É diferente de:

for line in result:
(name, score) = line.split()
scores[score] = name
result.close()
if....



4. Re: Codigo funciona so no python 3.0 e não no python3.2 [RESOLVIDO]

fabricio erdmann
fabricio.er

(usa Debian)

Enviado em 09/12/2011 - 00:23h

olhei novamente seu post e no código e notei que o problema esta na linha
	(name, score) = line.split() 


então imaginei que o arquivo é que tinha problema e ao ver o post percebi que tem uma linha em branco no inicio do arquivo que eu não havia colocado e ao colocá-la vi que é ela que faz o programa dar esse bug

e ao dar um print na função line.split() vemos que ela retorna uma lista vazia nessa linha e isso gera problema pois você esta tentando coloca apenas uma lista em duas variáveis


===========edit===============

tonnytg
ele colocou, vi isso pq no email ele vem com a identação mas aqui como ele usou o quote ficou sem


5. Re: Codigo funciona so no python 3.0 e não no python3.2 [RESOLVIDO]

emanuel douglas sousa costa
o.outro.cara

(usa Ubuntu)

Enviado em 12/12/2011 - 09:51h

Os scripts estão indentados sim. só que na hora de colocar aqui na comu eles deram esse problema quando fui colocar no post, mas tem umas imagens do meu pc para conferir no propio post, as imagen tão bem nitidas é so olhar. E aproposito uso o python no windows e no linux, eu instalei três vesões no Ubuntu o python3.2, python3.0 e python2.5 tentei fazer o codigo rodar nas três versões e nada, mas quando tentei fazer ele rodar no windows ele funciona perfeitamente,
No windows so uso a versão python3.0
Windows não apresenta erro algum. Fui em outra comunidade chamada Laboratorio De Garagem e o cara me explicou que o problema é com o acessoo ao arquivo,Ele me falou que, o acesseo de arquivos no windows é de uma forma e no linux é de outra :/ não fiquei muito certo do que ele disse.

Tentei fazer varias alterações do modo de acesso mas nada adianta, tipo tentei acessar usando o diretorio raiz mas da o mesmo erro sempre, o [*****] que que no windows funciona normal :-/

o acesso tentei dessas forma

result = open("/home/colossus/Áreaz\ de\ trabalho/python/res.txt") 


O problema persiste

O objetivo do split é cortar a linha que no caso tem duas palavras e atribuir essas duas palavras, uma em cada variável e depois usar essas variáveis para criar um hash.

como mostrado no prorpio programa que tme uma logica bem simples :|


6. Re: Codigo funciona so no python 3.0 e não no python3.2 [RESOLVIDO]

fabricio erdmann
fabricio.er

(usa Debian)

Enviado em 12/12/2011 - 19:03h

eu já respondi antes a problema, quando o split não tem nada para dividir(string nula como no caso gerado por uma linha em branco) ele retorna zero e você esta tentando colocar apenas um valor(zero) em duas variáveis e isso da problema.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts