Dificuldade em código Python

Ola novamente

Mais algumas duvidas em exercicio, o exercicio é o seguinte:
Cria um programa que determina se um número é par ou não. Começas por ler um número do utilizador (função input()) e utilizas instruções if para a verificação.

Para resolver este problema desenvolvi o seguinte código:
Código:
a = input('Inserir numero ')
b = a / 10
c = b % 10 # verificar o resto da divisão, ou seja se o resto for = 0 é par se for = 1 é impar
if c == 0:
print 'É par.'
if c == 1:
print 'Não é par.'

Este programa não funciona correctamente, haverá algum erro no código que desenvolvi? Será uma maneira eficaz de resolver o problema?

Cumps
Psycop
 
Porque é que primeiro divides por 10 e depois procuras o resto da divisão do resultado por 10?
Um número é par se o seu resto da divisão por 2 for 0 ;) (não precisas de usar a divisão em lado nenhum, só o %).
 
Boas

Surgiram-me novamnte algumas duvidas na resolução de um exercicio, que é o seguinte:
Cria uma função que devolve o reverso de um número inteiro recebido do utilizador. Por exemplo: 127 deve devolver 721. O número devem ser impresso no ecrã depois de lido do teclado.
A minha duvida está na forma como eu vou fazer o reverso do numero, pois para fazer a leitura do numero basta usar o int(raw_input()).
Alguem me pode dar umas dicas de como eu poderei fazer o reverso do numero..

Cumps
Psycop
 
Boas

Seguindo os teus conselhos dados anteriormente cheguei a esta solução, mas não sei se e a melhor implementação possivel para a resolução do problema:
Código:
numero = input('inserir ')
dig1 = numero % 10
print dig1
a = numero / 10
print a
dig2 = a % 10
print dig2
b = a/10
print b
print str(dig1) + str(dig2) + str(b)

Cumps
Psycop
 
É assim... Pessoalmente, não te consigo ajudar mais que isto. Eu dei praticamente a maior dica que podia dar: "se quisermos o inverso de 123, temos duas variáveis, uma começa em 123 e acaba em 0, outra começa em 0 e acaba em 321". As duas variáveis têm que ser inteiros, nem sequer deverias precisar de strings para produzir o resultado.

A tua solução nem sequer usa um ciclo, por isso é que estás a assumir que só vais fazer 3 divisões por 10. Isso equivale a assumir que o número que o utilizador vai introduzir tem sempre 3 dígitos. E se eu quiser o inverso do 1234?

Mais que isto, só mesmo postando a solução, o que, obviamente, é má ideia. Se tiver mesmo que ser, tudo bem, mas só se compreenderes o "risco" associado a isso.
 
Eu sei que ele não precisa de usar strings, mas ao começar convém ter todas as 'opções' disponíveis para podermos atacar o problema de todas as formas. Já que ele não chega lá 'matematicamente', poderia tentar estudá-lo por outros meios.

Cumprimentos
 
Eu sei que ele não precisa de usar strings, mas ao começar convém ter todas as 'opções' disponíveis para podermos atacar o problema de todas as formas. Já que ele não chega lá 'matematicamente', poderia tentar estudá-lo por outros meios.

Percebo o que queres dizer, mas parece-me que fazer o problema utilizando strings só vai complicar as coisas para ele. Eu reconheço que resolver o problema com inteiros não é a única forma, longe disso. Aliás, uma forma de resolver o problema seria percorrer os caracteres todos da string e trocar o primeiro com o último, o segundo com o penúltimo, etc., ou seja, seria a mesma coisa que inverter uma palavra.

Só que surge um problema: é que não me parece que ele saiba como é que se percorrem todos os caracteres de uma string. Nota-se que ele estudou qualquer coisa de ciclos, mas corremos o risco de ele ainda não saber como se faz um ciclo sobre uma string. Mais ainda: as strings em Python são como as de Java - são imutáveis, não se podem alterar caracteres numa string, o que complica ainda mais as coisas.

Eu sugiro o uso de inteiros por (pelo menos) duas razões: uma é ele treinar o cérebro em termos de algoritmia. Quanto mais ele conseguir aprender estes algoritmos básicos sozinho, melhor programador se vai tornar. A segunda é ele fazer as coisas passo a passo: se metermos a questão das strings ao barulho, há coisas que ele ainda não sabe que se vai ter de preocupar, e isso é frustrante para quem está a começar a programar.

Cumprimentos.
 
Boas

O meu raciocinio foi baseado nos post's #59 e #60 deste mesmo tópico. Ou seja se eu dividir o numero por 10 retiro-lhe o ultimo digito, e se de seguida fizer esse mesmo numero % 10 imprimo o numero que fiz desaparecer, ou seja se eu fizer desaparecer o ultimo digito e se o voltar a imprimir como primeiro digito, e assim sucessivamente chego ao que pretendo.

