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!
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 str
s.
text = raw_input("Type something:")
left_text = text.partition("!")[0]
>>> 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 :("
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'
Essaye ça:
s = "wolfdo65gtornado!salmontiger223"
m = s.index('!')
l = s[:m]
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