Erro

Secção dedicada à linguagem de programação favorita dos quarkianos: Python!

Erro

Mensagempor filipematos em Terça Jun 28, 2011 12:15 pm

Olá quarkianos :),
Criei uma programa em python muito simples, que escolhe uma palavra entre muitas e mostra-a baralhada. Cabe ao utilizador conseguir descobrir que palavra é, uma espécie de jogo. No entanto, quando tento executar o programa aparce-me esta mensagem de erro:


Eu não sei o que isto quer dizer... Se alguém me pudesse ajudar
Anexos
tab.JPG
Erro
tab.JPG (27.95 KiB) Visualizado 3465 vezes
"If I have seen further than others, it is by standing upon the shoulders of giants" - Isaac Newton

“We build too many walls and not enough bridges.” - Isaac Newton
filipematos
down-Quark!
down-Quark!
 
Mensagens: 280
Registado: Sábado Jun 25, 2011 4:48 pm
Localização: Lisboa

Re: Erro

Mensagempor Bruno Oliveira em Terça Jun 28, 2011 2:16 pm

Olá caro Filipe Matos,

Vejo que estás agora a começar a aprender Python.

O Python tem uma característica interessante, que é a de a indentação do código ser obrigatória. Indentação é a organização visual do código, por exemplo, ao escreveres um ciclo for, tens tipicamente (escrever os numeros de um a dez):

Código: Seleccionar Todos
for numero in range(1,11):
      print numero


O statement print diz-se que está indentado de um bloco para a direita em relação à linha superior. Isto é feito automaticamente se após os : carregares no enter, mas se por acaso deres espaços na barra de espaço, o Python fica confuso em relação a que nível de indentação estás a usar, mas podes seguir a sugestão que está na janela e ir ao editor para colocares tudo com a mesma indentação. :wink:

Abraço,
Bruno
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Erro

Mensagempor filipematos em Terça Jun 28, 2011 10:45 pm

Muito obrigado pela resposta,
O meu problema estava mesmo num ciclo for. No entanto, eu retirei o statement e voltei a por utilizando o enter e mesmo assim não deu... O que ele diz para fazer eu não percebi muito bem :? Eu vou lá ao menu mas não sei quantos por ...
"If I have seen further than others, it is by standing upon the shoulders of giants" - Isaac Newton

“We build too many walls and not enough bridges.” - Isaac Newton
filipematos
down-Quark!
down-Quark!
 
Mensagens: 280
Registado: Sábado Jun 25, 2011 4:48 pm
Localização: Lisboa

Re: Erro

Mensagempor filipematos em Terça Jun 28, 2011 10:46 pm

Muito obrigado pela resposta,
O meu problema estava mesmo num ciclo for. No entanto, eu retirei o statement e voltei a por utilizando o enter e mesmo assim não deu... O que ele diz para fazer eu não percebi muito bem :? Eu vou lá ao menu mas não sei quantos por ...
"If I have seen further than others, it is by standing upon the shoulders of giants" - Isaac Newton

“We build too many walls and not enough bridges.” - Isaac Newton
filipematos
down-Quark!
down-Quark!
 
Mensagens: 280
Registado: Sábado Jun 25, 2011 4:48 pm
Localização: Lisboa

Re: Erro

Mensagempor Bruno Oliveira em Terça Jun 28, 2011 10:48 pm

Filipe, sugiro que retires toda a indentação de modo a que fique tudo encostado "à esquerda" e graves.

Depois, tendo em atenção as zonas que necessitam de indentação dá simplesmente um tab em cada uma delas (ou o número necessário de tabs, para fazer sentido.).

Se puderes coloca aqui o código e eu ajudo-te num instante.

Cumprimentos.
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Erro

Mensagempor filipematos em Terça Jun 28, 2011 10:57 pm

