suma de un entero en pyhon [RESUELTO]

Iniciado por Joe Fraddy, 3 Febrero 2015, 21:09 PM

0 Miembros y 1 Visitante están viendo este tema.

Joe Fraddy

Hola amigos, este es un nuevo problema que tengo que resolver, pero no tengo idea de como hacerlo.

Lo que tengo que hacer, si tengo este numero 1234

debe darme como resultado de la suma 10

Esto es porque previamente he dividido en secciones el numero, sumandose así:

1 + 2 + 3 + 4

Espero puedan ayudarme.

Gracias

engel lex

#1
con un ciclo lo resuelves...

el sumador lo haces
Código (python) [Seleccionar]
sumador = sumador + numero - (numero/10) * 10

la logica de eso es que si numero = 1234
sumador contiene el valor arrastrado
numero / 10 = 123 (porque no lleva decimales)
123 * 10 = 1230
1234 - 1230 = 4


y al final dejas numero en 123 haciendo lo mismo que en el primero paso

el ciclo lo repites mientras numero sea mayor a 0
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Joe Fraddy

#2
No entendí mucho, el caso es que lo que tengo de código es esto:

Código (python) [Seleccionar]
def suma_de_digitos(n):
   for l in n:
#Aqui debe ir mi operacion
       
       print l
r=raw_input('Introduce un numero: ')
print suma_de_digitos(r)


Bueno eso pensado que recorriendo el valor n, no se si este bien de hecho

engel lex

abre la consola de python y prueba lo sieguiente a ver si entiendes mi operacion

primero
>>> a = 1234
para tener a asignado

>>> a - (a/10) * 10
cuanto da esto?

>>> a = a/10
cuanto da esto?

esas ultimas 2 respuestas del codigo son utiles?

Código (python) [Seleccionar]
def suma_de_digitos(n):
   for l in n:


eso está mal porque int no es un tipo iterable
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Joe Fraddy

Perdona mi ignorancia, pero sigo sin entender, he probado con esto y me da error:

Código (python) [Seleccionar]
def suma_de_digitos(n):
    while n > 0:
        sumador = sumador + n - (n/10) * 10
    print sumador
r=raw_input('Introduce un numero: ')
print suma_de_digitos(r)

engel lex

#5
ahora aprendamos a leer los errores, que te dice el error?

UnboundLocalError: local variable 'sumador' referenced before assignment

y tu codigo

Código (python) [Seleccionar]
def suma_de_digitos(n):
   while n > 0:
       sumador = sumador + n - (n/10) * 10
   print sumador


lo que basicamente quiere decir es que "sumador" en el while no existe... te lo sacaste del sombrero y la autoreferencias... tienes que declararla fuera del ciclo si quieres que tenga alcance

ahora veamos los otros errores...

error 1
funcion raw_input
CitarIf the prompt argument is present, it is written to standard output without a trailing newline. The function then reads a line from input, converts it to a string (stripping a trailing newline), and returns that.

es decir toma lo que hay y lo entrega como string... pero eso no nos sirve necesitamos que sea tipo int...

funcion input
CitarReturn an integer object constructed from a number or string x, or return 0 if no arguments are given. If x is a number, it can be a plain integer, a long integer, or a floating point number. If x is floating point, the conversion truncates towards zero. If the argument is outside the integer range, the function returns a long object instead.

entrega lo que sea necesario...

entonces cambia raw_input por input

error 2
while va a ser un ciclo infinito (piensa por qué)

error 3
linea 6... vas a imprimir algo de la funcion, pero la funcion no retorna nada, así que imprimirás un "none"

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Joe Fraddy

Bueno, me he puesto a investigar un poco mas sobre el asunto y he resuelto el problema, seguro hay mas formas de hacerlo, pero este fue el modo en que lo hice yo:

Código (python) [Seleccionar]
def suma_de_digitos(n):
    list=[]
    cont=0
    lst=len(str(n))
    while cont < int(lst):
        list.append(n%10)
        n=n//10
        cont=cont+1
    return sum(list)
w=input("Ingresa un valor entero: ")
print suma_de_digitos(w)


Gracias por sus respuestas, son de gran ayuda!!!

fary

Lo has resuelto de la manera que te explicaron hace dos días, poco habrás tenido que investigar XD
Un byte a la izquierda.