2012-06-22 5 views
-1

chaîne entrée S'il vous plaît: Python et Perl sont les langages de programmationphrases Fractionnement en Python

Python 
Perl 
and 
are 
programming 
languages 

Je veux une entrée à diviser, mais les mots majuscules aller au-dessus. Je pense à utiliser deux listes: une avec les mots de cas de titre et une avec plus bas. J'essaie d'utiliser une instruction if pour placer les mots dans une certaine liste. S'il vous plaît suggérer quelques idées!

Merci

+1

s'il vous plaît nous montrer du code ... – avasal

+0

question pas clair – Fivesheep

+3

c'est vos devoirs? –

Répondre

4

Votre exemple de sortie est erroné, car il ressemblerait à ceci:

Perl 
Python 
and 
are 
languages 
programming 

Tri par le capital premier entraînerait Perl ci-dessus Python parce e vient en premier. En outre, parce que les majuscules viennent en premier, vous pouvez simplement faire

print "\n".join(sorted(a.split())) 

pour obtenir le résultat souhaité.

EDIT: Après avoir relu la question que je suis venu avec ce correctif/sortie:

print "\n".join(sorted(a.split(), key=lambda x: x >= 'a')) 

Sortie:

Python 
Perl 
and 
are 
programming 
languages 

Explication: fonctions de tri en Python sont stable, ce qui signifie que l'ordre des éléments est préservé l'un par rapport à l'autre s'ils ont la même clé de comparaison. La fonction de clé attribuera une valeur de True à tout ce qui est supérieur ou égal à 'a' (qui est une chaîne commençant par une lettre minuscule), sinon False. False compare plus petit que True, de sorte que tout majuscule est déplacé vers l'avant, sans changer l'ordre des mots majuscules ou minuscules.

+0

Mais cela change l'ordre des mots. – pepr

+0

Oh ... Je pense que j'ai mal compris la question. Je vais corriger: P Fixe. – hochl

+0

Mon +1. Belle solution, même si l'on doit réfléchir davantage à la façon dont cela fonctionne. En outre, l'algorithme de tri doit être * stable * (c'est-à-dire préserver l'ordre des éléments avec la même clé). – pepr

1

Si c'est un devoir, vous devriez lui donner une étiquette "devoirs". Quoi qu'il en soit, l'idée d'utiliser deux listes n'est pas mauvaise.

  1. Initialisez les deux listes à celles qui sont vides.
  2. Divisez la phrase d'entrée à l'aide de la méthode .split() de la chaîne pour obtenir les mots.
  3. Utilisez l'expression fractionnée directement dans la boucle for pour traiter les mots extraits.
  4. Si word est la variable de chaîne, alors word[0] est son premier caractère. Si elle est inférieure ou égale à 'Z', il s'agit d'un mot en majuscule et doit être ajouté à la liste des personnes recherchées. Utilisez '\n'.join(lst) pour extraire la chaîne multiligne de la liste de mots.
+0

@hochl: Merci d'avoir corrigé le bogue;) – pepr

+0

+1 Je pense que pour des phrases très longues, l'utilisation de deux listes pourrait être plus rapide qu'une sorte, mais je ne l'ai pas essayé. – hochl

Questions connexes