Já consegui :) Muito obrigado
Fiz exactamente isso pus tudo à esquerda e fui pondo tabs. Mas sinceramente ele confunde demais, porque mesmo após ter feito isso ele continuava a dar erro, mas como dizia a linha fiz umas quantas vezes o mesmo e lá para a quinta ele deu :p
E está a funcionar muito bem.. Agora tenho é uma dúvida:
O código que usei é o seguinte:
Código: Seleccionar Todos
import random
p1="panela"
p2="orgao"
palavras = [p1,p2]
palavra_escolhida = random.choice(palavras)
def escolha_palavras():
    a = len(palavra_escolhida)
    pl = list(palavra_escolhida)
    o = 0
    palavra_nova = []
    palavra = []
    for x in range(0,a):
        palavra_nova.append(x)   
        conjunto = []
    while palavra_nova != conjunto:
        numero = random.choice(palavra_nova)
        palavra_nova.remove(numero)
        palavra.append(palavra_escolhida[numero])
    print palavra[0:a]

def jogo():
    palavra_tentativa = raw_input("A palavra é:" )
    k = []
    g = len(k)
    if palavra_tentativa == palavra_escolhida:
        print "Muitos parabéns conseguiste"
    else:
        k.append(1)
    if g==6:
        print "Eram só 6 tentativas, perdeste ehehe"

escolha_palavras()
jogo()

E como podem ver, ou mesmo testar, eu só consegui que o programa mostrasse a palavra baralhada numa lista com os elementos de uma string. A minha questão é: Será possível ele mostrar em string sem ser numa lista ( mais por uma aparência visual)?
última vez editado por filipematos s Terça Jun 28, 2011 11:02 pm, editado 1 vez no total
"If I have seen further than others, it is by standing upon the shoulders of giants" - Isaac Newton

“We build too many walls and not enough bridges.” - Isaac Newton
filipematos
down-Quark!
down-Quark!
 
Mensagens: 280
Registado: Sábado Jun 25, 2011 4:48 pm
Localização: Lisboa

Re: Erro

Mensagempor Bruno Oliveira em Terça Jun 28, 2011 11:00 pm

Ainda bem que pude ajudar. Quando te habituares a este estilo visual, não vais querer outra coisa. :wink:
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Erro

Mensagempor filipematos em Terça Jun 28, 2011 11:08 pm

Mais uma vez muito obrigado. Agora por acaso, sugeres alguma coisa que possa programar só para começar a desenvolver ( mas não exageradamente díficil)?
"If I have seen further than others, it is by standing upon the shoulders of giants" - Isaac Newton

“We build too many walls and not enough bridges.” - Isaac Newton
filipematos
down-Quark!
down-Quark!
 
Mensagens: 280
Registado: Sábado Jun 25, 2011 4:48 pm
Localização: Lisboa

Re: Erro

Mensagempor Bruno Oliveira em Quarta Jun 29, 2011 9:29 am

Para programares bem, em primeiro lugar convém familiarizares-te com as estruturas de dados da linguagem que estás a usar, no caso do Python existem listas, tupples, e muitas outras que eu desconheço... Claro que, antes disto convém conheceres os tipos de dados que existem, como numeros inteiros, long ints, strings, caracteres, enfim, os tipos de dados mais básicos que sejam comuns a uma grande maioria de linguagens.

Por isso recomendo-te o livro que existe online: "How to think like a computer scientist: Learning with Python." do prof. Allen B. Downey. Tendo pegado nesse livro e evoluido um pouco mais em termos de aprender a sintaxe básica e o raciocinio, sugiro o ProjectEuler (os 50 primeiros problemas são simultaneamente fáceis e interessantes para aprender uma nova linguagem.)
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Erro

Mensagempor Bruno Oliveira em Quarta Jun 29, 2011 1:55 pm

Ocorreu-me também que a Análise Numérica pode ser útil, para compreender bem o funcionamento de ciclos for e while, e existem muitos algoritmos simples de programar e interessantes, como o método do ponto fixo e integração numérica, que ajudam a perceber como funcionam as coisas ;)
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Erro

Mensagempor filipematos em Quinta Jun 30, 2011 12:19 pm

Muito obrigado pelas sugestões. Eu já tinha ouvido falar desse e-book/tuturial "how to think like a computer scientist" mas nunca o tinha aberto. Li agora assim um pouco só para ver o estilo e gostei muito. Os primeiros capitulos eu já domino mais ou menos bem mas os outros acho bastante interessantes. Vou já começar a ler. Achei igualemente interessante ou até mais, o projecto Euler, já estou registado e já resolvi o primeiro problema( seguindo o nível de dificuldade) mas que por acaso até era o primeiro. Vou agora resolver o segundo :)
Mais uma vez muito obrigado pelas sugestões :D
"If I have seen further than others, it is by standing upon the shoulders of giants" - Isaac Newton

