Olá, Visitante. Por favor entre ou registe-se se ainda não for membro.

Entrar com nome de utilizador, password e duração da sessão
 

Autor Tópico: Programação em Python  (Lida 8069 vezes)

Local

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 15946
    • Ver Perfil
Programação em Python
« em: 2015-03-11 13:11:38 »
Alguém sabe alguma coisa de programação em Python?

Estou a tirar um curso de Python no coursera e estou bloqueado. Não consigo tirar as dúvidas em lado nenhum.
“Our values are human rights, democracy and the rule of law, to which I see no alternative. This is why I am opposed to any ideology or any political movement that negates these values or which treads upon them once it has assumed power. In this regard there is no difference between Nazism, Fascism or Communism..”
Urmas Reinsalu

John_Law

  • Ordem dos Especialistas
  • Sr. Member
  • *****
  • Mensagens: 466
    • Ver Perfil
Re:Programação em Python
« Responder #1 em: 2015-03-11 13:48:23 »
Longe de ser um profissional pode ser que consiga dar uma ajuda... Mostra-me o exercício e o teu código e eu hoje à noite tento ver.

Mas esses cursos do Coursera não têm fóruns da turma?

Local

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 15946
    • Ver Perfil
Re:Programação em Python
« Responder #2 em: 2015-03-11 14:33:34 »
Tem fórum e tem grupo de facebook, mas mesmo assim não consigo perceber. E é programação de iniciante, que eu espero aprender para depois ensinar à minha filha, no Verão.

o loop é o seguinte:

fruit = 'banana'
index = 0
while index < len(fruit):
letter = fruit[index]
print letter
index = index + 1

o resultado é:

b
a
n
a
n
a

Agora queria usar índices negativos, que no livro refere:

Citar
Alternatively, you can use negative indices, which count backward from the end of the string. The expression fruit[-1] yields the last letter, fruit[-2] yields the second to last, and so on.

A questão é:
Citar
Exercise 6.1 Write a while loop that starts at the last character in the string and works its way backwards to the first character in the string, printing each letter on a separate line, except backwards.

ao usar fruit[-1] ou  fruit[-2], refere-se apenas a uma letra e não faz a sequência devida.
“Our values are human rights, democracy and the rule of law, to which I see no alternative. This is why I am opposed to any ideology or any political movement that negates these values or which treads upon them once it has assumed power. In this regard there is no difference between Nazism, Fascism or Communism..”
Urmas Reinsalu

Incognitus

  • Administrator
  • Hero Member
  • *****
  • Mensagens: 30961
    • Ver Perfil
Re:Programação em Python
« Responder #3 em: 2015-03-11 14:47:08 »
Tenta assim:

fruit = 'banana'
index = 0
while index < len(fruit):
letter = fruit[-index-1]
print letter
index = index + 1
"Nem tudo o que pode ser contado conta, e nem tudo o que conta pode ser contado.", Albert Einstein

Incognitus, www.thinkfn.com

Local

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 15946
    • Ver Perfil
Re:Programação em Python
« Responder #4 em: 2015-03-11 20:55:08 »
dá erro

IndentationError: expected an indented block (<string>, line 4)
“Our values are human rights, democracy and the rule of law, to which I see no alternative. This is why I am opposed to any ideology or any political movement that negates these values or which treads upon them once it has assumed power. In this regard there is no difference between Nazism, Fascism or Communism..”
Urmas Reinsalu

Mystery

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 1562
    • Ver Perfil
Re:Programação em Python
« Responder #5 em: 2015-03-11 21:21:13 »
tens de adicionar um espaço ou mais na linha seguinte ao ":"
A fool with a tool is still a fool.

Incognitus

  • Administrator
  • Hero Member
  • *****
  • Mensagens: 30961
    • Ver Perfil
Re:Programação em Python
« Responder #6 em: 2015-03-11 21:35:30 »
Não conheço as regras sintácticas no Python, mas não será nas 3 linhas seguintes, para pertencerem todas ao ciclo do "while"?

Eu nisto prefiro linguagens que têm um fim expresso nos ciclos, IFs, etc.

"Nem tudo o que pode ser contado conta, e nem tudo o que conta pode ser contado.", Albert Einstein

Incognitus, www.thinkfn.com

Mystery

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 1562
    • Ver Perfil
