2010-08-03 14 views
9

¿Cuál sería un buen conjunto de ejercicios de programación que ayudaría a los novatos de Python a aprender el uso de la construcción "if ... else"? Podría cocinar lo siguiente, ¿sabes algo más?¿Cuáles son las buenas preguntas de programación para ejercer el uso de "if ... else" en Python?

  1. Encuentra el más grande/más pequeño de los tres números.
  2. Dada una fecha (año, mes, día), encuentre la fecha siguiente.

La mayoría de los destinatarios no han tenido una gran exposición a la programación, y me gusta acostumbrarme a pensar correctamente sobre "si ... más" (y todo lo demás, en debido tiempo).

+0

Acerca de ejemplos: 1. hay algún tipo de max (lista) y min (lista). 2. debe haber algún tipo de aritmética de fecha en python. – foret

+1

Por favor haga esta pregunta de Community Wiki. –

Respuesta

6

Es difícil para los usuarios que han estado programando durante años "obtener" lo que se siente comenzar desde la nada. Me mantendría alejado de cualquier cosa que necesite más de 5 líneas de código.

que necesita para decidir el orden en que se cubre cosas tales como la entrada de usuario, de salida, si no puede, cuando, para, presentar io etc.

Al cubrir SI es lo que ya saben cómo conseguir algún usuario ¿entrada? Imprimir algunos resultados? Codifique un bucle FOR? Hacer aritmética en enteros? Determine si un número es divisible por otro número.

Las respuestas a estas preguntas limitan sus ejemplos para IF.

Sugeriría hacer Salida, Aritmética, FOR, Divisibilidad (módulo), Entrada de usuario antes de hacer SI.

Entonces puedo plantear problemas tales como

Print the first 100 odd numbers 
Determine the factors of a number entered by the user 
Play a number guessing game (User enters a guess, you print YES or Higher or Lower) 
+0

djna, Ya hemos explicado cómo obtener la entrada del usuario y la salida de impresión. No hay bucles todavía Prueba de aritmética y divisibilidad de enteros, sí. Vamos a cubrir brevemente uno de los bucles, y luego puedo usar sus sugerencias. Gracias. – gphilip

+0

puede usar if/else para determinar si un número ingresado es impar o par. –

+0

No sé cómo lo tomaría el estudiante, pero si pudiera decidir el horario para enseñar Python a los novatos sin ideas preconcebidas, me aseguraré de completar la comprensión de la lista pitonica y tratar ... excepto ... en fin (con el error de ZeroDivision, al hablar acerca de la aritmética) primero, y luego dígale: si necesita muchas líneas de código con una tarea aquí, esto es para ... menos, mientras ... otro, multilínea si ... claro ... para darle poder para hacerlo (tal vez después de que tengan aprendió a hacer funciones y aprendió que sort, max, min están listos y no necesitan hacerlo ellos mismos). –

0

Hice la demostración del tema en DaniWeb by number guess game. Algo similar tal vez?

Usando if..else en la declaración de impresión en lugar de multiline si es mi uso favorito de la construcción.

vi otras respuestas para sugerir cosas para el normal si la declaración por lo que cocinó uno mismo:

pienso en valor práctico sería utilizar si en la declaración de la rotura como reacción a la entrada del usuario. La misma vez que puede enseñar intente ... excepto, es decir, cuándo no usar si está en Python.

1

Pruebe un juego simple, como si se pulsa 'L', gire a la izquierda, si se pulsa 'R', gire a la derecha, si es que hay un monstruo, se muere etc.

+0

Skilldrick, ¿no necesitamos bucles para eso? Aún no hemos alcanzado la etapa de bucle. Gracias. – gphilip

+0

Estoy pensando realmente básico, con mucha repetición. Entonces, en lugar de usar un bucle, simplemente repite el código.Tiene el beneficio adicional de que podrías volver más tarde y mostrarles cuántas líneas de código necesitarías si lo hicieras con un bucle :) – Skilldrick

+0

Gracias Skilldrick, pensaré esto y veré qué puedo hacer con él. – gphilip

8

"Averiguar si un año dado es un año bisiesto "viene a la mente casi de inmediato. Solo denles las reglas y déjenlas sueltas.

Otras posibilidades (aunque con cosas que no sean declaraciones if):

  • caza del Wumpus (puede que tenga que google para éste, que estoy mostrando mi edad).
  • La perenne "detectar una victoria en un juego de tres en raya (tres en raya)" (podría hacer esto con ocho declaraciones if si no desea un bucle).
  • Adivinando un número entre 1 y 100 tan rápido como sea posible (más alto, más bajo).

Por nada más que if/else declaraciones, el año bisiesto es bueno. También podría considerar:

  • Prueba si un número es múltiplo de 3, 5 o 7.
  • Teniendo en cuenta la edad, averiguar si alguien es un bebé, niño, adolescente, adulto o codger de edad.
  • Calcule los grados A a F en función del puntaje final porcentual.
  • Dado un número en la mesa de la ruleta, determine si es rojo/negro, alto/bajo e impar/par.
  • Dada una mano de blackjack, compruebe si está bien o quiebra (esto es bueno ya que J/Q/K se transforma en 10). También podría averiguar si dibujar otra tarjeta (si es un total menor a 17, por ejemplo).

Eso es solo un puñado de posibilidades que podría salirse con la suya.

+0

Gracias. La pregunta del año bisiesto es buena. Para TTT y adivinar el número, ¿no necesitamos algún tipo de bucle también? – gphilip

+0

@gphilip, ah, sí. No me había dado cuenta de que querías simplemente declaraciones de selección. Actualizaré la respuesta. – paxdiablo

+0

paxdiablo, gracias por los comentarios. – gphilip

