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