Dificuldade em código Python

Mais uma vez venho eu expor aqui mais algumas dúvidas.

O exercicio é o seguinte:
Cria um programa que receba N números e imprima a sua soma. Deve começar por receber o número de casos (isto é, número de números que vai ler e somar) e vai lendo os números. No final imprime "Soma de N numeros = S", substituindo o N pelo número inicial e S pela soma calculada.

A minha dúvida é como é que eu vou defenir o numero de numeros que vou inserir.
Sei que vou ter de usar um raw_input para fazer a entrada dos dados, mas depois vem a duvida, como é que eu consigo detectar e aplicar ao raw_input para o numero de casos que o utilizador queira inserir...
 
Eu acabei de fazer um programa para aquilo que queres, mas quero ver se chegas lá. Tu até aqui já deves ter percebido:

Código:
numero_de_numeros_a_ler = int(raw_input('Numero de numeros: '))
E pronto, temos uma variável que tem um número inteiro, que é o número de números. Mais uma vez, o truque aqui é usar ciclos. Em pseudo-código, o programa é:

Código:
1. Ler [U]número de números
[/U] 2. [U]Número de números que já foram lidos[/U] = 0
3. [U]Soma [/U]= 0
4. Enquanto o [U]número de números que já foram lidos[/U] for menor que o [U]número de números[/U]
4.1. Ler [U]próximo número[/U]
4.2. [U]Soma [/U]= [U]Soma [/U]+ [U]próximo número[/U]
4.3. [U]Número de números que já foram lidos[/U] = [U]Número de números que já foram lidos[/U] + 1
5. Imprimir a [U]soma[/U]
O teu problema deve estar em traduzir aquele "enquanto". Mais uma vez, é usar ciclos. Eu usei um ciclo while para resolver este problema. Sem ciclos, nada feito.
 
Já percebi o algoritmo, a minha duvida é como é que eu poderei ler o numero de numeros que já foram lidos...
Esta é a minha primeira dúvida...
 
Já percebi o algoritmo, a minha duvida é como é que eu poderei ler o numero de numeros que já foram lidos...
Esta é a minha primeira dúvida...

Tu não lês o número de números que já foram lidos. É uma variável que começa em 0, e de cada vez que lês um número, acrescentas-lhe 1. Tu lês é o número de números a ler, e isso já te mostrei como se faz.
 
Não sei se implementei bem, mas cheguei a isto:

numero_de_numeros_a_ler = int(raw_input('Numero de numeros: '))

x = numero_de_numeros_a_ler
while x > 0:
print x
x = x + 1
print "Saiu do ciclo"

Mas esta implementação não está correcta...
 
Duas coisas:

1 - x = x + 1 ?????? Porquê? Se estás a dizer "enquanto x maior que 0", não achas que aumentar o valor de x só vai piorar as coisas?

2 - Dentro desse while tens que ter outra instrução do tipo int(raw_input(qualquer coisa)). Volto a repetir:

Enquanto (qualquer coisa)...
...ler próximo número.
 
Mr_Miguel já percebi que a minha intrepretação estava errada.
Estive a pensar um pouco sobre o assunto e cheguei até este código:

Código:
numero_de_numeros_a_ler = int(raw_input('Numero de numeros: '))
x = numero_de_numeros_a_ler
while x > 0:
y = int(raw_input('numero '))
print y

A minha dúvida surge agora, ou seja como é que eu vou saber quantos mais input's vou ter de fazer até prefazer a quantidade de numeros definida em "numero_de_numeros_a_ler".
Ou seja após ler numero1 enquanto não igualar o numero definido em "numero_de_numeros_a_ler" ler novo numero, mas agora como é que eu dou conhecimento do numero de "numero_de_numeros_a_ler" dentro do ciclo while?

Cumps
Psycop
 
como é que eu dou conhecimento do numero de "numero_de_numeros_a_ler" dentro do ciclo while?

