Подтвердить что ты не робот

Анализ ввода строки до тех пор, пока не достигнет определенной буквы на Python

Мне нужна помощь в попытке написать определенную часть программы. Идея состоит в том, что человек будет вводить кучу тарабарщины, и программа прочтет ее до тех пор, пока она не достигнет "!". (восклицательный знак), например:

input("Type something: ")

Типы лиц: wolfdo65gtornado! salmontiger223

Если я попрошу программу распечатать ввод, он должен печатать только wolfdo65gtornado и вырезать что-либо, как только он достигнет значения!! Остальная часть программы анализирует и подсчитывает буквы, но эта часть я уже знаю, как это сделать. Мне просто нужна помощь с первой частью. Я пытался просмотреть книгу, но кажется, что я что-то упустил.

Я думаю, возможно, используя цикл for, а затем устанавливая ограничение на него, но я не могу понять, как сделать случайный ввод вмененного ввода строки анализируемым для определенного символа, а затем избавиться от остальных.

Если бы вы могли помочь, я действительно по достоинству оценил бы это. Спасибо!

4b9b3361

Ответ 1

Встроенный str.partition() метод сделает это за вас. В отличие от str.split(), он не потрудится вырезать остальную часть str в разные str s.

text = raw_input("Type something:")
left_text = text.partition("!")[0]

Ответ 2

>>> s = "wolfdo65gtornado!salmontiger223"
>>> s.split('!')[0]
'wolfdo65gtornado'
>>> s = "wolfdo65gtornadosalmontiger223"
>>> s.split('!')[0]
'wolfdo65gtornadosalmontiger223'

если он не встречает символ "!", он просто захватит весь текст. если вы хотите вывести ошибку, если она не соответствует "!", вы можете просто сделать следующее:

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

Ответ 3

Вы хотите 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'

Ответ 4

Попробуйте следующее:

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

Ответ 5

Объяснить принятый ответ.

расщепляющий

Функция partition() разбивает строку в списке на 3 элемента:

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

дам:

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

Доступ к ним как элементы списка:

print (x[0]) ==> 123

print (x[1]) ==> split

print (x[2]) ==> ABC

Ответ 6

Мы можем использовать itertools

s = "wolfdo65gtornado!salmontiger223"
result = "".join(itertools.takewhile(lambda x : x!='!' , s))

>>"wolfdo65gtornado"