Référence de l'élément suivant dans la liste: python
Je suis en train de faire une variation de Codecademy est pyglatin.py pour faire un traducteur qui accepte et se traduit par plusieurs mots. Cependant, je vais avoir des difficultés à traduire plus d'un mot. J'ai été en mesure de transférer les entrées brutes dans une liste et de les traduire dans le premier, mais je ne sais pas comment faire référence à l'élément suivant dans la liste. Toute aide serait grandement appréciée.
def piglatin1():
pig = 'ay'
original = raw_input('Enter a phrase:').split(' ')
L = list(original)
print L
i = iter(L)
item = i.next()
for item in L:
if len(item) > 0 and item.isalpha():
word = item.lower()
first = word
if first == "a" or first == "e" or first == "i" or first == "o" or first =="u":
new_word = word + pig
print new_word
else:
new_word = word[1:] + word[0:1] + pig
# first word translated
L = []
M = L[:]
L.append(new_word)
print L # secondary list created.
again = raw_input('Translate again? Y/N')
print again
if len(again) > 0 and again.isalpha():
second_word = again.lower()
if second_word == "y":
return piglatin()
else:
print "Okay Dokey!"
else:
print 'Letters only please!'
return piglatin1()
OriginalL'auteur Thomas | 2013-10-18
Vous devez vous connecter pour publier un commentaire.
Voici quelques choses à noter que pourrait aider.
i = iter(L)
etitem = i.next()
sont inutiles. Ils n'ont aucun effet dans cette méthode parce que vous sont en train de redéfiniritem
tout de suite après dans la lignefor item in L
. Aller de l'avant et commentaire de ces deux lignes pour voir si cela fait des changements dans votre sortie.for item in L
va aller une fois sur chaque élément de la liste. Le code que vous écrivez dans cette boucle sera exécuté une fois pour chaque élément de la liste. La variableitem
est votre poignée à l'élément de liste d'une itération.for i in range(0,len(L))
. PuisL[i]
sera l'élément actuel etL[i+1]
va vous donner l'postérieure de l'élément.Vous posez la question "nouveau?", sans laisser la boucle fini de le faire sa chose - qui est d'aller sur l'ensemble de la liste. Astuce: essayez de suivre le calcul sur le papier pour un petit exemple. Suivez le code exactement comme il est écrit (pas comme vous aimeriez qu'il se comporter). Cela peut vous forcer à re-penser où mettre le "nouveau" de la logique.
Qu'il fixe, merci. Grande technique. Merci encore pour votre aide.
OriginalL'auteur pravnar
Je travaillais sur ce problème récemment et est venu avec la solution suivante (plutôt que d'utiliser la gamme, l'utilisation énumérer pour obtenir l'index).
Cet exemple montre comment accéder à l'index actuel, l'élément en cours, puis l'élément suivant dans la liste (si elle existe dans les limites de la liste).
OriginalL'auteur acknapp
Il y a quelques légers problèmes avec le code, mais je pense qu'il est l'une des principales raisons pourquoi il ne répétera pas.
Afin de traiter l'ensemble de la chaîne de la
et c'est de réussir lignes devraient être portés à l'extérieur de l'instruction for.
Aussi, vous semble être la mise en L à une chaîne vide à l'intérieur de la boucle:
Ce qui suit est une version modifiée de votre code qui passe en boucle sur l'ensemble de la phrase, puis d'en demander un autre.
Modifications apportées:
le type de retour est une liste de.
Espère que cette aide.
content d'avoir pu aider. Amusez-vous bien 😀
OriginalL'auteur RMcG
Étape par étape:
Si vous définissez la variable d'origine de cette façon:
il sera déjà une liste, donc besoin de devoir supplémentaire.
Quel est le but de ces lignes?
Dans une boucle, vous affectez à la variable mot, quand il est en fait seulement la première lettre du mot, donc ça va être mieux comme ça:
first = word[0]
Alors si vous voulez vérifier si le premier est une voyelle, il vous suffit de faire:
Réponse à votre question réelle: n'attribuez pas L à une liste vide!
Si vous voulez répéter l'action d'une fonction, vous pouvez les appeler de nouveau, pas besoin de réécrire le code.
OriginalL'auteur Nadia