Duda de programacion en Python (Solucionado)

Bueno ante todo disculpas si este tema no va aquí.

Mi problema es el siguiente, llevo unas cuantas semanas aprendiendo a programar con el lenguaje python, es el primer lenguaje de programación que estudio; el tema es que me he aventurado ha escribir pequeños programitas.

En uno de estos programas al usuario se le solicita que introduzca unos valores mediante esta expresion:

valores=int(raw_input('Dame el primer valor'))

el tema es que el programa mas adelante usa ese valor para calcular algunos datos y si se deja en blanco se produce un error en tiempo de ejecución, mi pregunta es como especifico en python esa circunstancia de valor nulo.
Pegare el programa y así podréis ver a que me refiero. Los puntos a los que me estoy refiriendo los marco con (*). También agradeceré cualquier comentario que me ayude a la hora de programar. Gracias.

Pd: Al copiar y pegar no se conserva la indexzación no se por que.

#Aqui el programa nos pregunta el nombre y nos saluda
nombre=raw_input('Dime tu nombre, por favor ')

if nombre!=' ':
    print'Hola %s'%(nombre).upper()
eleccion=1


while  eleccion==1:
    valor=0
    irpf=0

    #Aqui nos pide el valor bruto de la factura y el IRPF que le vamos a aplicar
    while valor==0:
        valor=float (raw_input('Dime el Valor Bruto de la Factura(en EUR): '))
    while irpf==0:
        irpf=float (raw_input('Dime el valor del IRPF: '))

    #El programa realiza los calulos nesesarios
    operacion=irpf*valor/100
    total=valor-operacion
    

    #Una vez realizados los calculos nos muestra los resultados
    print 'El %0.3f por ciento de %0.3f EUR son: %0.3f EUR' % (irpf, valor,operacion),
    print ',y el valor neto de la factura es de: %0.3f EUR' % (total)
    #El programa nos aclara los resultados mostrados y se despide
    print'Como aclaracion decirte que el "." indica decimales'
    print nombre.upper(),
    eleccion=int(raw_input('deseas hacer otro calculo (1 para "SI" 2 para "NO"): '))
    
print'Hasta pronto %s'%(nombre).upper()
print'*****'
print'*FIN*'
print'*****'

Opciones de visualización de comentarios

Seleccione la forma que desee de mostrar los comentarios y haga clic en «Guardar opciones» para activar los cambios.

no se mucha programacion

no se mucha programacion pero si pones un if antes de
operacion=irpf*valor/100
total=valor-operacion

que chequee que ninguno de los dos este en 0?
tipo
if (irpf>0 && valor>0)

{operacion=irpf*valor/100
total=valor-operacion
}

Repito, no se mucho de programacion... jejeje...
Alejandro Estevez
Linux User #470096

Yo tampoco te creas que se

Yo tampoco te creas que se mucho, solo llevo unas semanitas, pero si pongo el if el programa comprobaría la condición, y si no se cumple continúa con la ejecución, y lo que quiero es que si esos datos quedan en blanco, o son 0 vuelva a solicitarlos,

while vendria a decir: mientras esto no se cumpla.

Ademas tal y como esta ahora que es así:
while valor==0:
valor=int(raw_input('Dime el valor de la factura'))
no habría ningún problema si se le da como dato el 0, el problema vendría a esos datos no se le dan valores.

Gracias por tu interés.

Gravatar de vfmmeo

Not none?

No sé mucho de sintaxis pyhton, pero:

if (irpf=!none && valor!=none)

Y tiras adelante con los cálculos.

O incluso puedes usar los while que ya tienes:

while valor==none:
valor=int(raw_input('Dime el valor de la factura'))

Debería funcionar. Pero con esa moda de no declarar las variables, verás qué risa cuando le metan una letra a los valores...

Atentamente,
El BOFH anteriormente conocido como vfmmeo. No había nadie mejor disponible.

Repetid conmigo: Mandriva mola y te lo demostraré
Cada día me gusta más Konqueror para navegar...
Linux user #444536

En cuanto pueda probaré lo

En cuanto pueda probaré lo que me dices, de monmento estoy actualizando la distro 2007 a 2008, y no he podido instalar ningun IDE. Y si me imagino que el tema de no declarar las variables puede dar problemas, en C por ejemplo, por lo que he leido,siempre hay que declararlas, pero ya tendre tiempo de pasarme al C o C++, de momento para empezar en esto de la programacion me parece mas facil empezar con python.
Gracias y un saludo

Ya he probado a daclarar los

Ya he probado a daclarar los valores como:
none
'none'
y no funciona, si se dejan en blanco producen un erro de ejecucion.
Alguien tiene alguna sugerencia mas?

En teoria esta bien

Hola... por lo que leo de tu sintaxis original, lo unico que tenes que agregar es un or al while de cada solicitud (mientras valor sea 0 or valor sea nulo)... ya que esa oracion te va a permitir continuar en bucle hasta que ambas sub-oraciones sean falsas. Esto siempre y cuando lo que quieras controlar sean los valores numericos y el blanco. Si lo que quieres es controlar que no te ingreses letras, la cosa va mas lejos, y es importante conocer las estructuras de datos que soporta el phyton.
De todas formas, y sin animo de ofender, seria bueno que antes de programar cualquier cosa y en cualquier lenguaje conozcas y sepas aplicar la algebra de boole. Es una parte sumamente importante de los algoritmos.
Espero te sirva... saludos...

El problema es que no se

El problema es que no se como indicar ese valor nulo, como se expresa el valor nulo. Mi idea es precisamente esa decirle que si el valor se deja en blanco repita la solicitud de datos hasta que deje de ser nulo, y no me de error.
Gracias por la sugerencia, buscare a ver si encuentro algo que me aclare el tema del algebra, aunque en los dos libros que tengo (el de C y el de python) hablan un poco del tema, pero este programa es mas bien para irme quedando con el lenguaje y como se utilizan las sentencias.

Bueno ya que nadie parecía

Bueno ya que nadie parecía saber responder a mi pregunta me he puesto a ojear programas de otra gente escritos en python y parece ser que para expresar que un dato en blanco se hace mediante: None.
Gracias a todos igualmente.

Gravatar de drakedalfa

Fuera de lugar

Ten en cuenta donde preguntas, BlogDRAKE no es un Foro para Programadores por eso tu pregunta se movio a OT. ¿Solucionaste tu problema?

No intentaba protestar ni

No intentaba protestar ni nada por estilo, simplemente comentaba que no me habia limitado a preguntar y esperar una respuesta, sino que habia seguido investigando por mi cuenta. Y si, parece ser que lo que encontre da resultado. Gracias