Simples. A tua variável x começa por ser igual ao número de números a ler, certo? Dizer "enquanto x maior que 0" é o mesmo que dizer "enquanto o número de números que tenho que ler é maior que 0". Então a solução é simples: dentro do while, fazes o que tens a fazer, e retiras 1 ao valor do x. Ou seja:

Código:
numero_de_numeros_a_ler = int(raw_input('Numero de numeros: '))
x = numero_de_numeros_a_ler
while x > 0:
    y = int(raw_input('numero '))
    print y
    x = x - 1

Vê lá se não é isto que tu queres. Imagina que queres ler 3 números. Quantas vezes é que vais "visitar" o ciclo while?

Outra maneira de interpretar isto é "subtrair 1 ao valor de x é o mesmo que dizer que me falta menos 1 número para ler; quando me faltarem 0 números para ler, já o ciclo while terminou". Certo?
 
Sim é exactamente isso que o problema pretende, mas agora a outra questão que coloco a soma de todos os numeros lidos.
Como é que eu volto a buscar os valores inseridos para os somar? Visto que o "y = int(raw_input('numero '))" vai introduzir valores o numero de vezes que for requerido pelo "numero_de_numeros_a_ler = int(raw_input('Numero de numeros: '))" não posso fazer a funçao soma com a variavel y. Será que após cada leitura terei que reler o valor de modo a mais tarde porder somar todos os numeros inseridos?

Cumps
Psycop
 
Será que após cada leitura terei que reler o valor de modo a mais tarde porder somar todos os numeros inseridos?

Não. Tens é que ter outra variável para calcular a soma e imprimi-la no final. Ora repara:

Código:
numero_de_numeros_a_ler = int(raw_input('Numero de numeros: '))
x = numero_de_numeros_a_ler
soma = 0
while x > 0:
    y = int(raw_input('numero '))
    soma = soma + y
    x = x - 1
print soma

Lês um número e acrescentas esse número à soma.
 
Exacto, agora tenho de imprimir no final a seginte frase:
Soma de (x = numero_de_numeros_a_ler) = (soma)

Para isso uso o seguinte código:
Código:
print 'Soma de ' + x + ' numeros = ' + soma
Só que dá o erro devido a não ser possivel concatenar o int(x), agora terei de o converter para uma string para poder fazer o print no final?
 
Só que dá o erro devido a não ser possivel concatenar o int(x), agora terei de o converter para uma string para poder fazer o print no final?

E tem mesmo que dar. Tens que converter os teus ints para strings. Basta usar a função str():

Código:
print 'Soma de ' + str(x) + ' numeros = ' + str(soma)

Só que não me parece que seja o x que tu queres, mas sim o número de números a ler. Lembra-te que o x foi alterado durante o programa.
 
Pois, agora é que eu percebi que o x foi alterado dentro da função while, logo daria sempre o resultado (0) zero, e que por outro lado foi a variavel y que "introduziu" os valores ou seja é a variavel y que tenho que colocar e fica o seguinte código:
Código:
print 'Soma de ' + str(y) + ' numeros = ' + str(soma)

Obrigado Mr_Miguel, com a tua ajuda e complementando com a leitura de alguns tutoriais estou a aprender a linguagem, e o conseguir resolver desafios mesmo que para já com alguma/muita ajuda dá mais alento para continuar a aprender a desenvolver as minhas capacidades....

Cumps
Psycop
 
Última edição:
O teu raciocínio aí está errado. A variável y, no final do programa, tem lá dentro o último número que leste. Tu precisas é de uma variável que tem lá o número de números que leste. E tens. Repara:

Código:
print 'Soma de ' + str(numero_de_numeros_a_ler) + ' numeros = ' + str(soma)
Bom, de qualquer maneira, agora que já chegámos ao código final, tens aqui o meu código para comparar:

