2016-09-07 1 views
1

Je suis en train de développer le convertisseur Pig Latin de Codeacademy pour mettre en pratique des concepts de programmation de base. Je crois que j'ai la logique presque correcte (je suis sûr que ce n'est pas aussi concis que cela pourrait être!) Et maintenant j'essaie de sortir la phrase converti Pig Latin entré par l'utilisateur sur une seule ligne.Comment puis-je imprimer toute la phrase convertie sur une seule ligne?

Si j'imprime à l'intérieur de la boucle for, elle imprime à chaque fois de nouvelles lignes. Si j'imprime de l'extérieur, il imprime seulement le premier mot car il ne répète pas tous les mots.

Pourriez-vous me dire où je me trompe?

Merci beaucoup pour votre aide.

pyg = 'ay' 

print ("Welcome to Matt's Pig Latin Converter!") 

def convert(original): 
    while True: 
     if len(original) > 0 and (original.isalpha() or " " in original): 
      print "You entered \"%s\"." % original 
      split_list = original.split() 

      for word in split_list: 
       first = word[0] 
       new_sentence = word[1:] + first + pyg 
       final_sentence = "".join(new_sentence) 
       print final_sentence 


      break 

     else: 
      print ("That's not a valid input. Please try again.") 
      return convert(raw_input("Please enter a word: ")) 

convert(raw_input("Please enter a word: ")) 
+0

utiliser 'pr int' pour afficher les valeurs dans les variables (et le texte comme "Je suis avant 'pour'") et voir ce qui se passe dans le programme. Ou apprendre à utiliser debuger. – furas

+2

ajouter ',' à la fin de 'print' pour imprimer en une ligne' print final_sentence, ' – furas

Répondre

0

Essayez:

pyg = 'ay' 

print ("Welcome to Matt's Pig Latin Converter!") 

def convert(original): 
    while True: 
     if len(original) > 0 and (original.isalpha() or " " in original): 
      final_sentence = "" 
      print "You entered \"%s\"." % original 
      split_list = original.split() 
      for word in split_list: 
      first = word[0] 
      new_sentence = word[1:] + first + pyg 
      final_sentence = final_sentence.append(new_sentence) 
      print final_sentence 



      break 

     else: 
      print ("That's not a valid input. Please try again.") 
      return convert(raw_input("Please enter a word: ")) 

convert(raw_input("Please enter a word: ")) 

C'est parce que vous êtes en train de refaire final_sentence à chaque fois dans la boucle au lieu d'ajouter.

0

Je ne suis pas sûr de la logique du programme mais une solution rapide serait d'ajouter toute la final_sentence dans une liste, et après le pour imprimer la liste avec une jointure.

pyg = 'ay' 

print ("Welcome to Matt's Pig Latin Converter!") 

def convert(original): 
    to_print = [] 
    while True: 
     if len(original) > 0 and (original.isalpha() or " " in original): 
      print "You entered \"%s\"." % original 
      split_list = original.split() 

      for word in split_list: 
       first = word[0] 
       new_sentence = word[1:] + first + pyg 
       final_sentence = "".join(new_sentence) 
       to_print.append(final_sentence) 

      print " ".join(to_print) 
      break 

     else: 
      print ("That's not a valid input. Please try again.") 
      return convert(raw_input("Please enter a word: ")) 

convert(raw_input("Please enter a word: ")) 

Ce code fait ce que vous voulez?

0

Votre question est ici:

for word in split_list: 
    first = word[0] 
    new_sentence = word[1:] + first + pyg 
    final_sentence = "".join(new_sentence) 
    print final_sentence 

Vous joindrez un seul mot lui-même. Vous voudrez sauvegarder tous les mots à l'intérieur de la boucle, puis les imprimer une fois que la boucle les aura tous traités.

final = [] 
for word in split_list: 
    new_word = word[1:] + word[0] + pyg 
    final.append(new_word) 

print ' '.join(final) 

Ou, juste pour le plaisir, voici le one-liner:

print ' '.join([word[1:]+word[0]+'ay' for word in split_list]) 

EDIT: En outre, @furas fait un bon point dans leur commentaire, à imprimer avec sans retour à la ligne simplement ajouter un , à la fin de la déclaration d'impression:

for word in split_list: 
    first = word[0] 
    print word[1:] + first + pyg,