Re:Programação em Python
« Responder #7 em: 2015-03-11 21:46:57 »
sim nas 3 linhas seguintes, o pyhon é sensivel aos espaços
A fool with a tool is still a fool.

John_Law

  • Ordem dos Especialistas
  • Sr. Member
  • *****
  • Mensagens: 466
    • Ver Perfil
Re:Programação em Python
« Responder #8 em: 2015-03-11 21:56:40 »
Portanto tu queres chamar:

 fruit[-1]
 fruit[-2]
 and so on, até fruit[-6], isto é até -len(fruit)

Logo, o teu contador, o index, tem ser inicializado a -1 e decrementado a cada ciclo, e acaba quanto o index for maior que -len(fruit). Isto assim fica:

Citar
fruit = 'banana'
index = -1
while index > -len(fruit):
letter = fruit[index]
print letter
index = index - 1

Local

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 15946
    • Ver Perfil
Re:Programação em Python
« Responder #9 em: 2015-03-11 22:00:03 »
tens de adicionar um espaço ou mais na linha seguinte ao ":"
Não, o erro não é esse. Não estou a conseguir colocar o índice negativo.
O índice positivo é assim:

  b    a    n    a    n    a
  • [1] [2] [3] [4] [5]


O índice negativo é assim:
  b      a     n      a     n     a
[-5] [-4] [-3] [-2] [-1]
Citar
Não conheço as regras sintácticas no Python, mas não será nas 3 linhas seguintes, para pertencerem todas ao ciclo do "while"?

Eu nisto prefiro linguagens que têm um fim expresso nos ciclos, IFs, etc.
Na realidade o loop é assim:

index = 0
while index < len(fruit):
    letter = fruit[index]
    print letter
    index = index + 1

As linhas 3 a 5 estão todas no ciclo do while, eu é que não copiei bem.

Vou voltar a perguntar no facebook a ver se me dão mais algumas dicas.
“Our values are human rights, democracy and the rule of law, to which I see no alternative. This is why I am opposed to any ideology or any political movement that negates these values or which treads upon them once it has assumed power. In this regard there is no difference between Nazism, Fascism or Communism..”
Urmas Reinsalu

Local

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 15946
    • Ver Perfil
Re:Programação em Python
« Responder #10 em: 2015-03-11 22:03:16 »
Portanto tu queres chamar:

 fruit[-1]
 fruit[-2]
 and so on, até fruit[-6], isto é até -len(fruit)

Logo, o teu contador, o index, tem ser inicializado a -1 e decrementado a cada ciclo, e acaba quanto o index for maior que -len(fruit). Isto assim fica:

Citar
fruit = 'banana'
index = -1
while index > -len(fruit):
letter = fruit[index]
print letter
index = index - 1

Obrigado John!!! agora vou estudar o caso

só uma pequena correcção, index é 0, para incluir o "b"
“Our values are human rights, democracy and the rule of law, to which I see no alternative. This is why I am opposed to any ideology or any political movement that negates these values or which treads upon them once it has assumed power. In this regard there is no difference between Nazism, Fascism or Communism..”
Urmas Reinsalu

Local

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 15946
    • Ver Perfil
Re:Programação em Python
« Responder #11 em: 2015-03-11 22:06:47 »
o meu erro foi mesmo o "-len", não chegava lá.
Obrigado John!
“Our values are human rights, democracy and the rule of law, to which I see no alternative. This is why I am opposed to any ideology or any political movement that negates these values or which treads upon them once it has assumed power. In this regard there is no difference between Nazism, Fascism or Communism..”
Urmas Reinsalu

John_Law

  • Ordem dos Especialistas
  • Sr. Member
  • *****
  • Mensagens: 466
    • Ver Perfil
Re:Programação em Python
« Responder #12 em: 2015-03-11 22:20:01 »
O código que eu pus devia escrever:

a
n
a
n
a
b

Pensava que era isso querias.
« Última modificação: 2015-03-11 22:20:41 por John_Law »

Local

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 15946
    • Ver Perfil
Re:Programação em Python
« Responder #13 em: 2015-03-11 22:54:34 »
Certo, mas o código escrevia:

a
n
a
n
a

