此程序计算较大字符串中字符串重叠出现次数。
输入:
更大的字符串(var name:search_space)<< ABABABA
较小的字符串(var name:search_string)<< ABA
使用Pycharm 2016.3中的“调试代码”进行回答:3
使用Pycharm 2016.3中的“运行代码”进行回答:7
预期答案:3
我的代码:
import sys
def count_substring(search_space, search_string):
search_space = search_space.lower()
search_string = search_string.lower()
if search_space:
search_space = search_space.split('\n')[0]
if search_string:
search_string = search_string.split('\n')[0]
lower = 0
upper = len(search_string)
curr = ' '
count = 0
for curr in search_space:
selected = search_space[lower:upper]
if search_string == selected:
count += 1
lower += 1
upper += 1
if upper > len(search_space):
break
return count
if __name__ == '__main__':
s = sys.stdin.read()
t = sys.stdin.read()
occurance_count = count_substring(s, t)
sys.stdout.write(str(occurance_count))
修改了代码以帮助阐明错误:
for idx, curr in enumerate(search_space):
print(idx, curr)
print(count)
selected = search_space[lower:upper]
使用'Debug Code'输出:(按预期工作)
>? abababa <ENTER>
>? aba <ENTER>
0 a
0
1 b
1
2 a
1
3 b
2
4 a
2
3
使用“运行代码”输出:
abababa
aba
^D
0 a
0
1 b
1
2 a
2
3 b
3
4 a
4
5 b
5
6 a
6
7
注意: 按下^ D即Ctrl + D,因为在运行期间按ENTER键会插入换行符。 Ctrl + D是我设法让剩下的代码运行的唯一方法。但即使没有CTRL + D,当代码的远程测试完成时,差异仍然存在(这是自我导向的非证书课程的一部分)
注意:我必须使用标准输入和输出进行此练习。
在我看来,使用for curr in search_space:
使循环在search_space的整个长度内迭代,因此比它应该的次数多。
为什么Break命令不起作用?
我的问题:
答案 0 :(得分:0)
Elmar Peise评论说:
你从stdin读取了两次:sys.stdin.read()。此方法从该流中读取直到其结束(而不是在&#34;运行&#34;示例中的行尾)。它应该只被调用一次,之后你不应该触摸stdin。
Qubit写道:
我用readline()替换了read(),结果一切正常
如果有人有更多有用的金块要分享,请这样做并感谢你,但我的特殊困境现在已经解决,所以将此标记为答案。
谢谢Elmar!
答案 1 :(得分:0)
代码从stdin
:sys.stdin.read()
读取两次。此方法从该流读取直到其结束(不是“运行”示例中的行尾)。它应该只调用一次,之后你不应该触摸stdin
。
如果您想逐行阅读输入,请使用sys.stdin.readline()
。