このプログラムは、大きな文字列内の文字列が重複して出現する回数を数えます。デバッグと実行異なる出力のpythonを与える
入力:
大きい列(VAR名:search_space)< < abababa
小さいストリング(VAR名:SEARCH_STRING)< < ABA
アンサーPycharm 2016.3:の 'Debug Code'を使用して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]
Outpu 'デバッグコード' を使用してT:(意図したとおりに機能) 'ファイル名を指定して実行コード' を使用して
>? 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
注:ファイル名を指定して実行時にEnterキーを押すため は^ DつまりはCtrl + Dを押すと、改行を挿入します。残りのコードを実行するには、Ctrl + Dキーで管理する唯一の方法です。しかし、CTRL + Dがなくても、コードのリモートテストが完了すると、不一致が残ります。(自己ガイド非証明書コースの一部です)
注:この演習では標準入力と出力を使用する必要があります。
for curr in search_space:
は、search_spaceの長さに渡ってループが繰り返されるため、それ以上の時間を必要とするようです。
なぜブレイクコマンドは機能しませんか?
私の質問:
- ですが、なぜでしょうか?
- &このようなイベントを理解し、予見するために、どのコンセプトを読んでいますか?
- なぜデバッグモードとランモードの相違がありますか?
- 将来のコードでこのエラーを予見し、防止するにはどうすればよいですか?
- これを実行するにはCtrl + Dよりも良い方法はありますか?この粗末なトリックは、ターミナルやIDLEでは動作しません。
stdin: 'sys.stdin.read()'から2回読み込みます。このメソッドは、そのストリームから最後まで読み込みます( "run"の例のように、行末ではありません)。それは一度だけ呼び出されるべきであり、後でstdinに触れてはいけません。 –
ありがとうElmar! len(search_string)がゼロだったので何かが間違っていたことに気付きました。 ここではreadline()は良いでしょうか? 私がread()を使用すると、sとtの間の入力をどのように分配するのですか? –
はい、 'readline()'を使うか、後で 'split(" \ n ")' –