tanto no positivo como no negativo o princípio é zero (mas só percebi isso depois de o correr no on-line tutor).
http://www.pythontutor.com/visualize.html#mode=edit
“Our values are human rights, democracy and the rule of law, to which I see no alternative. This is why I am opposed to any ideology or any political movement that negates these values or which treads upon them once it has assumed power. In this regard there is no difference between Nazism, Fascism or Communism..”
Urmas Reinsalu

Local

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 15946
    • Ver Perfil
Re:Programação em Python
« Responder #14 em: 2015-03-11 23:14:35 »
também dá assim:

fruit = 'banana'
   index = 0
   while index < len(fruit):
       letter = fruit[index-1]
       print letter
       index = index - 1
“Our values are human rights, democracy and the rule of law, to which I see no alternative. This is why I am opposed to any ideology or any political movement that negates these values or which treads upon them once it has assumed power. In this regard there is no difference between Nazism, Fascism or Communism..”
Urmas Reinsalu

John_Law

  • Ordem dos Especialistas
  • Sr. Member
  • *****
  • Mensagens: 466
    • Ver Perfil
Re:Programação em Python
« Responder #15 em: 2015-03-11 23:57:24 »
Olha que não Local. O índice 0 duma string é sempre o primeiro caráter, o compilador não consegue saber se tem que retornar a última ou a primeira letra se puseres 0. O meu código não dava porque não era ">" era ">=" ;D

Citar
fruit = 'banana'
index = -1
while index >= -len(fruit):
letter = fruit[index]
print letter
index = index - 1

Assim já dá, podes correr. Por acaso a correcção de manter index = 0 funcionava porque a palavra banana até ao "b" é um palíndromo mas se for outra não dá. ;)

Já agora acho uma grande ideia estares a aprender para ensinar a tua filha; programar é uma óptima skill.
« Última modificação: 2015-03-11 23:58:02 por John_Law »

Local

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 15946
    • Ver Perfil
Re:Programação em Python
« Responder #16 em: 2015-03-12 00:41:08 »
tens razão, o que eu referi dá um "IndexError: string index out of range" por causa disso mesmo.

vou estudar o teu loop para ver se entranha esta matéria.

Agora é que o curso está a complicar. E já estava a ficar desmoralizado, porque nem conseguia chegar ao loop para depois tentar percebê-lo.
“Our values are human rights, democracy and the rule of law, to which I see no alternative. This is why I am opposed to any ideology or any political movement that negates these values or which treads upon them once it has assumed power. In this regard there is no difference between Nazism, Fascism or Communism..”
Urmas Reinsalu

Local

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 15946
    • Ver Perfil
Re:Programação em Python
« Responder #17 em: 2015-03-16 09:54:55 »
Parece-me que, para a idade dela, o melhor é aprender Scratch, pois é mais fácil de programar.
Depois sim, pode passar para o python.

Parece-me que quando acabar este curso vou fazer um de Scratch.
“Our values are human rights, democracy and the rule of law, to which I see no alternative. This is why I am opposed to any ideology or any political movement that negates these values or which treads upon them once it has assumed power. In this regard there is no difference between Nazism, Fascism or Communism..”
Urmas Reinsalu

Incognitus

  • Administrator
  • Hero Member
  • *****
  • Mensagens: 30961
    • Ver Perfil
Re:Programação em Python
« Responder #18 em: 2015-03-16 12:52:34 »
Parece-me que, para a idade dela, o melhor é aprender Scratch, pois é mais fácil de programar.
Depois sim, pode passar para o python.

Parece-me que quando acabar este curso vou fazer um de Scratch.

Eu tentei que a minha aprendesse via Scratch, mas perdeu o interesse rápido ... mesmo após fazermos logo um pequeno jogo em um dia ou dois.  :D
"Nem tudo o que pode ser contado conta, e nem tudo o que conta pode ser contado.", Albert Einstein

Incognitus, www.thinkfn.com

Local

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 15946
    • Ver Perfil
Re:Programação em Python
« Responder #19 em: 2015-03-16 13:31:03 »
eu já vi a minha a mexer no Scratch, mas como não sabe o que fazer é mais complicado.

E assim também é bom para mim, pois estou um bocado "à nora" com este curso, mesmo sendo básico.
“Our values are human rights, democracy and the rule of law, to which I see no alternative. This is why I am opposed to any ideology or any political movement that negates these values or which treads upon them once it has assumed power. In this regard there is no difference between Nazism, Fascism or Communism..”
Urmas Reinsalu