“We build too many walls and not enough bridges.” - Isaac Newton
filipematos
down-Quark!
down-Quark!
 
Mensagens: 280
Registado: Sábado Jun 25, 2011 4:48 pm
Localização: Lisboa

Re: Erro

Mensagempor Bruno Oliveira em Quinta Jun 30, 2011 4:11 pm

filipematos Escreveu:Já consegui :) Muito obrigado
Fiz exactamente isso pus tudo à esquerda e fui pondo tabs. Mas sinceramente ele confunde demais, porque mesmo após ter feito isso ele continuava a dar erro, mas como dizia a linha fiz umas quantas vezes o mesmo e lá para a quinta ele deu :p
E está a funcionar muito bem.. Agora tenho é uma dúvida:
O código que usei é o seguinte:
Código: Seleccionar Todos
import random
p1="panela"
p2="orgao"
palavras = [p1,p2]
palavra_escolhida = random.choice(palavras)
def escolha_palavras():
    a = len(palavra_escolhida)
    pl = list(palavra_escolhida)
    o = 0
    palavra_nova = []
    palavra = []
    for x in range(0,a):
        palavra_nova.append(x)   
        conjunto = []
    while palavra_nova != conjunto:
        numero = random.choice(palavra_nova)
        palavra_nova.remove(numero)
        palavra.append(palavra_escolhida[numero])
    print palavra[0:a]

def jogo():
    palavra_tentativa = raw_input("A palavra é:" )
    k = []
    g = len(k)
    if palavra_tentativa == palavra_escolhida:
        print "Muitos parabéns conseguiste"
    else:
        k.append(1)
    if g==6:
        print "Eram só 6 tentativas, perdeste ehehe"

escolha_palavras()
jogo()

E como podem ver, ou mesmo testar, eu só consegui que o programa mostrasse a palavra baralhada numa lista com os elementos de uma string. A minha questão é: Será possível ele mostrar em string sem ser numa lista ( mais por uma aparência visual)?


Sim, é possível. Considera a seguinte lista que contém caracteres que formam a palavra ----> palavra:

Código: Seleccionar Todos
lista = ['p','a','l','a','v','r','a']


Se usares a instrução em baixo, podes obter uma string que resulta de concatenar todos os elementos da lista, que repara, são caracteres:

Código: Seleccionar Todos
string_da_lista = reduce(lambda x,y: x+y , [lista[i] for i in range(0,len(lista))])


Assim string_da_lista é uma string que resulta de juntar todos os elementos da lista ;)
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Erro

Mensagempor filipematos em Quinta Jun 30, 2011 5:23 pm

Resultou :D, muito obrigado. Poderias só explicar um pouco essa instrução?
"If I have seen further than others, it is by standing upon the shoulders of giants" - Isaac Newton

“We build too many walls and not enough bridges.” - Isaac Newton
filipematos
down-Quark!
down-Quark!
 
Mensagens: 280
Registado: Sábado Jun 25, 2011 4:48 pm
Localização: Lisboa

Re: Erro

Mensagempor Bruno Oliveira em Quinta Jun 30, 2011 6:34 pm

O idioma que usei é programação funcional, isto é capaz de te ir confundir um pouco nesta fase inicial, mas assim que tiveres mais experiência no uso de variáveis, que é sempre importante, então aí eu poderei voltar a este assunto. :wink:

Mas, se quiseres mesmo saber também se arranja uma explicação. :P
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Erro

Mensagempor filipematos em Quinta Jun 30, 2011 7:35 pm

Se não for muito incómodo, gostava de ter um explicação :p
"If I have seen further than others, it is by standing upon the shoulders of giants" - Isaac Newton

“We build too many walls and not enough bridges.” - Isaac Newton
filipematos
down-Quark!
down-Quark!
 
Mensagens: 280
Registado: Sábado Jun 25, 2011 4:48 pm
Localização: Lisboa

Próximo

Voltar para Pitónica

Quem está ligado

Utilizadores a navegar neste fórum: Nenhum utilizador registado e 1 visitante

cron