0

空白行が入力されるまで入力行を読み取るプログラムを作成しています。行が Simon で始まる場合、行の残りを出力する必要があります。Simon の言うで始まらない行は無視する必要があります。したがって、次のように出力する必要があるため、プログラムを作成できません。

Enter: jump
Enter: Simon says shout loudly
shout loudly
Enter: simon would like you to eat a frog
Enter: Simon says clap your hands
clap your hands
Enter:

そして、私が作成しているコードは次のとおりです。

word = raw_input("Enter: ")
i = ""
while word != i:
    if 'Simon says' in word:
        print word 
    word = raw_input("Enter: ")
4

3 に答える 3

3

あなたのコードには 2 つの問題がありますif

>>> 'hello, simon'.startswith('simon')
False
>>> 'simon' in 'hello, simon'
True

in部分文字列が文字列のどこかにあるかどうかをテストします。それが正確にstartにあるかどうかをテストするために、Python は便利に呼ばれる関数を提供しますstartswith:

>>> 'simon'.startswith('s')
True

あなたの唯一の他の問題は、現在、削除したい「サイモンが言う」を含む入力文字列全体を出力することです。それを削除する最も簡単な方法は、次を使用することですstr.replace

>>> 'simon says'.replace('simon', 'fred')
'fred says'

また、空の文字列 ( ) に置き換えると''、部分文字列が効果的に削除されます。しかし、これにも同じ問題があります - 文字列のどこでも置換を行います:

>>> 'simon says lets play simon says'.replace('simon says', '')
' lets play '

ただし、多くても 1 つだけを置換するように指定できます。文字列が "Simon said" で始まることは既にわかっているため、それが最初の文字列になることがわかります。

>>> 'simon says lets play simon says'.replace('simon says', '', 1)
' lets play simon says'

または、文字列スライシングを使用することもできます -の 2 番目の文字の後('e' から) から始まり、最後までの'fred'[2:]文字列を要求します。'fred'

>>> 'fred'[2:]
'ed'

"サイモンは言う" は 10 文字なので、それ以降word[10:]はすべて : になりますword。しかし、文字数を間違えると、微妙なバグに簡単につながる可能性があります。これを避けるには、次のように Python に任せることができます。

word[len('Simon says'):]
于 2012-09-01T12:56:24.497 に答える
1

擬似コード:

forever (while True) do the following:
  input a sentence
  if its length is 0: break
  else if it starts with 'Simon says':
     print sentence from the n-th character (sentence[n:]), 
     where n is the length of the string 'Simon says'
于 2012-09-01T12:46:40.723 に答える
1

出力から「サイモンが言う」を削除するだけです。

print word.replace('Simon says', '')
于 2012-09-01T12:48:10.397 に答える