web-dev-qa-db-fra.com

Analyser l'entrée de chaîne jusqu'à ce qu'elle atteigne une certaine lettre sur Python

J'ai besoin d'aide pour essayer d'écrire une certaine partie d'un programme. L'idée est qu'une personne entre un tas de charabia et que le programme le lit jusqu'à ce qu'il atteigne un "!" (point d'exclamation) donc par exemple:

input("Type something: ")

Types de personnes: wolfdo65gtornado! Salmontiger22

Si je demande au programme d'imprimer l'entrée, il ne devrait imprimer que wolfdo65gtornado et couper quoi que ce soit une fois qu'il atteint le "!" Le reste du programme analyse et compte les lettres, mais celles que je sais déjà faire. J'ai juste besoin d'aide pour la première partie. J'essayais de parcourir le livre mais il semble que je manque quelque chose.

Je pense, peut-être en utilisant une boucle for et en y plaçant des restrictions, mais je ne peux pas comprendre comment faire pour que la chaîne de caractères imputée au hasard soit analysée pour un certain caractère, puis se débarrasser du reste.

Si vous pouviez m'aider, je l'apprécierais vraiment. Merci!

21
anu_clarset

La méthode intégrée str.partition() le fera pour vous. Contrairement à str.split() cela ne prendra pas la peine de couper le reste des str en différents strs.

text = raw_input("Type something:")
left_text = text.partition("!")[0]
39
Michael Hoffman
>>> s = "wolfdo65gtornado!salmontiger223"
>>> s.split('!')[0]
'wolfdo65gtornado'
>>> s = "wolfdo65gtornadosalmontiger223"
>>> s.split('!')[0]
'wolfdo65gtornadosalmontiger223'

s'il ne rencontre pas de caractère "!", il récupérera tout simplement le texte entier. si vous souhaitez générer une erreur si elle ne correspond à aucun "!" vous pouvez simplement faire comme ceci:

s = "something!something"
if "!" in s:
  print "there is a '!' character in the context"
else:
  print "blah, you aren't using it right :("
11
Ole

Vous voulez itertools.takewhile() .

>>> s = "wolfdo65gtornado!salmontiger223"
>>> '-'.join(itertools.takewhile(lambda x: x != '!', s))
'w-o-l-f-d-o-6-5-g-t-o-r-n-a-d-o'



>>> s = "wolfdo65gtornado!salmontiger223!cvhegjkh54bgve8r7tg"
>>> i = iter(s)
>>> '-'.join(itertools.takewhile(lambda x: x != '!', i))
'w-o-l-f-d-o-6-5-g-t-o-r-n-a-d-o'
>>> '-'.join(itertools.takewhile(lambda x: x != '!', i))
's-a-l-m-o-n-t-i-g-e-r-2-2-3'
>>> '-'.join(itertools.takewhile(lambda x: x != '!', i))
'c-v-h-e-g-j-k-h-5-4-b-g-v-e-8-r-7-t-g'
6

Essaye ça:

s = "wolfdo65gtornado!salmontiger223"
m = s.index('!')
l = s[:m]
4
Mohammad

Pour expliquer la réponse acceptée.

Fractionnement

partition() function divise la chaîne en liste avec 3 éléments:

mystring = "123splitABC"
x = mystring.partition("split")
print(x)

va donner:

('123', 'split', 'ABC')

Access les comme des éléments de liste:

print (x[0]) ==> 123

print (x[1]) ==> diviser

print (x[2]) ==> ABC

0
Harvey