7
votes

Ligne de commande Python - entrée à plusieurs lignes

J'essaie de résoudre un problème de krypto sur https://www.spoj.pl en python, qui implique l'entrée de la console.

Mon problème est que la chaîne d'entrée a plusieurs lignes mais est nécessaire comme une seule chaîne dans le programme. Si je viens d'utiliser Raw_Input () et Coller (pour tester) le texte de la console, Python la menace comme j'ai appuyé sur Entrée après chaque ligne -> Je dois appeler Raw_Input () plusieurs fois dans une boucle.

Le problème est que je ne peux pas modifier la chaîne d'entrée de quelque manière que ce soit, il n'a aucun symbole qui marque la fin et je ne sais pas combien de lignes il y a.

Alors, que dois-je faire?


0 commentaires

4 Réponses :


1
votes

Puisque la fin de ligne sous Windows est marquée comme "\ r \ n 'ou" \ n' sur le système UNIX, il est simple pour remplacer ces chaînes en utilisant

votre_input.replace ('\ r \ n', '')


3 commentaires

Je ne peux pas le remplacer comme ceci car Raw_Input () est appelé à chaque ligne séparément.


Ensuite, vous devez collecter vos données dans un tampon ou une liste .... C'est tout droit ..


Je dois appeler Raw_Input () plusieurs fois, une fois pour chaque ligne de mon entrée -> Je ne sais pas combien de lignes il y a -> i essayer une solution de piotrlegnicas -> la boucle ne se terminera pas. Supprimer les pauses n'est vraiment pas un problème après que j'ai rassemblé toute l'entrée.



7
votes

Lorsque vous atteignez la fin du flux en entrée, Raw_Input retournera une chaîne vide. Donc, si vous avez vraiment besoin d'accumuler une entrée entière (que vous devriez probablement éviter les contraintes SPOJ données), faites:

buffer = ''
while True:
    line = raw_input()
    if not line: break

    buffer += line

# process input


3 commentaires

J'ai essayé cela, mais malheureusement cela ne semble pas fonctionner. Si j'appuie sur Entrée après avoir collé le texte, le programme attend toujours plus d'entrées -> J'ai besoin d'appuyer sur Entrée dans la ligne nouvelle et vide. Spoj semble avoir un comportement similaire.


@Dreven: Diver the WhitSpace ( Raw_Input (). Strip () ).


@Dreven: vous pouvez essayer sys.stdin.read () , mais il est probable que ce code et le code ci-dessus échappe à la mémoire disponible.



1
votes

Etant donné que Raw_Input () code> est conçu pour lire une seule ligne, vous pouvez avoir des problèmes de cette façon. Une solution simple serait de mettre la chaîne d'entrée dans un fichier texte et d'analyser à partir de là.

supposant que vous avez INPUT.TXT STROND> Vous pouvez prendre des valeurs comme P>

f = open(r'input.txt','rU')
for line in f:
  print line,


0 commentaires

1
votes

Utilisation de la meilleure réponse ici, vous aurez toujours une erreur EOF qui devrait être traitée. Donc, je viens d'ajouter une manipulation des exceptions ici xxx


0 commentaires