Python - Programa Python

 
Vista:

Programa Python

Publicado por Iván (3 intervenciones) el 03/01/2014 22:46:38
He de hacer un programa, y se me da este enunciado:

Consideramos que un número p es apilable si se puede expresar como 1 + 2 + 3 + ... + n para cualquier n mayor o igual a 2. Se llama apilable porque si tuviéramos p latas de refresco, por ejemplo, podríamos hacer una pirámide con ellas, poniendo n en la base, n-1 encima, así hasta tener una única lata encima del todo.
Escribe un programa con una función llamada apilable que reciba un número entero y que devuelva cierto si el número es apilable y falso si no lo es. El programa principal será el encargado de leer el número inicial y de mostrar el resultado de la función.

Al introducir el número que se pide y presionar ENTER, no ocurre nada. Estoy aprendiendo por mi cuenta vía webs y similares para un trabajo de universidad.
Aquí tenéis el código que de momento tengo hecho, a ver si podríais ayudarme, gracias:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def apilable(p):
    if (p<2):
        print "Error, escriba un nombre mayor o igual a 2"
        raw_input()
 
    if (p>=2):
        i=1
        while (p>0):
            x=p-i
            i=i+1
            x=p,
 
    if (p==0):
        resultado=true
 
    else:
        resutado=false
 
    return resultado
 
 
m=raw_input("Enter number:")
 
n=int(m)
 
w=apilable(n)
 
if (w==true):
    print ("si apilable")
else:
    print ("no apilable")
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Programa Python

Publicado por xve (1646 intervenciones) el 04/01/2014 09:19:35
Hola Iván, el problema creo que lo tienes en este bucle:
1
2
3
4
while (p>0):
    x=p-i
    i=i+1
    x=p,

Indicas que no salga del bucle mientras p sea superior a 0, pero en ningún momento modificar el valor de p, por lo que siempre esta en este bucle infinito.

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Programa Python

Publicado por Iván (3 intervenciones) el 04/01/2014 10:39:25
Si doy un valor a p, quiero que se vaya reduciendo poco a poco hasta que deje de cumplirse esa condición. Primero le resto el valor de i (que empieza siendo 1 pero va incrementando en una unidad por ciclo), luego i=i+1 y al final, el valor que ha tomado x en x = p - i, lo introduzco en la variable p, mediante x=p, y así va disminuyendo p. No se que falla.

Quizás el problema es que vengo de Pascal y me confundo en algo. Pero esta parte que da problemas, en Pascal funcionaba perfectamente...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Programa Python

Publicado por Iván (3 intervenciones) el 04/01/2014 11:03:29
Cambiando x=p, por p=x, creyendo que se solucionaría porque p tomaría el valor de x, y no al revés, pero ahora da un error que no me da tiempo a ver.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Programa Python

Publicado por xve (1646 intervenciones) el 04/01/2014 22:42:29
Hola Ivan, tienes varios errores en tu código incluso ortográficos...

Te comento, que en python true o false no existen, es True o False con la primera letra en mayusuculas.

Revisa este código, es el tuyo modificado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def apilable(p):
    resultado=False
    if (p<2):
        print "Error, escriba un nombre mayor o igual a 2"
        raw_input()
 
    if (p>=2):
        i=1
        while (p>0):
            x=p-i
            i=i+1
            p=x
 
    if (p==0):
        resultado=True
 
    return resultado
 
 
m=raw_input("Enter number:")
 
n=int(m)
 
w=apilable(n)
 
if (w==True):
    print ("si apilable")
else:
    print ("no apilable")

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar