こんにちはPyQサポートです。
今回は、「スライスを使い、先頭文字列を取り出したいのですが、なぜ実行されないのでしょうか?」という質問の解決法を紹介します。
質問
文字列の先頭文字列の検索に対しての質問です。 スライスを使い、答えを取り出したいのですが、なぜ下記の書き方だと実行されないのですか?
def main(): """メインの処理.""" with open('input/reservation.csv', encoding = 'utf-8')as f: for row in f: if '高橋' == row[:1]: print(row.rstrip()) if __name__ == '__main__': main()
回答
思い通りに動かない場合は、動かなくなった箇所からさかのぼって原因を探しましょう。
今回は何も表示されない状態なので、表示を行う箇所( print(row.rstrip())
)から確認します。
動かない箇所から遡って原因を特定する考え方
- 何も表示されていない
- 表示を行う箇所である
print(row.rstrip())
が実行されていない - 直前のif文
'高橋' == row[:1]
がTrueになっていない - rowが「高橋」で始まっている場合も、Trueになっていない
-
row[:1]
はrowが「高橋」から始まっている場合、どんな文字列になっているのだろうか? - 毎回の
row[:1]
はなにか確認しよう
上記の手順にしたがって原因を調査する為、if文のひとつ上の行に print(row[:1])
と記述して実行しましょう。これにより、for文のループごとに row[:1]
がどんな文字列を表しているか確認することができます。
for row in f: print(row[:1]) # ←追加 if '高橋' == row[:1]: print(row.rstrip())
出力結果
山 鈴 佐 清 加 山 鈴 高 山 鈴
row[:1]:
だと、最初から1文字目までしか抽出できていませんね。
'高橋' == row[:1]
がTrueになるには、最初から2文字を抽出する必要があります。文字列の最初から2文字まで抽出できるように正しいコードに変えましょう。
if '高橋' == row[:2]:
まとめ
プログラムが思った通りに動かない時には、コードのどこかに誤りがあるはずです。そんな時は、動かなくなった箇所から遡って、原因を調べてみましょう。