2010-10-10 17 views
1

Ceci est un exercice de "Comment penser comme un informaticien". J'apprends Python/programmation et je ne suis pas sûr de savoir comment accomplir cette tâche.Python - Écrire une fonction qui prend une chaîne comme un argument et affiche les lettres en arrière, une par ligne

Voici un exemple dans le livre qui affiche les lettres en avant, je ne peux pas comprendre comment obtenir l'effet inverse. Doit utiliser une boucle while.

fruit = 'banana' 
index = 0 
while index > len(fruit): 
     letter = fruit[index] 
     print letter 
     index = index + 1 
+1

ne devrait-il pas être 'while index Robus

+2

Urgh. Un autre exercice trivial qui vous demande de faire les choses dans le mauvais sens. –

+0

@Ignacio - sérieux; l'itération doit être plus fréquente. : | – Amber

Répondre

3

Eh bien, il est fondamentalement la même chose, mais:

  1. Vous devez commencer à partir de la dernière lettre à la place du premier, donc au lieu de index = 0, vous aurez besoin index = len(fruit) - 1

  2. Vous devez diminuer l'index au lieu de l'augmenter à la fin de la boucle while, alors index = index + 1 devient index = index - 1.

  3. L'état de la boucle while est différent; vous voulez rester dans la boucle tant que index pointe vers un index de caractères valide. Depuis index commence à partir de len(fruit) - 1 et il obtient un plus petit après chaque itération, il finira par devenir plus petit que zéro. Zéro est toujours un index de caractère valide (il fait référence au premier caractère de la chaîne), donc vous voudrez rester dans la boucle tant que index >= 0 - ce sera la condition while.

Mettre le tout ensemble:

fruit = 'banana' 
index = len(fruit) - 1 
while index >= 0: 
    letter = fruit[index] 
    print letter 
    index = index - 1 
1

comme Simplest:

>>> def print_reversed(s): 
... for letter in reversed(s): 
...  print letter, 
... 
>>> print_reversed('banana') 
a n a n a b 
>>> 

Autre solution possible pourrait mettre l'index le dernier index de la chaîne. Ensuite, vous allez lire la chaîne lettre par lettre en arrière, en abaissant la valeur de l'index de 1 à chaque fois. Ensuite, le snipplet de code que vous montriez pourrait devenir:

>>> def print_reversed2(s): 
... index = len(s) - 1 
... while index >= 0: 
...  letter = fruit[index] 
...  print letter 
...  index = index - 1 
... 
>>> print_reversed2('banana') 
a 
n 
a 
n 
a 
b 
>>> 

Utilisation de l'interpréteur interactif (il suffit de taper « python » dans une invite de commande) pourrait vous aider à expérimenter avec ces snipplets de code. Comme par exemple:

>>> fruit = 'banana' 
>>> len(fruit) 
6 
>>> len(fruit) - 1 
5 
>>> while index >= 0: 
... print "index at: " + str(index) 
... print "fruit[index] at: " + fruit[index] 
... index = index - 1 
... 
index at: 5 
fruit[index] at: a 
index at: 4 
fruit[index] at: n 
index at: 3 
fruit[index] at: a 
index at: 2 
fruit[index] at: n 
index at: 1 
fruit[index] at: a 
index at: 0 
fruit[index] at: b 
>>> 
2

je pense que la façon la plus simple est

print ''.join(reversed('banana')) 

ou, si vous voulez une lettre par ligne

print '\n'.join(reversed('banana')) 

je pense qu'il vaut mieux que rejoindre est la norme façon de fonctionner sur les chaînes, alors ...