2017-02-25 3 views
1

J'ai de la difficulté à convertir une chaîne de caractères chameau en mots séparés et à les ajouter dans une liste. Il complète presque le code mais il donne un IndexError: string index hors de portée. S'il vous plaît quelqu'un pourrait-il aider avec cela ?? La sortie lors de son exécution est:indexerror pour l'édition de boucle

['This'] 
['This', 'Is'] 
['This', 'Is', 'A'] 
['This', 'Is', 'A', 'Camel'] 
['This', 'Is', 'A', 'Camel', 'Case'] 
Traceback (most recent call last): 
for i in string[char]: 
IndexError: string index out of range 

Picture of code

List = [] 
string = "ThisIsACamelCaseString" 
newstring = "" 
count = 0 
char = 0 
null = 0 

for i in string[char:]: 
    if i == i.upper(): 
     newstring = newstring + i 
     count += 1 
     char += 1 
    for i in string[char]:  **< error here** 
     if i == i.upper() and char == 1: 
      null += 1 
     elif i == i.lower(): 
      newstring = newstring + i 
      char += 1 
      count += 1  
     elif i == i.upper() and count > 0: 
      List.append(newstring) 
      print(List) 
      newstring = "" 
      break 
+0

elle imprime la chaîne entière, mais pas le dernier mot « String » de la chaîne réelle –

+0

Ceci est comme un médecin essayant de diagnostiquer une maladie en regardant à travers un trou dans une feuille. –

+0

Je recommanderais d'ajouter des modifications à votre message, et de mettre à jour avec le code opposé à une image. – GedAWizardofEarthSea

Répondre

0

Ceci est ma façon d'accomplir cette tâche. J'ai un compteur appelé lastword, qui garde la trace de la fin du 'mot' précédent. Ensuite, je fais une boucle dans toute la chaîne lettre par lettre (comme vous le faites) et si j'arrive à une lettre majuscule, alors vous réinitialisez la variable lastword à la position actuelle.

x = "ThisIsACamelCaseString" 

#list to store results 
sentence = []    
lastword = 0 
#count keeps track of what position we are at 
for count, letter in enumerate(x): 
    #I use the isupper() methd to see if letter is uppercase 
    if letter.isupper(): 
     word = x[lastword:count] 
     lastword = count 
     #if word is needed because otherwise the first 'word' will be literally nothing 
     if word: 
      sentence.append(word) 
print sentence 
+0

Merci Abid. apprécie l'aide. Est-il possible que vous pourriez m'aider avec le problème avec mon code si j'ai besoin d'utiliser cette version particulière dans cette instance. –

+0

J'ai essayé votre version du code et il n'a pas non plus imprimé le dernier mot qui était String. –

+0

Vous pouvez ajouter cette ligne après la boucle for: 'phrase.append (x [lastword:])' –