CONTENTS コンテンツ

ChatGPTを使ってPythonを学ぼう!(6)

ChatGPTを使ってPythonを学ぼう!

2024.02.04

 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コードは、指定された句読点(ピリオド、カンマ、コロン、セミコロン、感嘆符、疑問符)を文字列から取り除く目的で基本的には正しく機能します。ただし、いくつかの改善点があります。

  1. 関数名の命名規則: Pythonでは、関数名は通常スネークケース(小文字とアンダースコア)で記述されます。したがって、remove_punctuationsは適切ですが、引数str_engsentencesstr_eng_sentencesのように改名した方が良いでしょう。
  2. 変数名の改善: 引数名str_engsentencesは、型を示唆するstr_を含んでいますが、これはPythonの慣習にはあまり従っていません。単純にeng_sentencestextのような名前の方が一般的です。
  3. コードの効率性: 各句読点を個別に置き換えるのではなく、ループを使用してこれを行うことができます。これにより、コードがより簡潔かつ拡張可能になります。

コードの改善版を以下に示します:

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. インデント – タブではなくスペースを使用し、1レベルのインデントにつき4スペースを使う。
  2. 最大行長 – 1行は最大79文字まで。長い行は適切に折り返す。
  3. 関数とクラスの間隔 – トップレベルの関数やクラスの定義の間には2行の空行を入れる。クラス内のメソッド定義の間には1行の空行を入れる。
  4. インポート – インポートはファイルの最初で、標準ライブラリ、サードパーティのライブラリ、ローカルアプリケーション/ライブラリの順にグループ分けし、それぞれのグループ間に空行を入れる。
  5. スペースの使用 – 演算子の前後やコンマの後にはスペースを入れるが、括弧やブラケット、ブレースの直内側にはスペースを入れない。
  6. コメント – コメントは明確で最新の情報を反映するものでなければならず、不要なコメントは避ける。コメント行は「#」の後にスペースを1つ入れる。
  7. 命名規則 – クラス名はCamelCase、関数や変数名はsnake_caseで書く。常に意味のある名前を付ける。
  8. 比較演算子Noneとの比較は == ではなく is を使用する。
  9. 文字列の連結 – 文字列の連結には + よりも join メソッドを使用することが推奨される。
  10. 例外処理except 文では具体的な例外を指定し、裸の except: を避ける。

 うーん、これらを気にしながら練習するのは脳の容量(メモリ)が足りなくなる。コード書いてみたときに「PEP8に違反している箇所を指摘して、修正してください」と聞くルーチンを作るべきか。

次回に続く

この記事をシェアする