Código:
numero_de_numeros_a_ler = int(raw_input('Numero de numeros: '))
numero_de_numeros_que_ja_foram_lidos = 0
soma = 0
while (numero_de_numeros_que_ja_foram_lidos < numero_de_numeros_a_ler):
    proximo_numero = int(raw_input('Proximo numero: '))
    soma = soma + proximo_numero
    numero_de_numeros_que_ja_foram_lidos = numero_de_numeros_que_ja_foram_lidos + 1
print 'Soma de ' + str(numero_de_numeros_que_ja_foram_lidos) + ' numeros = ' + str(soma)
O meu raciocínio foi diferente do teu. Não quer dizer que o teu esteja errado, mas eu, em vez de dizer "enquanto tiver mais que 0 números para ler", disse "enquanto ainda não tiver lido o número de números que quero ler".
 
Boas

Surgiu-me o seguinte problema:

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.

Existe alguma função que faça o reverse de um numero inteiro?

Sei que vou ter de utilizar um raw_input para fazer a leitura do numero inteiro inserido pelo utilizador, o meu problema é como transformar esse numero no seu reverso...

Se alguem tiver algumas dicas para me dar...

Cumps
Psycop
 
Boas

Surgiu-me o seguinte problema:



Existe alguma função que faça o reverse de um numero inteiro?

Sei que vou ter de utilizar um raw_input para fazer a leitura do numero inteiro inserido pelo utilizador, o meu problema é como transformar esse numero no seu reverso...

Se alguem tiver algumas dicas para me dar...

Cumps
Psycop

Penso que não exista. E mesmo que exista, o objectivo é fazeres isso manualmente e não uma funçao já existente.

Para a parte de ler o numero, é isso. Agora como fazer o reverso?
Fazes ideia de por onde começar?

Cumprimentos,
 
Não faço ideia por onde começar, pois se eu ler um numero por exemplo 723, como é que eu o vou transformar em 327 se os numeros fossem lidos 1 a 1 e no final agrupados de modo a fazer o 723 assim era facil de fazer o reverso...

Mas penso que isso não seja o mais correcto...
 
Código:
[B]12345[/B] | 0
1234  | 5
123   | 54
12    | 543
1     | 5432
0     | [B]54321[/B]
Consegues chegar a algum lado com isto? :P
Pista: a parte inteira da divisão de um número por 10 é todo o número excepto o último algarismo; o resto da divisão de um número por 10 é o último algarismo, e.g.

mimetex.cgi


Em Python, a parte inteira de um número é dada pela função math.floor() e o módulo é dado pelo caracter %, isto é,
Código:
>>> math.floor(12345/10)
1234.0
>>> 12345 % 10
5
 
Última edição:
Como o Kayvlim já disse, vais ter que extrair dígitos para inverter o número. Saber qual é o último dígito de um número é fazer "número % 10". Não é necessário, contudo, recorrer à função math.floor(). Para fazer o último dígito "desaparecer" basta:

Código:
numero = numero / 10

Isto porque em Python, como noutras linguagens de programação, 12345/10 dá 1234, e não 1234.5

(NOTA: a história seria diferente se se tratasse do Python 3.0, mas não é claramente o caso, visto que o Psycop está a usar "print qualquer coisa" e não "print(qualquer coisa)"; no Python 3.0 o print é uma função)

No entanto, há mais uma coisa que tens que saber, e (pessoalmente) recomendo que comeces por aí: se eu tiver "numero = 123" e quiser acrescentar-lhe o dígito 4, como é que eu faço? Começa por escrever um pequeno programa que lê um número do utilizador, depois lê outro que só tem um dígito, e imprime o resultado final. Exemplo:

Código:
Introduza um número: 25
Qual é o dígito que pretende acrescentar a este número? 6
Resultado: 256

NOTA: Não vale juntar strings. Há uma maneira de "acrescentar" o dígito ao final do número, com operações matemáticas. Se conseguires chegar lá, tens parte do teu problema resolvido.
 
Back
Topo