質問: ### 前提・実現したいこと 【概要】 外部のテキストファイルを取り込んだ後、endswithを使ってのIf文の書き換えを試みています。 後述の通り各章のタイトルプリントまでは行き着いたのですが、条件の数字を参照というコードになっていないのと、不要行が残ってしまっている部分の解決についてアドバイスをいただきたいです。 【実現したいこと】 1テキストファイル「rac.txt」を元に、冒頭の目次をプリント 2"Chapter"で始まる行と空白行を削除 3上記2を実行後、各章のタイトルをページ番号付でプリントさせたい ※この際、if文を各章のページ番号の"数字"を参照してプリントするように指示すること 例) 【条件】 ・一つのifブロック内で完結させること ・if文は各章のページ番号の"数字"を参照してプリントするように指示すること ・ブール型ないしネストされたif文を使用 ・elif文は使用できない 【備考】 実現できればendswithの使用は必須ではないのですが、知る限りの使えそうなものがendswithのみのためこちらを記載しています。 現在のコードでは不要な空白行やCHAPTER IIといった行がプリントされてしまっているため、これらを削除した一覧をプリントさせたく思います。
回答: str.endswith は**『特定の文字列で終わるか』**を判定するものです。 ご提示のコードでは完全に使い方を間違えて居ます。 ``` >>> 'abc123'.endswith('int') False >>> 'abcint'.endswith('int') True ``` 目的を考えると、str.endswith の活用は難しいでしょう。 > > CHAPTER IIといった行がプリントされてしまっている > > > むしろこれなら str.startswith で弾けます。 私なら**正規表現**を利用して、『末尾が数字列であるか』判定します。 ``` >>> pattern = re.compile(r'^.+?([1-9][0-9]*)$') >>> >>> bool(pattern.match('abc123')) True >>> bool(pattern.match('abcint')) False ``` これが出題の意に沿った解法であるかどうか分かりませんが。