Python句子打印错误

时间:2012-09-01 12:36:22

标签: python if-statement while-loop

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

3 个答案:

答案 0 :(得分:3)

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

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

in测试字符串中的子字符串是 where 。为了测试它是否完全在 start ,Python提供了一个方便地称为startswith的函数:

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

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

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

用空字符串('')替换将有效地删除子字符串。但这又有同样的问题 - 它会在字符串中替换任何地方

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

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

>>> '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'):]

答案 1 :(得分: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'

答案 2 :(得分:1)

好像你几乎就在那里,你只需要从输出中删除“Simon say”:

print word.replace('Simon says', '')