Página 1 de 2

Erro

MensagemEnviado: Terça Jun 28, 2011 12:15 pm
por filipematos
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

Re: Erro

MensagemEnviado: Terça Jun 28, 2011 2:16 pm
por Bruno Oliveira
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

Re: Erro

MensagemEnviado: Terça Jun 28, 2011 10:45 pm
por filipematos
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 ...

Re: Erro

MensagemEnviado: Terça Jun 28, 2011 10:46 pm
por filipematos
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 ...

Re: Erro

MensagemEnviado: Terça Jun 28, 2011 10:48 pm
por Bruno Oliveira
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.

Re: Erro

MensagemEnviado: Terça Jun 28, 2011 10:57 pm
por filipematos
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)?

Re: Erro

MensagemEnviado: Terça Jun 28, 2011 11:00 pm
por Bruno Oliveira
Ainda bem que pude ajudar. Quando te habituares a este estilo visual, não vais querer outra coisa. :wink:

Re: Erro

MensagemEnviado: Terça Jun 28, 2011 11:08 pm
por filipematos
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)?

Re: Erro

MensagemEnviado: Quarta Jun 29, 2011 9:29 am
por Bruno Oliveira
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.)

Re: Erro

MensagemEnviado: Quarta Jun 29, 2011 1:55 pm
por Bruno Oliveira
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 ;)

Re: Erro

MensagemEnviado: Quinta Jun 30, 2011 12:19 pm
por filipematos
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

Re: Erro

MensagemEnviado: Quinta Jun 30, 2011 4:11 pm
por Bruno Oliveira
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 ;)

Re: Erro

MensagemEnviado: Quinta Jun 30, 2011 5:23 pm
por filipematos
Resultou :D, muito obrigado. Poderias só explicar um pouco essa instrução?

Re: Erro

MensagemEnviado: Quinta Jun 30, 2011 6:34 pm
por Bruno Oliveira
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

Re: Erro

MensagemEnviado: Quinta Jun 30, 2011 7:35 pm
por filipematos
Se não for muito incómodo, gostava de ter um explicação :p