1

Existen numerosas opciones aquí. Tal vez les permita construir una calculadora simple, teniendo en cuenta división por cero, números impares/pares y similares.

Editar: Encontré este simple excercise on if-else (en java) que puede transformarse en Python.

1

En mi opinión, el estado if es un tema interesante en Python. Yo recomendaría tener en cuenta la filosofía del lenguaje al presentarlo.

La mayoría de las veces, no uso if como alternativa al C++ switch. Prefiero un dictionario de funciones.

También trato de seguir la regla It's easier to ask forgiveness than permission y prefiero detectar excepciones.

Creo que sus ejemplos deberían tener esto en cuenta. Entonces no usaría las ideas monster game o division by zero. Puede ser divertido de implementar, pero no es muy pitónico en mi opinión.

Utilizo principalmente if como filtro.

Creo que no deberías tomar ningún algoritmo difícil como ejemplo si tu objetivo es enseñar la sintaxis del idioma. Aprender a programar es ciertamente un desafío suficiente.

Así que creo que cualquier ejemplo estúpido como el siguiente debería funcionar.

class Song: 
    def __init__(self, title, year): 
     self.title = title 
     self.year = year 

songs = [Song('Blackbird', 1968), Song('Penny Lane', 1967), Song('Jenny Wren', 2005)] 
for song in songs: 
    if song.year < 1970: 
     print song.title, 'by the Beatles' 
    else: 
     print song.title, 'is not a Beatles song' 

También podría ser un primer paso para la comprensión de la lista si planea mostrarla.

songs = [Song('Blackbird', 1968), Song('Penny Lane', 1967), Song('Jenny Wren', 2005)] 
print [song.title for song in songs if song.year<1970] 
+0

luc, Me temo que su respuesta es un poco desagradable para mí, por no decir nada sobre mis estudiantes :-) – gphilip

+0

+1: buenos puntos y ejemplos (@gphilip, por favor, aprende lo que @luc sugiere mientras estás re enseñanza). Además, buena selección de canciones! :-) – GreenMatt

+0

Definitivamente estoy en segundo lugar del uso de la lista de comprensión. No enseñe la reimplementación de ciclo por contador manual, cuando generalmente debe evitar el estilo de indexación en Python. Incluso mi respuesta es deliberadamente sin código de golf, orientada a la claridad. –

0

Una vez que llegan a un bucle y/o funciones, un gran uno sería "cuatro es mágica" - cuatro es la única palabra con el mismo Número de letras como el número, y se supone que todos los números convergen a las cuatro.Así que el juego es algo como esto:

seventeen is nine 
nine is four 
four is magic 

o (espacios de descuento):

one hundred is ten 
ten is three 
three is five 
five is four 
four is magic 

Por supuesto, si sólo quería que se adhieren a if/else en el momento en que podría muy fácilmente hacer esto para los números 0-10, y solo tienen una serie de 11 bloques if ... else (1-5 y necesitarías incluso menos).

+0

Esto es Code Golf: Four is magic http://stackoverflow.com/questions/3230978/code-golf-four-is-magic, las soluciones Pythos para ello, incluidas las mías, no tienen una sola instrucción if. –

+0

@Tony, eso no significa que la lógica de/else sea inapropiada. Demonios, la solución más directa prácticamente pide declaraciones simples de ramificación. Además, el código de golf es * código * no típico (si es así, ¡dígame dónde trabaja para que pueda evitar sus productos!). Por supuesto, el código de golf y los deseos de OP son dos cosas completamente diferentes. Y ha estado programando el tiempo suficiente para saber que puede abordar cualquier problema desde una variedad de formas diferentes (funcional, OOP, imperativo, bla, bla, bla). –

+0

La solución más directa para mí sin códigos de golf todavía es la búsqueda en el diccionario. Por supuesto, cualquier cosa puede programarse de muchas maneras, seguramente el problema retrocedería muy bien en Prolog o podría hacer un algoritmo recursivo con if (si el número es más de veinte ... si number == 4: print "Four is magic"). Solo me preocupaba que los estudiantes adquieran el hábito de usar si .. elif cuando debería. Y revertí los cambios que alguien hizo para acortar mi solución. Debería ser fácilmente comprensible (simple búsqueda de número hexadecimal). –

0

me gustan los "Tres hombres y un mono en una isla" problema:

tres hombres están varados en una isla desierta con un mono. Recolectan todos los cocos y los ponen en una gran pila. Luego durante toda la noche cada hombre se levanta en secreto y toma 1/3 de la pila restante y la oculta. Cuando divide la pila en tercios, queda 1 restante que le da al mono . Luego, en la mañana después de todos despiertan, dividen la pila en 1/3rds ... con 1 sobrante para el mono. ¿Cuántos cocos había en originalmente?

La estrategia general para resolver esto es utilizar un bucle for para verificar todos los números del 1-10,000 (o algún otro número grande). Debe usar las declaraciones if para verificar el resto. Posteriormente, puede ampliar este problema a un problema general de X-men y Y-monkeys ... esto requiere un for-loop anidado.

0

También podría preparar a sus programadores principiantes para pasar el FizzBuzz test. Al ver cómo esta es una función de filtrado muy común para la contratación de programadores que podría citar:

"Después de completar esta misión que le está por encima de 199 de cada 200 programadores que se aplican a las posiciones profesionales"

0

En en mi conferencia les pedí que implementaran is_between_5_8(x) (lo admito, no hay un motivo ulterior con el uso de 5 y 8), y luego les di los ejercicios para implementar abs(x) y closest_to_zero(x, y).

Si les has enseñado recursividad Te puedo dar algunas sugerencias más :)

Cuestiones relacionadas