Python学習編6回目です。
前回は東京大学のPython学習ページで1-4. テストとデバッグを学びました。今回は2-1. 文字列 (string)。
練習問題で引っかかったのでChatGPTに聞く
入力:文字列”str_engsentences”から”,””.””:””;””!””?”を取り除く以下のpythonコードの誤りを指摘してください
def remove_punctuations(str_engsentences):
str_engsentences = str_engsentences.replace(‘.’,”)
str_engsentences = str_engsentences.replace(‘,’,”)
str_engsentences = str_engsentences.replace(‘:’,”)
str_engsentences = str_engsentences.replace(‘;’,”)
str_engsentences = str_engsentences.replace(‘!’,”)
str_engsentences = str_engsentences.replace(‘?’,”)
出力:提供されたPythonコードは、指定された句読点(ピリオド、カンマ、コロン、セミコロン、感嘆符、疑問符)を文字列から取り除く目的で基本的には正しく機能します。ただし、いくつかの改善点があります。
- 関数名の命名規則: Pythonでは、関数名は通常スネークケース(小文字とアンダースコア)で記述されます。したがって、
remove_punctuations
は適切ですが、引数str_engsentences
はstr_eng_sentences
のように改名した方が良いでしょう。 - 変数名の改善: 引数名
str_engsentences
は、型を示唆するstr_
を含んでいますが、これはPythonの慣習にはあまり従っていません。単純にeng_sentences
やtext
のような名前の方が一般的です。 - コードの効率性: 各句読点を個別に置き換えるのではなく、ループを使用してこれを行うことができます。これにより、コードがより簡潔かつ拡張可能になります。
コードの改善版を以下に示します:
pythonCopy code
def remove_punctuations(text):
punctuations = ".,:;!?"
for char in punctuations:
text = text.replace(char, '')
return text
この改善版では、ループを使用してすべての句読点を一度に置き換えています。また、関数と変数の命名がPythonの標準により準拠しています。
おや、合ってるらしい。うーん、お手上げだ。答え見るか。
答え「Returnがない」
あー、どうりでprintさせてNoneが返ってきてたわけだ
入力:PeP8のスタイルのうち、重要なもの、間違いやすいものを10個挙げてください。
出力:PEP 8(Python Enhancement Proposal 8)は、Pythonコードの書き方に関するスタイルガイドです。特に重要かつ間違いやすい部分を10個挙げます。
- インデント – タブではなくスペースを使用し、1レベルのインデントにつき4スペースを使う。
- 最大行長 – 1行は最大79文字まで。長い行は適切に折り返す。
- 関数とクラスの間隔 – トップレベルの関数やクラスの定義の間には2行の空行を入れる。クラス内のメソッド定義の間には1行の空行を入れる。
- インポート – インポートはファイルの最初で、標準ライブラリ、サードパーティのライブラリ、ローカルアプリケーション/ライブラリの順にグループ分けし、それぞれのグループ間に空行を入れる。
- スペースの使用 – 演算子の前後やコンマの後にはスペースを入れるが、括弧やブラケット、ブレースの直内側にはスペースを入れない。
- コメント – コメントは明確で最新の情報を反映するものでなければならず、不要なコメントは避ける。コメント行は「#」の後にスペースを1つ入れる。
- 命名規則 – クラス名は
CamelCase
、関数や変数名はsnake_case
で書く。常に意味のある名前を付ける。 - 比較演算子 –
None
との比較は==
ではなくis
を使用する。 - 文字列の連結 – 文字列の連結には
+
よりもjoin
メソッドを使用することが推奨される。 - 例外処理 –
except
文では具体的な例外を指定し、裸のexcept:
を避ける。
うーん、これらを気にしながら練習するのは脳の容量(メモリ)が足りなくなる。コード書いてみたときに「PEP8に違反している箇所を指摘して、修正してください」と聞くルーチンを作るべきか。
次回に続く