Python Script devuelve “Ninguno” involuntario después de la ejecución de una función

Especificaciones: Ubuntu 13.04 Python 3.3.1

Antecedentes: total principiante a Python; Busqué sobre esta pregunta, pero la respuesta que encontré fue más sobre “qué” que “por qué”;

Lo que pretendía hacer: crear una función que tome las entradas de puntaje de prueba del usuario y arroje calificaciones de letras de acuerdo con una escala / curva de calificación; Aquí está el código:

score = input("Please enter test score: ") score = int(score) def letter_grade(score): if 90 <= score <= 100: print ("A") elif 80 <= score <= 89: print ("B") elif 70 <= score <= 79: print("C") elif 60 <= score <= 69: print("D") elif score < 60: print("F") print (letter_grade(score)) 

Esto, cuando se ejecuta, devuelve: Please enter test score: 45 F None

El “ninguno” no está destinado. Y encontré que si uso (letter_grade(score) lugar de print (letter_grade(score)) , el “ninguno” ya no aparece.

La respuesta más cercana que pude encontrar dijo algo como “Las funciones en Python devuelven Ninguna, a menos que se indique explícitamente lo contrario”. Pero llamé a una función en la última línea, así que estoy un poco confundido aquí.

Así que supongo que mi pregunta sería: ¿qué causó la desaparición de “Ninguno”? Estoy seguro de que esto es algo bastante básico, pero no pude encontrar ninguna respuesta que explique el mecanismo “detrás del escenario”. Así que estoy agradecido si alguien pudiera arrojar algo de luz sobre esto. ¡Gracias!

En Python, el valor de retorno predeterminado de una función es None .

 >>> def func():pass >>> print func() #print or print() prints the return Value None >>> func() #remove print and the returned value is not printed. >>> 

Entonces, solo usa:

letter_grade(score) #remove the print

Otra alternativa es reemplazar todas las impresiones con return :

 def letter_grade(score): if 90 <= score <= 100: return "A" elif 80 <= score <= 89: return "B" elif 70 <= score <= 79: return "C" elif 60 <= score <= 69: return "D" elif score < 60: return "F" else: #This is returned if all other conditions aren't satisfied return "Invalid Marks" 

Ahora usa print() :

 >>> print(letter_grade(91)) A >>> print(letter_grade(45)) F >>> print(letter_grade(75)) C >>> print letter_grade(1000) Invalid Marks 

Las funciones sin una statement de retorno conocidas como funciones nulas devuelven Ninguna de la función. Para devolver un valor que no sea Ninguno, debe usar una statement de retorno en las funciones. Los valores como Ninguno, Verdadero y Falso no son cadenas: son valores especiales y palabras clave en python que se reservan. Si llegamos al final de cualquier función y no hemos ejecutado explícitamente ninguna statement de devolución, Python devolverá automáticamente el valor Ninguno. Para una mejor comprensión vea el siguiente ejemplo. Aquí Stark no está devolviendo nada, así que la salida será None

 def stark(): pass a = stark() print a 

La salida del código anterior es:

  None