2017-03-21 5 views
1

J'ai codé ce programme qui va prendre une phrase utilisateur, remplacer les mots de la phrase utilisateur par leur position et afficher la nouvelle phrase. Cependant quand je l'exécute le programme fonctionne bien mais si la phrase contient plus de 9 mots différents, les positions qui contiennent plus de chiffres sont montrées séparément. voici le code:Erreur d'espacement de sortie

UserSentence = input("Please enter sentence: \n") 
UniqueWords = [] 
NewSentence = "" 

splitsentence = UserSentence 
splitsentence = splitsentence.lower().split() 

for word in splitsentence: 
    if word not in UniqueWords: 
     UniqueWords.append(word) 

for word in splitsentence: 
    NewSentence += str(UniqueWords.index(word)+1) 

NewSentence = ' '.join(NewSentence) 
print (NewSentence) 

si je saisis cette phrase: « cette phrase contient plus de dix mots, mais la sortie est faux, je ne sais pas quoi dire » Le résultat attendu devrait être:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 

Mais au lieu que je reçois tous les numéros tous ensemble, même les numéros doubles chiffres sont séparés par un espace:

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 

quelqu'un peut me aider t o résoudre ce problème?

+0

Essayez 'print (NewSentence)' avant l'appel de 'join()'. –

+0

j'ai déjà essayé mais je reçois toujours la sortie mais groupé comme ceci 12345678910111213141516171819 –

+0

faites à NewSentence une 'liste' et ajoutez-y' NewSentence.append (str (UniqueWords.index (mot) +1)) ' – davedwards

Répondre

1

Vous appelez ' '.join(NewSentence) lorsque votre phrase ressemble à ceci: 1234...111213 alors join() divise le NewSentence en ses caractères individuels. Vous devez à la place ajouter un espace au NewSentence après chaque boucle, au lieu d'appeler join(). Cela devrait être ce que vous voulez:

UserSentence = input("Please enter sentence: \n") 
UniqueWords = [] 
NewSentence = "" 

splitsentence = UserSentence 
splitsentence = splitsentence.lower().split() 

for word in splitsentence: 
    if word not in UniqueWords: 
     UniqueWords.append(word) 

for word in splitsentence: 
    NewSentence += str(UniqueWords.index(word)+1) + " " 

print(NewSentence) 
+0

J'espère que vous ne faites pas l'esprit, mais c'est identique à ma réponse ... mais je l'ai mis de toute façon – Veltro

+0

@Liam vous avez soumis la réponse après que j'ai fait: ||. BTW merci pour +1 –

+0

@downvoters .... toujours dire pourquoi vous downvote –

3

Je pense que vous êtes trop penser au problème.

Si vous voulez des valeurs uniques (sans ordre), utilisez set().

sentence = input("Please enter sentence: \n") 
words = sentence.lower().split() 
unique_words = set(words) 

Ensuite, vous voulez juste une liste de nombres? Les mots eux-mêmes n'ont pas vraiment d'importance, seulement la taille de cette collection.

new_sentence = range(1, len(unique_words)+1) 

print(' '.join(map(str, new_sentence))) 

Sortie

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 

Si les & mots ordonnant fait la matière, puis continuer à l'aide d'une liste, mais vous pouvez le faire que la production finale plus succinctement

new_sentence = [ str(unique_words.index(word)+1) for word in unique_words ] 
new_sentence = ' '.join(new_sentence) 
1

il y avait une erreur à la ligne 13:

NewSentence += str(UniqueWords.index(word)+1) 

vous devez ajouter une entretoise et une fois fait votre code devrait ressembler à ceci:

UserSentence = raw_input("Please enter sentence: \n") 
UniqueWords = [] 
NewSentence = "" 

splitsentence = UserSentence 
splitsentence = splitsentence.lower().split() 

for word in splitsentence: 
    if word not in UniqueWords: 
     UniqueWords.append(word) 

for word in splitsentence: 
    NewSentence += str(UniqueWords.index(word)+1)+" " 

print NewSentence 
+1

J'espère que cela ne vous dérange pas, mais c'est identique à ma réponse ... –

1

Comme les autres réponses suggèrent, vous êtes trop compliquer. Vous devez imprimer une chaîne avec un ensemble de nombres incrémentiels séparés par un espace, un nombre pour chaque mot de la phrase.

Tout d'abord, obtenir la longueur de la phrase en mots:

length = len(UserSentence.split()) 

Ensuite, construire une chaîne sur cette plage:

newSentence = ' '.join([str(i+1) for i in range(length)]) 

(l'argument de la méthode join est une compréhension de la liste , qui vous permet de construire des listes sur une ligne)

Ensuite, imprimez-le:

print(newSentence) 
+1

+1 pour une très bonne approche pour la tâche donnée. Je l'aurais fait exactement de la même manière, mais je voulais illustrer le problème que le PO traitait avec –