🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

355閲覧

繰り返し文の配列の比較

nagi3

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/03 17:30

前提・実現したいこと

AtCoder ABC143C問題についてです。
このプログラムに対して、[i+1]がリストの中に含まれないのでエラーが発生するというのは分かるのですが、for i in range(N-1):とした場合、なぜエラーが発生しないのでしょうか。-1をする理由がわかりません。
また、
for i in range(N):
if s[i]!=s[i-1]:とした場合、出力結果がおかしくなってしまうのはなぜですか?

list()がなくても正常に動作するのはなぜでしょうか?

発生している問題・エラーメッセージ

IndexError: list index out of range

N=int(input()) s=list(input()) cnt=1 for i in range(N): if s[i+1]!=s[i]: cnt+=1 print(cnt)

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

質問内容と、質問文にあるコードが微妙に一致していませんが、現時点での 質問文にあるコードにデバッグ文を追加してみました。
コードと実行結果を研究してみてください。

p.py

python3

1N = int(input()) 2s = list(input()) 3print(s) 4 5cnt = 1 6for i in range(N): 7 print("i =", i, "s[i + 1) =", s[i + 1], "s[i] =", s[i]) 8 if s[i + 1] != s[i]: 9 cnt += 1 10 11print(cnt) 12

実行例
イメージ説明

投稿2019/11/05 22:03

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

この辺の問題は、基本的な事かと思いますが、、

for i in range(N-1):とした場合、なぜエラーが発生しないのでしょうか。

for i in range(N): の次に print(i) として iの範囲を見てみるとか。

if s[i]!=s[i-1]:とした場合、

こちらも同様に、i の範囲を見て、 s[i] と s[i-1] がどうなるか。

list()がなくても正常に動作するのはなぜでしょうか?

は、s の入力後に、sの値を見てみましょう。 その後に、 print(s[1]) とかして、出力する値を見てみましょう。 (この辺は、python独特か?)

この辺で、意味が分かるでしょうか?

投稿2019/11/04 12:22

pepperleaf

総合スコア6385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

s が NのサイズのListなら、s[i+1]では、s[N]となってしまうってことになるので範囲外ですね
ループをN-1 にすれば、同様にs[N-1]までとなるので範囲外にはなりません

for i in range(N):

if s[i]!=s[i-1]:とした場合、出力結果がおかしくなってしまうのはなぜですか?

i が0の場合はどんな動作になるか考えてみよう

投稿2019/11/03 22:09

編集2019/11/03 22:10
y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問