0

我正在编写一个程序,它应该在输入行中读取,直到输入一个空白行。如果该行以 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

您的代码有两个问题:首先,您的if-condition 会巧妙地做错事 - 例如,

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

in测试子字符串是否在字符串中的任何位置。为了测试它是否正好在开始,Python 提供了一个方便地调用的函数startswith

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

您唯一的另一个问题是,目前,您将打印出整个输入字符串,包括您想要删除的“Simon says”。删除它的最简单方法是使用str.replace

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

并且用空字符串 ( '') 替换将有效地删除子字符串。但这又出现了同样的问题——它会替换字符串中的任何地方:

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

但是你可以告诉它最多只替换一个 - 因为你已经知道字符串以“Simon says”开头,所以你知道那将是开头的那个:

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

或者,您可以使用字符串切片 -'fred'[2:]要求从'fred'(所以,从 'e')的第二个字符之后开始的字符串,一直到结尾:

>>> '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

好像你快到了,你只需要从输出中删除“Simon says”:

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