Este foi o meu raciocinio, pode não ter sido o mais correcto mas foi a forma que encontrei para resolver o problema.

Cumps
 
Ok, isso faz com que recebas um número e o imprimas ao contrário, dígito a dígito. No entanto, consegues fazer um programa que faça isto:

Código:
>>> reverso(1234)
4321
>>> reverso(385972)
279583
>>> 
>>> numero = 12345
>>> numero
12345
>>> reverso(numero)
54321
>>> reverso(numero) + numero
66666
>>> 2 * reverso(numero)
108642
>>> 2 * numero
24690
?

Isto é, que retorna o reverso do número, em vez de o imprimir.
 
se eu fizer desaparecer o ultimo digito e se o voltar a imprimir como primeiro digito, e assim sucessivamente chego ao que pretendo

E se "fizeres desaparecer o último dígito" mas não o imprimires? Podias retirar o dígito, acrescentá-lo a outro número, e só depois imprimires o resultado.

Outra questão: quantas vezes é que tens que fazer a operação de retirar o dígito? OK, não tens necessariamente de saber quantas vezes, mas tens de saber o seguinte: quando é que tu páras de retirar dígitos?
 
Bem, espero que o Psycop não se importe mas vou usar o tópico para tirar uma dúvida num exercício e como ainda estou no princípio não percebo muito.
Faça um Programa que leia três números e mostre-os em ordem decrescente.
Eu já tentei fazer com ifs mas acho que não fica muito bem. Será que me podiam dar umas luzes?

Obrigaado
 
Ocorrem-me duas coisas:
- IFs encadeados (que muito rapidamente se tornam na pior maneira de tratar o problema);
- algoritmos de ordenação: acho que neste caso o insertion sort é mais que suficiente, e é muito simples;
 
Última edição:
Boas

btuger Não há problema em colocares aqui as tuas duvidas, pois muito possivelmente as tuas duvidas também serão minhas, pois também estou a aprender python.

Quanto ao exercicio de odenação por ordem decrescente, tive a dar uma olhada no algoritmo insertion sort, mas não percebi muito bem o seu funcionamento. Pelo que percebi este algoritmo não é mais que uma função que corre sobre um array e desloca os seus elementos para o local correcto certo?

PS: Kayvlim, se não desses essas opções, eu também seguiria a opção dos If, mesmo não sendo a mais correcta..

Cumps
Psycop
 
Eu editei o post anterior porque tinha dado uma terceira opção que mais tarde pareceu-me ter uma falha de raciocínio, mas afinal não :x

- recorrendo às funções MAX e MIN. Como é para mostrar em ordem decrescente, primeiro vem max(a, b, c); por último vem min(a, b, c) e o do meio é o max(min(a, b), min(a, c), min(b, c)).

O insertion sort é um algoritmo relativamente simples, mas explicar por palavras (sem desenhos) é-me um bocado difícil. Talvez percebas melhor com algumas animações :P

Em geral, um algoritmo de ordenação é uma função que recebe uma array/lista de elementos desordenados e devolve uma nova lista com os mesmos elementos, mas ordenados.

edit - ah, com "ordenado" refiro-me a ordem crescente. Para ordem decrescente, é preciso alterar o algoritmo (trocar um < por um > :P )
 
Última edição:
O problema agora é meter o Insertion Sort em código.
Pelo que percebi este algoritmo não é mais que uma função que corre sobre um array e desloca os seus elementos para o local correcto certo?
Isto também foi o que eu entendi.
 
O problema agora é meter o Insertion Sort em código.

Não é nada. Já tens o pseudo-código, agora é só procurares como é que funcionam os ciclos for em Python e tudo o resto que precisares. Eu nunca programei em Python e com umas pesquisas no Google fiz o programa sem grandes problemas. Por isso tu também consegues. ;)
Eu basicamente usei input() para ler os valores, append() para os meter para uma lista, 2 ciclos for e 1 if. Talvez ajude como referência. ;)

Cumprimentos.
 
Última edição:
Não é nada. Já tens o pseudo-código, agora é só procurares como é que funcionam os ciclos for em Python e tudo o resto que precisares. Eu nunca programei em Python e com umas pesquisas no Google fiz o programa sem grandes problemas. Por isso tu também consegues. ;)
Eu basicamente usei input() para ler os valores, append() para os meter para uma lista, 2 ciclos for e 1 if. Talvez ajude como referência. ;)

Cumprimentos.
Podes amostrar-me um coto o código? É que não estou a conseguir meter os números por ordem.
 
Back
Topo