Voy a reforzar un concepto relativamente importante: las variables en las funciones no están conectadas al resto de las variables del resto del programa.
Un ejemplo:

Éste código muestra todas las formas diferentes de pasar valores a la función cheese_and_crackers. Podemos pasar números, ecuaciones matemáticas, y combinar ecuaciones matemáticas con variables.
En cierto modo, los argumentos de una función son algo así como el carácter = cuando creamos una variable. De hecho, si puedo usar = con algo, normalmente puedo pasarlo a una función como un argumento.
Ejecuto el programa y … 
A ver si lo he entendido…
Voy comparando el programa con lo que ejecuta en el terminal, y si coincide con lo que creía yo que deberia de salir en pantalla antes de ejecutarlo.
Para empezar me llama la atención que empiece a ejecutar a partir de la línea 8 del código del programa y luego vuelva atrás, pero lo entiendo. Al fin y al cabo está dando valores a la función cheese_and_crackers que de la línea 1 a la 5 está definida, pero sin valores específicos.
En el resto de párrafos se repite lo mismo, pero cambiando los valores y mostrando las 4 frases del principio, pero con los valores cambiados y las modificaciones añadidas que se van proponiendo.
En fin. Si. En principio sigue siendo bastante intuitivo.
Lo comento más…

ALGUNAS PREGUNTAS
P: ¿Y si quiero preguntar al usuario por el número de cheese y crackers?
R: Sólo necesito usar int para convertir lo que se obtiene de raw_input().
P: ¿Creando las variables en las líneas 13 y 14 cambian las variables en la función?
R: No. Éstas variables están separadas y «viven» fuera de la función. Son pasadas por parámetro a la función y se crea una versión temporal sólo para ejecutarla. Cuando la función termina, éstas variables temporales dessaparecen y todo sigue funcionando como antes. Más adelante me quedará más claro.
P: ¿Es malo tener variables «globales» (como en la línea 13 y 14) con el mismo nombre que las variables de la función?
R: Si. Porque desde ese momento no podré estar segura de cuál estaré hablando…pero a veces es necesario usar el mismo nombre o podría hacerlo sin querer. Un lío vamos. Así que en la medida de lo posible, debo evitarlo.
P: ¿Las líneas 12-19 sobrescriben la función cheese_and_crackers?
R: Para nada. Estoy llamándola. Básicamente es un salto temporal a la primera línea de la función, a continuación, después de la última línea de la función regresa. No estoy remplazando la función con cualquier cosa.
P: Mmmm. OK. Me he hecho la una pregunta parecida comentando el programa. Es lo de las variables globales de la pregunta anterior. Le daré otra vuelta.
P: ¿Hay un límite de número de argumentos que puede tener una función?
R: Interesante pregunta. Depende de la versión de Python y el el ordenador que tenga, pero ese límite es bastante generoso. Lo que pasa es que el límite PRÁCTICO es de 5 argumentos aproximadamente, a partir de aquí la función se vuelve «incómoda».
P: ¿Se puede llamar a una función desde dentro de otra función?
R: Si. Haré un juego que haga ésto más adelante.
Debe estar conectado para enviar un comentario.