タグ: Python

  • Python(統合)

    1.プログラミングについて

    条件分岐について2026-09-18
    classについて2026-09-12
    forループ2026-09-05
    使用するライブラリ2026-09-04
    最初に使うコード2026-08-25

    2.使用方法

    Pythonでできること2026-09-08

    3.動作環境を用意する

    Homebrewインストール2025-08-25
    Pythonインストール2025-08-23
    Pythonインストール確認2025-08-22

    VSコード(Visual Studio Code)に関しては 開発環境(ツール) を参照

    4.演習

    Python学習2025-03-27
  • 条件分岐について

    1.条件に応じて処理を変える

    if文条件がTrueのときに処理を実行する
     条件式がTrue(真)のときに
     インデントされた処理が実行される

    基本の書き方
     age = 18
     if age >= 18: 
      print(“成人です”)

    実行結果
     成人です

    よく使う場面
     年齢チェック
     ログイン判定
     データの妥当確認など
    if-else文条件がTrueかFalseで処理を分ける
     条件式がTrueのときは ifの処理
     Falseのときは elseの処理

    基本の書き方
     num = -3
     if num > 0:
       print(“正の数です”)
     else:
       print(“負の数です”)

    実行結果
     負の数です

    よく使う場面
     正負の判定
     ログインの成否
     条件を満たさない場合の代替処理
    if-elif-else文複数の条件を順番に判定する
     上から順に条件を判定し、
     最初にTrueになった処理を実行
     どの条件も満たさない場合は
     elseが実行される

    基本の書き方
     score = 85
     if score >= 90:
      print(“A評価”)
     elif
      score >= 60:
       print(“B評価”)
     else:
      print(“C評価”)

    実行結果
     B評価

    よく使う場面
     成績の評価
     会員ランクの判定
     複数パターンの処理分け
    ネストしたif文if の中にさらにifを書く (入れ子)
     ある条件がTrueのときに、
     さらに別の条件を判定したい場合

    基本の書き方
     age = 25
     if age > 18:
      if age >= 60:
       print(“シニアです”)
      else:
       print(“成人です)
     else:
       print(“未成年です)

    実行結果
     成人です

    よく使う場面
     年齢区分の詳細判定
     ログイン後の権限チェック
     条件が階層的になっている処理   
  • classについて

    1.結局なに

    classは「設計図」
     オブジェクトの設計図
       どんなデータを持ち、
       どんな処理を持つかを決める
    例
    class User:
    def __init__(self, name, points):
     self.name = name
     self.points = points

    def add_points(self, value):
     self.points += value

    ポイント
     User が設計図
     データ(name, points)を持つ
     処理(add_points)を持つ  
    インスタンスは「実体」
     設計図から実体を作る
       設計図から実体を作ることで、
       実際に使える
    設計図(User)から
     実体1(User1)と
     実体2(User2)を作る

    例
     user1 = User(“Sato”, 1200)
     user2 = User(“Suzuki”, 800)

    ポイント
     設計図から複数の実体を作れる
     それぞれ別のデータを持てる
    __init__ は「最初の設定」
     インスタンスを作るときに
       自動で呼ばれるメソッド
     最初の値を受け取って、
       データを準備する
    インスタンス作成の流れ
     User("Sato", 1200)を実行
     __init__ が自動で呼ばれる
     name と points に値をセット

    例
     def __init__(self, name, points):
     self.name = name
     self.points = points

    ポイント
     作成時に1回だけ実行
     受け取った値をselfに保存する 
     最初の準備係
    selfは「自分自身」
     メソッドの中で、
       そのインスタンス自身を指す
       特別な引数
    selfのイメージ

    例
     user1.add_points(100)を実行
      メソッドの中は add_points
      メソッドを呼び出し
        self = user1
      user1のpointsが更新される

    ポイント
     selfは自分自身を指す
     self.nameで自分のデータに
       アクセス
     自分のデータを変更できる
    メソッドは「そのデータ用の関数」
     インスタンスが持つデータを
       使って処理する関数
    メソッドを使う

    例
     user1 = User("Sato", 1200)
     user1.add_points(150)
     print(user1.points)
       user1のpointsが150増える
       実行結果→ 1350

    ポイント
     インスタンスのデータを使って処理
     何度でも呼び出せる
     状態(データ)を変えられる
    class User:
     def __init__(self, name, points): 
      self.name = name
      self.points = points
    
     def add_points(self, value): 
      self.points += value
    user1 = User("Sato", 1200)
    user2 = User("Suzuki", 800)
    def __init__(self, name, points):
        self.name = name
        self.points = points
     user1 = User("Sato", 1200) 
     user1.add_points(150) 
     print(user1.points)
  • Pythonでできること

    自動化・Web・データ分析・AI分野で活躍

    1.主な仕事

    主な仕事仕事の内容
    データ処理・集計ExcelやCSV作業を効率化
     CSVの集計やレポート作成を自動化

     手作業では数時間かかる集計でも、  
      Pythonを使えば短時間で
      終わらせられる
    Webサービス開発WebアプリやAPIを作る
     予約・ログイン・ECサイトの開発

     サービスの中心部分を作る仕事で、
      身につける内容は多いですが、
      その分、案件の幅も広がりやすい
    AI・データ分析データから予測や判断をする
     売上予測・画像認識・生成AIに活用
    業務の自動化繰返し作業をPythonに任せる
     ファイル整理・ログ集計・通知
  • forループ

    1.基本的な使用方法

    基本形
     リストの要素を順番に取り出して
     処理する
     items = [“りんご”, “バナナ”, “みかん”]
     for item in items:
      print(fruit)

    実行結果
     りんご
     バナナ
     みかん
    range() で回数を指定する
     range(5) は0から4まで (5回くり返す)
     range(開始,終了、ステップ)
       終了の数は含まれない
    for i in range(5):
      print(i)

    range(5) は0から4まで (5回くり返す)

    range(2,7) は2,3,4,5,6の5回
    よく使う制御
     breakとcontinue
    break: 条件を満たしたらループを終了
     for n in range(1, 6):
      if n 3: ・・・3番目で終了
       break
       print(n)

    実行結果
     1,2

    continue:条件を満たした回をskip
     for n in range(1, 6):
      if n == 3: ・・・3番目をskip
       continue
      print(n)

    実行結果
     1,2,4,5
    よくあるまちがいインデントの位置ミス
     for i in range(3):
     print(i)

      インデントがないと
        ループの外で1個だけ実行

     for i in range(3):
      print(1) 

      インデントをそろえると
        ループの中でくり返す

    リストを変更しながら回す
     nums [1, 2, 3, 4]
     for n in nums:
      if n % 2 == 0:
       nums.remove(n)

      要素を削除しながら回すと
        スキップや
        予期しない動作の原因に

     nums [1, 2, 3, 4]
     for n in nums[:]:
      if n % 2 == 0:
       nums.remove(n)

      コピーを作って回す
        スライス(:)を使用する

    range() の終点の勘違い
     for i in range(1, 5):
      print(1)

       「5まで」と思いがちだが
         出力されるのは1, 2, 3, 4

     for i in range(1, 6);
      print(1)

       「5まで(含む)」にしたいなら
         終了を6にする

  • 使用するライブラリ

    1.用途別ライブラリ

    データ分析pandas データ分析
     CSV・Excelの集計・分析

    NumPy 数値計算
     大量の数字を高速処理

    Matplotlib グラフ作成
     データを見える化
    Web開発FastAPI API開発
     Pythonの処理をWeb APIに

    Django Webアプリ
     普通通りのサービス開発

    Requests +
    BeautifulSoup WEbスクレイピング
      Webページから情報を取得
    AI・機械学習scikit-learn 機械学習
     予測モデルを作る

    PyTorch 深層学習
     画像認識・自然言語処理など
    自動化・業務効率化Selenium ブラウザ自動化
     Web操作を自動で実行
    クラウドBoto3 AWS操作
     S3・EC2などをPythonから利用
       Simple Storage Serviceの略
  • 最初に使うコード

    1.5つのコード

    変数値を入れる
     変数は、値をしまう箱
    user “Sato”
    points = 120
    print(user)
    print(points)

    補足
     = は代入
     文字は””で囲む
      数字はそのまま
    if条件で分ける
     条件が合えば、
     その処理を実行
    coupon = True
    price = 3000
    if coupon:
     print(“割引を適用”)

    補足
     if の後ろに条件を書く
     条件がTrue なら実行
     :のあとは字下げ
    forくり返す
     リストの中身を順番に取り出す
    cart = [“りんご”。“牛乳”、“パン]
    for item in cart:
     print(item)

    補足
     forは順番に回す
     item に1つずつ入る
     リスト処理でよく使う 
    list/dictまとめて持つ
     list: 順番つきで並べる
     dict: 名前を付け持つ
    tasks = [“発注”,“検品”,“発送”]

    order (
     ”id”: 101,
     ”status”: “paid”
     )

    補足:
     list は「並び」
     dict は「キーと値」
     どちらも超重要
    関数処理をまとめる
     何度も使う処理は関数にする
    def calc_total(price, shipping):
    return = price * shipping

    total = calc_total (2500, 500)
    print(total)

    補足:
     def で関数を作る
     return で結果を返す
     同じ処理を再利用しやすい

  • Homebrewインストール

    macOS(またはLinux)用パッケージマネージャー

    1.概要

     コマンドラインツールやアプリケーションのインストール、更新、管理を
       非常に簡単に行うことができる(参考URL https://brew.sh/ja/)

     macOS(Linux)の機能を補完する
       gemでRubyGemsを、brewで依存パッケージをインストールする

     “アイコンをドラッグしてインストール…”のようなことをする必要はない
       Homebrew Caskでは
         macOS関連だけではないソフトウェアもインストールできる

    2.インストール

     「ターミナル」から以下のコマンドを使用する

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

     続けて、インストールの完了を「ターミナル」で確認する

    brew -v

    3.使い方

     パッケージのインストール
       brew install <パッケージ名>

     パッケージのアンインストール
       brew remove <パッケージ名>

     インストール済みパッケージの一覧表示
       brew list


     パッケージのバージョンアップグレード
       全てのパッケージ: brew upgrade
       個別のパッケージ: brew upgrade <パッケージ名>

     パッケージの検索
       brew search <パッケージ名>

     Homebrew自体の更新
       brew update

     更新可能なパッケージの確認
       brew outdated

     Gitのインストール
       brew install git

     pythonのインストール
       brew install python

  • Pythonインストール

    WindowsとMacそれぞれの環境に合わせて記述する

    1.Windowsへのインストール

     ・公式サイトからインストーラーをダウンロードする
       公式サイト https://www.python.org/downloads/windows/ にアクセス

       最新バージョンのPythonを選択する
         Download Python 3.x.x のようなボタンを押下し
         インストーラー(.exeファイル)をダウンロードする

     ・インストーラーを実行する
       ダウンロードした.exeファイルをダブルクリックして実行する
       
       「Add Python 3.x to PATH」のチェックボックスに必ずチェックを入れる
         コマンドプロンプトからpythonコマンドを実行できるようになる

       「Install Now」をクリックし、インストール開始

       完了すると「Setup was successful」という画面が表示される
         「Close」をクリックして終了

    2.Macへのインストール

     ・macOSに最初からPythonがプリインストールされている
       インストール状態を確認して、インストール作業の可否を判断する

       最新版をインストールすると旧版が残る
         削除方法を探したが、簡単ではないと分かったので削除せずに放置する

     ・公式サイトからインストーラーをダウンロードする(推奨)
       公式サイト https://www.python.org/downloads/macos/ にアクセス

       最新バージョンのPythonを選択する
         Download Python 3.x.x のようなボタンを押下し
         インストーラー(.pkgファイル)をダウンロードする

     ・インストーラーを実行する
       ダウンロードした.pkgファイルをダブルクリックして実行する

       画面の指示に従って、進める

       完了すると、「インストールが完了しました」と表示される

     ・Homebrewを使用する(参照:Homebrewインストール)
       Mac用のパッケージマネージャー、
         コマンドラインから簡単にソフトウェアをインストール・管理できる

       Pythonのインストールが簡単にできるので、お勧めの方法
         処理ログ参照

    3.確認用プログラムの準備

     テキスト編集プログラム(メモ帳等)を使って作成する

    print("Hello, Python!")

     ファイル名を「my_program.py」としてローカルPC内に保存する
       拡張子「.py」はPythonプログラムを示すもの

    4.Windowsでの動作確認

     ・コマンドプロンプトで確認する
       スタートメニューで「cmd」と入力し、コマンドプロンプトを起動する
       cdコマンドでプログラムファイルが保存されているフォルダを指定する
         例として、cd C:\Users\YourName\Documents 等で指定する
       Pythonプログラムを実行する
         python my_program.py
       結果を確認する
          Hello, Python! と表示されば、インストール完了
         エラーメッセージが表示された場合は、原因を特定する

     ・エラー表示の場合には、
       「Add Python to PATH」にチェックを入れ忘れている可能性がある
       一度Pythonをアンインストールし、再度インストールする

    5.Macでの動作確認

     ・MacでもWindowsと同様に、ターミナルを使って確認する
       Finderで「アプリケーション」→「ユーティリティ」→「ターミナル」
         または、Spotlight検索で「ターミナル」と入力する
       cdコマンドでプログラムファイルが保存されているフォルダを指定する
         例として、cd ~/Documents 等で指定する
       Pythonプログラムを実行する
         python3 my_program.py
       結果を確認する
         Hello, Python! と表示されば、インストール完了
         エラーメッセージが表示された場合は、原因を特定する

     ・Macの場合、pythonコマンドは古いPython 2.xを指している可能性がある
       必ずpython3コマンドで確認する

  • Pythonインストール確認

    ターミナル(またはコマンドプロンプト)でコマンドを実行する

    1.Windows編

     ・コマンドプロンプトを開く
       Win + R を同時に押下、「cmd」と入力し
       Enterキー押下


     ・コマンドを入力する
       python –version

     ・結果の確認
       Python 3.11.4 等と表示されれば、インストール済み
         表示された数字はバージョン番号(随時アップされます)
       その他の文言が表示されれば、インストールされていない

    2.Mac編

     ・ターミナルを開く
       Cmd + Spaceを同時に押下、Spotlightが開く、ターミナルと入力し、
       Enterキー押下


     ・コマンドを入力する
       python3 –version

     ・結果の確認
       Python 3.9.6 などと表示されれば、インストール済み
         表示された数字はバージョン番号、2025年8月現在は3.13
       command not found のようなエラーが出たら、インストールされていない

     ・以下のメッセージが表示された場合
       Last login: Fri Aug 22 13:10:23 on console
    ⚫︎⚫︎⚫︎@⚫︎⚫︎⚫︎MacBook-Air ~ % python3 xcode-select: note: No developer tools were found, requesting install. If developer tools are located at a non-default location on disk, use sudo xcode-select --switch path/to/Xcode.app to specify the Xcode that you wish to use for command line developer tools, and cancel the installation dialog. See man xcode-select for more details.

       コマンドライン開発ツールのインストールを求められている
         Command Line Developer Tools

       Python自体は入っているけれど、
         それを使うためのツールがまだセットアップされていない状態

    3.コマンドライン開発ツール(Mac)のインストール

     ・案内に従ってインストールする(推奨)
       python3 を実行する
         ポップアップメセージに従う
           「Command Line Developer Toolsをインストールしますか?」
         「インストール」をクリック
         数分〜10分ほどで完了する

     ・手動でインストールする(案内のメッセージが表示されない場合)
       ターミナルから入力する
         xcode-select –install
         Command Line Toolsのインストールが始まる
         数分〜10分ほどで完了する

     ・ツールのインストール後に確認
      ・コマンドを入力する
       python3 –version

     ・結果の確認
       Python 3.10.12 などと表示されれば、インストール済み
         表示された数字はバージョン番号(随時アップされます)

  • 練習問題(51〜55)

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    """
    
    演習1(forのネスト)
    1から31までの整数を要素とするリスト1と,1から12までの整数を要素とするリスト2を作成します.リスト1とリスト2から値を1つずつ取ってきた時,1の位が一致する値が何組あるかを求めてください.例えば,1と11は,1の位が両方1なので,カウントに入ります.1と1,31と1なども同様です.
    
    期待する出力:38
    
    演習2(辞書の値ソート)
    辞書が以下のように定義されています.
    
    dic = {'two':324, 'four':830, 'three':493, 'one':172, 'five':1024}
    この時,値で昇順ソートしたと考えた場合のキーの並びを出力してください.
    
    期待する出力:['one', 'two', 'three', 'four', 'five']
    
    演習3(num2freq)
    リストが以下のように定義されています.
    
    nums = [1,2,4,3,2,1,5,1]
    このリストに対して,要素の出現数を格納した辞書num2freqを作成し,出力してください.これはnum2freq[要素] = 出現数となるような辞書で,例えばnum2freq[1] = 3です.
    
    期待する出力:{1: 3, 2: 2, 4: 1, 3: 1, 5: 1}
    
    演習4(word2freq)
    今,文字列が以下のように与えられています.
    
    doc = 'i bought an apple .\ni ate it .\nit is delicious .'
    \nは改行記号なので,3つの文が3行に渡って書かれていることになります.
    この文章中の単語を用いて,キーとして単語,値として出現数を持つような辞書word2freqを作成し,出力してください.ただし,改行記号は単語に含めないでください.
    ヒント:改行記号でsplitしてから空白でsplitすれば,単語に分割できます.
    
    期待する出力:{'i': 2, 'bought': 1, 'an': 1, 'apple': 1, '.': 3, 'ate': 1, 'it': 2, 'is': 1, 'delicious': 1}
    
    演習5(Jaccard係数)
    2つの集合A,Bの類似度を計算する方法として,Jaccard係数というものがあります.例えば,文章の類似度の指標として使われています.
    
    Jaccard(A,B)=|A∩B||A∪B|=AとBの積集合の要素数AとBの和集合の要素数
    2つのリストが以下のように与えられている時,リストを集合と見なした時のJaccard係数の値を求めてください.
    
    list1 = [12,23,34,45,56,67,78,89]
    list2 = [21,32,43,45,65,67,78,98]
    期待する出力:0.23076923076923078
    
    """
    #
    #
    #演習1(forのネスト)
    #
    print("演習1(forのネスト)")
    #
    l1 = list(range(1,32))
    l2 = list(range(1,13))
    #print(l1)
    #print(l2)
    cnt = 0
    for item1 in l1:
      for item2 in l2:
        if item1 % 10 == item2 % 10:
    #      print(item1,item2)
          cnt += 1
    print(cnt)
    #
    #演習2(辞書の値ソート)
    #
    print("演習2(辞書の値ソート)")
    #
    dic = {'two':324, 'four':830, 'three':493, 'one':172, 'five':1024}
    item = list(dic.items())
    #print(item)
    x = sorted(item, key=lambda x:x[1])
    #print(x)
    q = [i[0] for i in x]
    print(q)
    #
    #演習3(num2freq)
    #
    print("演習3(num2freq)")
    #
    nums = [1,2,4,3,2,1,5,1]
    num2freq = {}
    for i in nums:
      num2freq[i] = num2freq.get(i, 0) + 1
    #  print(num2freq[i])
    print(num2freq)
    #
    #演習4(word2freq)
    #
    print("演習4(word2freq)")
    #
    doc = 'i bought an apple .\ni ate it .\nit is delicious .'
    word2freq = {}
    x1 = doc.split('\n')
    #print(x1)
    for x in x1:
      words = x.split()
    #  print(words)
      for word in words:
        word2freq[word] = word2freq.get(word, 0) + 1
    print(word2freq)
    #
    #演習5(Jaccard係数)
    #
    print("演習5(Jaccard係数)")
    #
    list1 = [12,23,34,45,56,67,78,89]
    list2 = [21,32,43,45,65,67,78,98]
    a = set(list1)
    b = set(list2)
    inter_set = a.intersection(b)
    union_set = a.union(b)
    print(len(inter_set) / len(union_set))
    
  • 練習問題(46〜50)

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    """
    
    46. range()
    0から99の100の要素からなるリストを出力してください.
    
    期待する出力:[0,1,2....,99](一部省略)
    
    47. 内包表記
    変数にリスト[5,4,3,2,1]を代入し,要素と添字の値(先頭を0とする)を足し合わせた数値を要素に持つリストを新たに作成してください.
    内包表記を使うと便利です.
    
    期待する出力:[5,5,5,5,5]
    
    48. 例外処理
    下記のように変数が作られています.
    
    a = 0
    b = 5
    この時,abとbaを出力してください.ただし,ゼロ割りが発生した時にはzero divisionを出力します.
    例外処理を用いて書いてみると良いと思います.
    
    期待する出力:0, zero division
    
    49. ビット演算
    変数aに10を,変数bに5を代入します.この時,aとbの論理和,論理積,排他的論理和を出力してください.出力形式は問いません.
    
    期待する出力:15 0 15
    
    50. モジュールのインポート
    mathモジュールをインポートして,θ=π2の下で,sinθ2+ cosθ2の値を計算してください.
    
    期待する出力:1.0
    
    """
    #
    #
    #46. range()
    #
    print("46. range()")
    #
    i = list(range(100))    #正解
    print(i)
    #
    #47. 内包表記
    #
    print("47. 内包表記")
    #
    x = [5,4,3,2,1]
    q = [i + item for i, item in enumerate(x)]   #正解
    print(q)
    #
    #48. 例外処理
    #
    print("48. 例外処理")
    #
    a = 0
    b = 5
    try:
      print(a / b)
    except ZeroDivisionError:
      print('zero division')
    #
    try:
      print(b / a)
    except ZeroDivisionError:  #正解
      print('zero division')
    #
    #49. ビット演算
    #
    print("49. ビット演算")
    #
    a = 10
    b = 5
    print(a | b)
    print(a & b)
    print(a ^ b)   #正解
    #
    #50. モジュールのインポート
    #
    print("50. モジュールのインポート")
    #
    import math            #正解
    theta = math.pi / 2
    #print(theta)
    q = math.sin(theta)**2 + math.cos(theta)**2
    print(q)
  • 練習問題(41〜45)

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    """
    
    41. max
    変数にリスト[11,2,7,13,5]を代入し,最大値を出力してください.
    
    期待する出力:13
    
    42. min
    変数にリスト[11,2,7,13,5]を代入し,最小値を出力してください.
    
    期待する出力:2
    
    43. sum
    変数にリスト[11,2,7,13,5]を代入し,総和を出力してください.
    
    期待する出力:38
    
    44. 昇順ソート
    変数にリスト[5,3,1,4,2]を格納し,昇順に並び替えたリストを出力してください.
    
    期待する出力:[1,2,3,4,5]
    
    45. ラムダ式
    いま,辞書を要素とするリストが次のように与えられています.
    
    li = [{'a': 6, 'b': 7, 'c': 6},
          {'a': 4, 'b': 2, 'c': 3},
          {'a': 1, 'b': 5, 'c': 8}]
    このとき,辞書のキーが'b'の値に関して降順になるようにソートしてください.
    
    期待する出力:[{'a': 6, 'b': 7, 'c': 6}, {'a': 1, 'b': 5, 'c': 8}, {'a': 4, 'b': 2, 'c': 3}]
    
    """
    #
    #
    #41. max
    #
    print("41. max")
    x = [11,2,7,13,5]
    print(max(x))
    #
    #42. mi
    #
    print("42. min")
    x = [11,2,7,13,5]
    print(min(x))
    #
    #43. sum
    #
    print("43. sum")
    x = [11,2,7,13,5]
    print(sum(x))
    #
    #44. 昇順ソート
    #
    print("44. 昇順ソート")
    x = [5,3,1,4,2]
    print(sorted(x))
    #print(sorted(x,reverse=True))
    #
    #
    #45. ラムダ式
    #
    print("45. ラムダ式")
    li = [{'a': 6, 'b': 7, 'c': 6},
          {'a': 4, 'b': 2, 'c': 3},
          {'a': 1, 'b': 5, 'c': 8}]
    print(sorted(li, reverse=True, key=lambda li: li['b']))      #正解
  • 練習問題(36〜40)

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    """
    
    36. 差集合
    変数set1に集合{1,2,3,4,5},変数set2に集合{3,4,5,6,7}を代入し,差集合を出力してください.
    
    期待する出力:{1,2}
    
    37. 型の確認
    3つの変数に以下のように代入したコードがあります.各変数の型を出力してください.出力形式は問いません.
    
    data1 = {'A':1, 'B':2}
    data2 = "hoge"
    data3 = {1,2,3,4,5}
    期待する出力:<class 'dict'> <class 'str'> <class 'set'>
    
    38. strip
    文字列'This is sentence .\n'の改行記号を消したものを出力してください.
    
    期待する出力:This is sentence .
    
    39. split
    変数に文字列'C C++ // python java'を代入し,この文字列を空白で区切った後のリストを出力してください,また,同じことを'/'でも行い,出力してください.
    
    期待する出力:['C', 'C++', '//', 'python', 'java'],['C C++ ', '', ' python java']
    
    40. join
    変数にリスト['This', 'is', 'a', 'sentence']を代入し,これらを空白区切で結合した文字列を出力してください.
    
    期待する出力:This is a sentence
    
    """
    #
    #
    #36. 差集合
    #
    print("36. 差集合")
    x = {1,2,3,4,5}
    y = {3,4,5,6,7}
    print(x - y)
    #
    #37. 型の確認
    #
    print("37. 型の確認")
    data1 = {'A':1, 'B':2}
    data2 = "hoge"
    data3 = {1,2,3,4,5}
    print(type(data1),type(data2),type(data3))  #正解
    """
    #
    #  str    文字列
    #  int    整数
    #  float   浮動小数点
    #  bool    ブール(truem,false)
    # datetime  日付
    # list    配列    [ ]
    # tuple    タプル  ( )
    #  dictionry  辞書    { }
    #  set     集合    { }
    """
    #
    #38. strip
    #
    print("38. strip")
    x = 'This is sentence .\n'
    print(x.rstrip())    #正解
    #
    #39. split
    #
    print("39. split")
    x = 'C C++ // python java'
    print(x.split( ))
    print(x.split('/'))   #正解
    #
    #40. join
    #
    print("40. join")
    x = ['This', 'is', 'a', 'sentence']
    print(' '.join(x))    #正解
    
  • 練習問題(31〜35)

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    """
    
    31. スライス2
    変数に文字列'understand'を代入し,先頭を0番目として,奇数番目の文字列だけを取り出した文字列を出力してください.
    
    期待する出力:nesad
    
    32. スライス3
    変数にリスト[1,2,3,4,5]を格納して,これを逆順に出力してください.
    
    期待する出力:[5,4,3,2,1]
    
    33. 集合
    変数にリスト[1,1,2,3,3,4,5]を代入し,このリストを集合に変換して出力してください.
    
    期待する出力:{1,2,3,4,5}
    
    34. 積集合
    変数set1に集合{1,2,3,4,5},変数set2に集合{3,4,5,6,7}を代入し,積集合を出力してください.
    
    期待する出力:{3,4,5}
    
    35. 和集合
    変数set1に集合{1,2,3,4,5},変数set2に集合{3,4,5,6,7}を代入し,和集合を出力してください.
    
    期待する出力:{1,2,3,4,5,6,7}
    
    """
    #
    #
    #31. スライス2
    #
    print("31. スライス2")
    x = 'understand'
    print(x[1::2])    #正解
    #
    #32. スライス3
    #
    print("32. スライス3")
    x = [1,2,3,4,5]
    print(x[::-1])  #正解
    #
    #33. 集合
    #
    print("33. 集合")
    x = {1,1,2,3,3,4,5}
    print(x)
    #
    x = [1,1,2,3,3,4,5]  #正解
    print(set(x))
    #
    """
     角[ ] 配列
     波{ } 集合
    """
    #
    #
    #34. 積集合
    #
    print("34. 積集合")
    x = {1,2,3,4,5}
    y = {3,4,5,6,7}
    print(x & y)
    #
    #35. 和集合
    #
    print("35. 和集合")
    x = {1,2,3,4,5}
    y = {3,4,5,6,7}
    print(x | y)
  • 練習問題(26〜30)

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    """
    
    26. 辞書(keys)
    変数に,値の組みとして{'A':1, 'B':2, 'C':3, 'D':4, 'E':5}を持つ辞書を格納して,キーを要素としたリストを作成し,出力してください.
    
    期待する出力:['A', 'B', 'C', 'D', 'E']
    
    27. 辞書(values)
    変数に,値の組みとして{'A':1, 'B':2, 'C':3, 'D':4, 'E':5}を持つ辞書を格納して,値(バリュー)を要素としたリストを作成し,出力してください.
    
    期待する出力:[1,2,3,4,5]
    
    28. 辞書(items)
    変数に,値の組みとして{'A':1, 'B':2, 'C':3, 'D':4, 'E':5}を持つ辞書を格納して,キーと値(バリュー)の組みのタプルを要素としたリストを作成し,出力してください.
    
    期待する出力:[('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5)]
    
    29. 辞書(キーの存在確認)
    今,以下のように辞書が作成済みです.
    
    d = {'apple':10, 'grape':20, 'orange':30}
    この辞書に対して,'apple'というキーが存在するかを確認し,存在しなければ,'apple'というキーに対して-1という値を追加してください.また,同様のことを'pineapple'でも行なってください.その後,最終的な辞書を出力してください.
    
    期待する出力:{'apple': 10, 'grape': 20, 'orange': 30, 'pineapple': -1}
    
    30. スライス1
    変数に文字列'training'を代入し,先頭を0番目として,1番目から4番目までを取り出して出力してください.
    
    期待する出力:rain
    
    """
    #
    #
    #26. 辞書(keys)
    #
    print("26. 辞書(keys)")
    x = {'A':1, 'B':2, 'C':3, 'D':4, 'E':5}
    print(list(x.keys()))   #正解
    #
    #27. 辞書(values)
    #
    print("27. 辞書(values)")
    x = {'A':1, 'B':2, 'C':3, 'D':4, 'E':5}
    print(list(x.values()))  #正解
    #
    #28. 辞書(items)
    #
    print("28. 辞書(items)")
    x = {'A':1, 'B':2, 'C':3, 'D':4, 'E':5}
    print(list(x.items()))  #正解
    #
    #29. 辞書(キーの存在確認)
    #
    print("29. 辞書(キーの存在確認)")
    d = {'apple':10, 'grape':20, 'orange':30}
    d['apple'] = d.get('apple',-1)    #正解
    d['pineapple'] = d.get('pineapple',-1) 
    print(d)
    #
    #30. スライス1
    #
    print("30. スライス1")
    x = 'training'
    print(x[1:5])     #正解
    
  • 練習問題(21〜25)

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    """
    
    21. リスト(forによる捜査, enumerate)
    変数に[1,2,3,4,5]の5つの要素を持つリストを格納して,添え字が偶数番目の要素だけ出力してください.出力形式は問いません.ただし,先頭の添え字を0番目とします.
    
    期待する出力:1 3 5
    
    22. リスト(len)
    変数にリスト[11,22,33,44,55,66]を代入し,リストの要素数を出力してください.
    
    期待する出力:6
    
    23. リスト,if(存在確認)
    リスト[11,22,33,44,55]に,値44が存在するかどうかをifを用いて判定してください.存在すればTrue,そうでなければFalseを出力します.
    
    期待する出力:True
    
    24. タプル,リストの負のindex
    変数に[1,2,3,4,5]の5つの要素を持つリストを格納して,リストの先頭の要素と末尾の要素をタプルとして格納し,出力してください.
    
    期待する出力:(1, 5)
    
    25. 辞書
    変数に,値の組みとして{'A':1, 'B':2, 'C':3, 'D':4, 'E':5}を持つ辞書を格納して,出力してください.
    
    期待する出力:{'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
    
    """
    #
    #
    #21. リスト(forによる捜査, enumerate)
    #
    print("21. リスト(forによる捜査, enumerate)")
    x = [1,2,3,4,5]
    for i, sfix in enumerate(x):   #正解
      if i % 2 == 0:
        print(sfix)
    #
    #22. リスト(len)
    #
    print("22. リスト(len))") 
    x = [11,22,33,44,55,66]
    print(len(x))
    #
    #23. リスト,if(存在確認)
    #
    print("23. リスト,if(存在確認)") 
    x = [11,22,33,44,55]
    if 44 in x:             #正解
      print('true')
    else:
      print('false')
    #
    #24. タプル,リストの負のindex
    #
    print("24. タプル,リストの負のindex") 
    x = [1,2,3,4,5]
    y = (x[0], x[-1])       #正解
    print(y)
    #
    #25. 辞書
    #
    print("25. 辞書") 
    x = {'A':1, 'B':2, 'C':3, 'D':4, 'E':5}
    print(x)
  • 練習問題(16〜20)

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    """
    
    16. リスト
    変数にリスト[1,2,3,4,5]を代入し,(先頭を0番目として)3番目の要素を出力してください.
    
    期待する出力:4
    
    17. リスト(結合)
    変数li1に[1,2,3]のリストを代入,変数li2に[4,5]のリストを代入し,2つのリストを結合して出力してください.
    
    期待する出力:[1,2,3,4,5]
    
    18. リスト(append)
    変数にリスト[1,2,3,4,5]を代入し,このリストの末尾に6,7を1つずつ順番に追加してください.その後,最終的なリストを出力してください.
    
    期待する出力:[1,2,3,4,5,6,7]
    
    19. リスト(insert)
    変数にリスト[1,2,3,4,5]を作成し,先頭を0番目としたときに,0番目と1番目の間に100を挿入してください.
    
    期待する出力:[1,100,2,3,4,5]
    
    20. リスト(forによる捜査)
    変数に[1,2,3,4,5]の5つの要素を持つリストを格納して,偶数の要素だけ出力してください.出力形式は問いません.
    
    期待する出力:2 4
    
    """
    #
    #
    #16. リスト
    #
    print("16. リスト")
    x = [1,2,3,4,5]
    print(x[3])
    #
    #17. リスト(結合)
    #
    print("17. リスト(結合)")
    li1 = [1,2,3]
    li2 = [4,5]
    print(li1 + li2)
    #
    #18. リスト(append)
    #
    print("18. リスト(append)")
    x = [1,2,3,4,5]
    x.append(6)
    x.append(7)
    print(x)
    #
    x = [1,2,3,4,5]
    x.extend([6,7])
    print(x)
    #
    #19. リスト(insert)
    #
    print("19. リスト(insert)")
    x = [1,2,3,4,5]
    x.insert(1, 100)
    print(x)
    #
    #20. リスト(forによる捜査)
    #
    print("20. リスト(forによる捜査)")
    x = [1,2,3,4,5]
    for i in x:          #正解
      if i % 2 == 0:
        print (i)
    
    
  • 練習問題(11〜15)

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    """
    
    11. 文字列(replace)
    変数に文字列'some1'を代入し,この文字列中の1をoneに変換してください.
    
    期待する出力:someone
    
    12. 文字列(lower)
    変数に文字列'This Is A Sentence .'を代入し,この文字列を全て小文字に変換してください.
    
    期待する出力:this is a sentence .
    
    13. 文字列(upper)
    変数に文字列'This Is A Sentence .'を代入し,この文字列を全て大文字に変換してください.
    
    期待する出力:THIS IS A SENTENCE .
    
    14. 文字列(文字数)
    変数に文字列'How many characters?'を代入し,この文字列の文字数を出力してください.空白も含めるものとします.
    
    期待する出力:20
    
    15. 文字列 → 数値
    変数aに文字列'34'を代入し,変数bに文字列'43'を代入し,これらを数字と見なした時の和を出力してください.
    
    期待する出力:77
    
    """
    #
    #
    #11. 文字列(replace)
    #
    print("11. 文字列(replace)")
    x = 'some1'
    print(x.replace('1', 'one'))
    #
    #12. 文字列(lower)
    #
    print("12. 文字列(lower)")
    x = 'This Is A Sentence .'
    print(x.lower())
    #
    #13. 文字列(upper)
    #
    print("13. 文字列(upper)")
    x = 'This Is A Sentence .'
    print(x.upper())
    #
    #14. 文字列(文字数)
    #
    print("14. 文字列(文字数)")
    x = 'How many characters?'
    print(len(x))
    #
    #15. 文字列 → 数値
    #
    print("15. 文字列 → 数値")
    a = '34'
    b = '43'
    print(int(a)+ int(b))
  • 練習問題(06〜10)

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    """
    6. if,比較演算子<, >
    変数aに5を代入,変数bに10を代入し,aとbのうち大きい方を出力してください.
    
    期待する出力:10
    
    7. 比較演算子==, bool
    変数aに5を代入し,aが偶数ならTrue,そうでなければFalseを出力してください.(条件式をそのままprintすれば良いです.)
    
    期待する出力:False
    
    8. 文字列(ランダムアクセス)
    変数に,'python'という文字列を代入し,先頭の文字を0番目として2番目の文字を出力してください.
    
    期待する出力:t
    
    9. 文字列(結合)
    'py'と'thon'という2つの文字列をそれぞれ変数に代入し,結合したものを出力してください.
    
    期待する出力:python
    
    10. 文字列(format)
    変数aに5を,変数bに3を代入し,これらの変数を用いて'5%3=2'という文字列を出力してください.
    
    期待する出力:5%2=2
    
    """
    #
    #
    #6. if,比較演算子<, >
    #
    print("6. if,比較演算子<, >")
    a = 5
    b = 10
    if a > b:
      print(a)
    else:
      print(b)
    #
    #7. 比較演算子==, bool
    #
    print("7. 比較演算子==, bool")
    a = 5
    ##print (a % 2 == 0)  正解
    #
    print('odd'if a % 2 == 0 else 'False')
    #
    #8. 文字列(ランダムアクセス)
    #
    print("8. 文字列(ランダムアクセス)")
    x = 'python'
    print(x[2])
    #
    #9. 文字列(結合)
    #
    print("9. 文字列(結合)")
    x = 'py'
    y = 'thon'
    #x += y
    ##print(x + y) 正解
    #
    x += y
    print(x)
    #
    #10. 文字列(format)
    #
    print("10. 文字列(format)")
    a = 5
    b = 3
    #q = "{}%{}={}".format(a, b, a%b)  正解
    #print(q)
    #
    print("{:d}%{:d}={:d}".format(a, b, a%b))
    # 別解
    print(f'{a}%{b}={a%b}')
  • 練習問題(01〜05)

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    """
    1. 変数
    xという変数に2を代入し,それを3倍した数を出力してください.
    
    期待する出力:6
    
    2. swap
    変数aに100を代入し,変数bに200を代入します.その後,両者の値を入れ替えて,aに200,bに100が代入されているようにしてください.出力としてはaとbを出力してください.出力形式は問いませんが,print(a,b)とすると,空白区切で出力できます.
    
    期待する出力の一例:200 100
    
    3. 四則演算+α
    変数aに10を代入,変数bに2を代入し,aとbの和,差,積,商を出力してください.出力形式は問いません.また,商の値が小数か整数かは問いません.
    
    期待する出力の一例:12 8 20 5.0
    
    4. 余り
    変数aに5を代入,変数bに3を代入し,aをbで割った時の余りを求めてください.
    
    期待する出力:2
    
    5. べき乗
    変数aに5を代入,変数bに10を代入し,aのb乗,つまりabを出力してください.
    
    期待する出力:9765625
    
    """
    #
    #1. 変数
    #
    print("1. 変数")
    x= 2
    print(x*3)
    #
    #2. swap
    #
    print("2. swap")
    a=100
    b=200
    a,b=b,a
    print(a, b)
    #
    #3. 四則演算+α
    #
    print("3. 四則演算+α")
    a=10
    b=2
    print(a+b, a-b, a*b, a/b)
    #
    #4. 余り
    #
    print("4. 余り")
    a=5
    b=3
    print(a%b)
    #
    #5. べき乗
    #
    print("5. べき乗")
    a=5
    b=10
    print(a**b)
    #
  • Python学習

    実行例は、「saka.mokumoku」の「Google Colabotory」環境に保存してある
      「項目番号」が名前の先頭に付与してある

    1.学習項目

    08
    07if __name__ == “__main__” 2024-12-31Pythonプログラム
      エントリーポイント設定
    06オブジェクト指向とPython2024-11-05クラスの作成。継承
      インスタンス作成
    05辞書とオブジェクト指向2024-11-05辞書の作成、クラスの作成
    04Pandas DataFrame2024-10-29Pandas DataFrame
      作成・追加・削除
    03可変長引数2019-06-21任意の値を引数にセット
      対応した結果を得る
    02Map関数2023-10-19簡易的にリストで内容を渡す
    01Tkinter2023-10-19画面作成用のライブラリー
     GUI使用のエラー発生

    2.55本ノック

     pythonの練習問題を掲載しているサイトを使用する
       練習問題55本ノック【問題と解答】

    練習問題(01~05)1. 変数
    2. swap
    3. 四則演算
    4. 余り
    5. べき乗
    練習問題(06~10)6. if,比較演算子<, >
    7. 比較演算子==, bool
    8. 文字列(ランダムアクセス)
    9. 文字列(結合)
    10. 文字列(format)
    練習問題(11~15)11. 文字列(replace)
    12. 文字列(lower)
    13. 文字列(upper)
    14. 文字列(文字数)
    15. 文字列 → 数値
    練習問題(16~20)16. リスト
    17. リスト(結合)
    18. リスト(append)
    19. リスト(insert)
    20. リスト(forによる捜査)
    練習問題(21~25)21. リスト(forによる捜査, enumerate)
    22. リスト(len)
    23. リスト,if(存在確認)
    24. タプル,リストの負の添え字
    25. 辞書
    練習問題(26~30)26. 辞書(keys)
    27. 辞書(values)
    28. 辞書(items)
    29. 辞書(キーの存在確認)
    30. スライス1
    練習問題(31~35)31. スライス2
    32. スライス3
    33. 集合
    34. 積集合
    35. 和集合
    練習問題(36~40)36. 差集合
    37. 型の確認
    38. strip
    39. split
    40. join
    練習問題(41~45)41. max
    42. min
    43. sum
    44. 昇順ソート
    45. ラムダ式
    練習問題(46~50)46. range()
    47. 内包表記
    48. 例外処理
    49. ビット演算
    50. モジュールのインポート
    練習問題(51~55)演習1(forのネスト)
    演習2(辞書の値ソート)
    演習3(num2freq)
    演習4(word2freq)
    演習5(Jaccard係数)

  • if __name__ == “__main__” 

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    1.if __name__ == “__main__”の意味

     アンダースコアに惑わされずに読めば
       「__name__に格納されている値が'__main__'という文字列であれば
         この条件文以降の処理を実行するという単なるif文

     Pythonのサンプルコードにおまじないのように書かれている
       このif文の意味と使い方を説明する

    2.使用例

    # mymodule.py
    print("mymoduleが起動されました")
    
    # thenの部分は直接起動時、elseの部分はimportされた時
    if __name__ == "__main__":
        print("このコードはmymoduleを直接実行したときに実行されます",__name__)
    else:
      print("このコードはmymoduleをimportしたときに実行されます",__name__)
    

     上記コードの説明
       import mymoduleの場合
         トップレベルの部分が処理され以下の表示がされる
           ”mymoduleが起動されました”
         if __name__ == “__main__”:の
           __name__ は「main」なのでelse処理が実行される
           ”このコードはmymoduleをimportしたときに実行されます”

       mymoduleを直接実行(mymodule.pyの起動)した場合
         トップレベルの部分が処理され以下の表示がされる
           ”mymoduleが起動されました”
         if __name__ == “__main__”:の
           __name__ は「__main__」なのでthen処理が実行される
             ”このコードはmymoduleを直接実行したときに実行されます”

    # calculator.py
    def add(x, y):
        return x + y
    
    def subtract(x, y):
        return x - y
    
    if __name__ == "__main__":
        print(add(3, 4))
        print(subtract(10, 5))

     上記コードの説明
       直接実行すると、足し算と引き算の結果が出力される

     上記コードの実行結果
       mymoduleが起動されました
       このコードはmymoduleを直接実行したときに実行されます
        *** __main__
       7
       5

    # calculator.py
    def add(x, y):
        return x + y
    
    def subtract(x, y):
        return x - y
    
    if __name__ == "__main__":
        print(add(3, 4))
        print(subtract(10, 5))
    
    import main
    print(add(3,4))

    上記コードの説明
       importすると、足し算と引き算の結果が出力される

    上記コードの実行結果
       ****** import 処理
       mymoduleが起動されました
       このコードはmymoduleをimportしたときに実行されます
       +++ main
       *******
       import 処理
       7
       7

  • モジュール、パッケージ、ライブラリ

    1.3種類の概要

     概要
       モジュール
         Python言語で記述されたプログラムを.pyファイルにして用意する
           モジュールの中には、いくつかのクラスや関数が含まれている

       パッケージ
         モジュールをいくつか集めてパッケージとする

       ライブラリ
         パッケージをまとめて一つのライブラリとする

    2.標準ライブラリ

     Pythonにあらかじめ標準で用意されているライブラリ
       事前にimport文で読み込んで使用する
       ライブラリ一覧、参照サイト

         その中に、そのまま何もせずに使用可能な関数が幾つかある
           import文で読み込む必要がないので非常に便利
           71件の組み込み関数の使用例、参照サイト

  • JavaとPython

    1.開発の分野で比較する

    JavaPython
    ソースコードの記述スタイル変数の宣言時に型を示す必要があるなど、明示的な構文を採用している変数の宣言時に型を示す必要がないなど、簡潔な構文を採用している
    エントリーポイント(プログラムの実行開始点)の実装方法標準で用意されている「main」メソッド(処理)を使う「if __name__ == “__main__”」という特殊な「if」条件文を使う
    機能の実装方法クラス(変数とメソッドをまとめた部品の設計図)を使ってプログラムを組み立てる「オブジェクト指向」の言語モジュール(追加機能群)を使って自由な設計でプログラムを組み立てる言語
    習得しやすさプログラミング初心者にとってとっつきにくい部分があるプログラミング初心者でもとっつきやすい

    2.Javaのmainメソッド

     Javaでmainメソッドを宣言する
       非常に明確に定義された単一のエントリーポイントを持っている
         mainメソッドは、プログラムが最初に実行される場所
       「public static void main(String[] args)」というフレーズが冗長に映る

       例としてmainメソッドを「HelloWorld」クラスに格納する
         mainメソッドの予期しない実行を防ぐことができる
         Javaは構造や制御を明示することを重視しており、
           この厳格さがセキュリティ強化につながっている

    public class HelloWorld {
      public static void main(String[] args){
        System.out.print("Hello World");
      }
    }

     public static void main(String[] args)はJavaの実行に必須のメソッド
       public・・・どこからでも参照可能
       static・・・インスタンス可(new)しなくても外部から使用可能
       void・・・・戻り値なし
       main・・・・メソッド名
       String[]・・引数をString型の配列で受け取る
       args・・・・引数名の複数形でargumentsの略省

       String[] argsはプログラム起動時に指定する値(コマンドライン引数)
         引数名argsは、慣習的にargsが使われる、別の名前でも可
           JavaはC言語の後継であり、C言語の慣習を受け継いでいるため

         C言語で使われている引数名
           argc(argument count(引数の個数))
           argv(argument vector(引数の配列))

     Java 21(2023/9/19にリリース)で
       記述の一部を省略できるようになり、改善されている
         mainメソッドの引数を省略できる
         mainメソッドがpublicじゃなくてもよくなる

       書かなくてよさそうなものを書かずにすむのですっきりする
         mainメソッドをprivateにすることはできない、protectedは可能

    3.Pythonの柔軟なエントリーポイント

     Pythonではエントリーポイントの概念は無い
       スクリプトの先頭から順にコードが実行される

       if name == “main“: という条件文を使うことで
         直接実行された場合にのみ実行されるコードを記述することができる

        if __name__ == “__main__”について
          __name__・・・実行されているモジュール名を指す項目名
           モジュールが直接実行された時には「__main__」とセットされる
           モジュールがimportされた時には「mymodule」とセットされる

       if __name__ == “__main__”以下の部分はimportされただけでは動かない

       __name__の詳しい使い方については
         「Work Shop」の「if __name__ == “__main__”」を参照

    4.違いの理由

     言語の設計哲学
       Java・・・大規模なシステム開発を想定、プログラム構造を明確にする
       Python・・スクリプト言語として誕生、柔軟性と生産性を重視する

     静的型付けと動的型付け
       Java・・・静的型付け言語、コンパイル時に型チェックされる厳密な構造
       Python・・動的型付け言語、実行時に型が決定される柔軟な構造

    5.Pythonの悪意ある命令が実行される危険性

     Pythonで「import」命令でPythonノジュールを読み込むと
       読み込んだタイミングで、トップレベルにある命令が実行される
         関数定義(def)された部分は動かない
         通常のプログラム部分から動き出す

       攻撃者は悪意のある命令をトップレベルに記述し
         このファイルを呼び出すよう、他人に勧める

     対応策
       数多くのユーザの目に触れたであろうファイルをimportする
         ファイルの中身は多くのユーザが認めた結果と思えば良い

  • 辞書とオブジェクト指向

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    1.辞書の作成

    # 辞書
    koizumi = {"name":"小泉","address":"宮城県","email":"info@aaa.bbb"}
    # print(koizumi)
    miyajima = {"name":"宮嶋","address":"宮城県","email":"miyajima@aaa.bbb"}
    # print(miyajima)
    
    print(koizumi["name"])
    print(miyajima["name"])

    2.オブジェクト指向とは

     オブジェクトとは、
       データ(属性)とそれを操作する関数(メソッド)をカプセル化したもの
         猫という「オブジェクト:Object」は
           白くて尻尾があるという「属性:Property」
           手足が4本で歩くという「メソッド:Method」

     クラスという仕組みがある
       クラスには、オブジェクトを作る際のデータやメソッドを定義する
         オブジェクトの設計図である

       オブジェクトを作る際には、必ずクラス(型)を指定する必要がある
         指定したクラスに定義されたデータとメソッドがオブジェクトに備わる

       あるクラスのオブジェクトを作る場合に、
         そのオブジェクトのことをインスタンス(実例)という
           インスタンスをオブジェクトと同じ意味と考えて良い

    3.クラスの作成

    class Profile:
      def __init__(self,name,address,email):
        self.name = name
        self.address = address
        self.email = email
      def print(self):
        print(self.name)
        print(self.address)
        print(self.email)
      def printX(self):
        print("X")
    
    koizumi = Profile("小泉","宮城県","info@aaa.bbb")
    
    print(koizumi.name)
    print(koizumi.address)
    print(koizumi.email)
  • オブジェクト指向とPython

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    1.オブジェクト指向とは

     オブジェクトとは、
       データ(属性)とそれを操作する関数(メソッド)をカプセル化したもの
         猫という「オブジェクト:Object」は
           白くて尻尾があるという「属性:Property」
           手足が4本で歩くという「メソッド:Method」

    2.クラス、インスタンス、オブジェクト

     オブジェクト指向では、クラスというものをプログラムとして記述しておく
       オブジェクトを使いたいときに、Pythonの文法を使って、
       クラスからオブジェクトを作り出す

       作ったオブジェクトのことを「インスタンス(実体:Instance)」と言う
         クラスからオブジェクトを作り出す操作のことを、
         「実体化する」とか「インスタンスを作る」と言う

     クラスとオブジェクトは、1対多の関係
       クラスを作成しておけば、オブジェクトを幾つでも作成できる

     猫の紹介文のテンプレートが「クラス」
       同じテンプレートに違う内容を記入することで、各猫の紹介文を作成する

     各猫が「インスタンス」で、
       猫の紹介文を作成することを「インスタンス化」という

    3.インスタンスの初期化

    # クラスの定義
    class Neko:
      def __init__(self, breed, color, tail, neko_skill):
        self.breed = breed        # 猫種
        self.color = color # 毛の色
        self.tail = tail   # しっぽの有無
        self.neko_skill = neko_skill # ねこ技を設定
    
      # 属性に対して操作を行うメソッドの定義
      def hissatsu(self):
        print(f'{self.breed}の必殺技{self.neko_skill}!')
    
    neko1 = Neko('マンチカン', '真っ白', '長い', 'ネコパンチ')
    neko2 = Neko('スコティッシュフォールド', '三毛猫', 'ふさふさ', 'ネコキック')
    
    # 属性の確認
    print(neko1.color)
    print(neko2.tail)
    
    # メソッドの確認
    neko1.hissatsu()
    neko2.hissatsu()

     __init__() を使用する
       例として def __init__(self, breed, color, tail, neko_skill):

     インスタンスが作成された直後に、初期状態を設定する
       特有のデータ(属性)を割り当てる
         同じクラスの異なるインスタンスが異なる値を持つことができる

    4.selfの使用

     特定のインスタンスの属性やメソッドにアクセスする
       例として self.breedはそのインスタンスの breed 属性を指す
       例として self を使ってメソッドを呼び出すことにより、
             そのインスタンスのコンテキスト内でメソッドが実行される
            メソッドがそのインスタンスのデータを操作できるようになる

    5.クラスの継承、オーバーライド

    class Koneko(Neko):
        def __init__(self, color, tail, name, neko_skill):
            super().__init__('マンチカン', color, tail, neko_skill)
            self.name = name
    
        # hissatsuメソッドをオーバーライド
        def hissatsu(self):
            print(f'{self.color}色の赤ちゃんマンチカンの必殺技{self.neko_skill}!')
    
        # 新しいメソッド(飼い主にごあいさつ)の追加
        def say_hello(self):
            print(f'はじめまして。ワタシの名前は{self.name}だにゃ。')
    
    koneko = Koneko('オフホワイト', '短い', 'しろねこ', 'ねこじゃらし攻撃')
    
    #
    print(koneko.tail)
    print(koneko.breed)
    
    #
    koneko.hissatsu()
    koneko.say_hello()

     super().initを使用する
       親のクラスを呼び出して使用する

     クラスも継承ということを行うことができる
       継承元のクラスを親クラス、継承後のクラスを子クラスという

     クラスを継承することで、
       親クラスの特徴を持ちつつ子クラスに追加の属性を与えることができる
       メソッドを上書きしたり、追加することもできる

     継承・オーバーライドの際にも self が一役担う

  • Pandas DataFrame

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    1.作成方法

     リスト、ディクショナリ、NumPyのndarray、CSVファイル等の
       ファイルに格納された情報をDataFrameに取り込む

     pd.DataFrame(data = 格納するデータ, index = 行名, columns = 列名)

    2.DataFrameの作成

     (1)リストからの作成
       リストに文字列を設定し、引数として渡す

    import pandas as pd
    list1=["a1","a2","a3"]
    pd.DataFrame(data=list1)

     (2)NumPyで作成した配列から、DataFrameを作成する

    import numpy as np
    arr1 = np.array([[1,2,3], [21,22,23], [31,32,33]])
    pd.DataFrame(data=arr1)

     (3)辞書からDataFrameを作成する
       辞書のキーと合わせて、列単位でデータを設定していく

    dict1=dict(Row1=[1,21,31], Row2=[2,22,32], Row3=[3,23,33])
    pd.DataFrame(data=dict1)

     (4)インデックスや列名を指定してDataFrameを作成する
       list1に3行3列のリスト、引数dataにlist1を設定する
       index1にインデックス、引数indexにindex1を渡す
       columns1に列名、引数columnsにリストcolumns1を渡す

    list1=[[1,2,3], [21,22,23], [31,32,33]]
    index1 = ["Row1", "Row2", "Row3"]
    columns1 =["Col1", "Col2", "Col3"]
    pd.DataFrame(data=list1, index=index1, columns=columns1)

    3.DataFrameへの追加・削除

     (1)行を追加する
       最初にデータを準備する

    list2 = [["P001", "iPhone 8 64GB", 85000],
             ["P002", "iPhone X 256GB", 130000],
             ["P003", "iPhone SE 32GB", 37000]]
    columns2 = ["Product ID", "Product Name", "Price (JPY)"]
    df1 = pd.DataFrame(data=list2, columns=columns2)
    df1

       追加するデータ

    df2 = pd.DataFrame(data = [["P004", "iPhone 7 32GB", 10000]], 
                       columns = columns2)
    df2

       追加処理
         True・・・index番号を振り直す
         False・・・index番号はそのまま残る

         axis=0・・・行(index)を対象とする
         axis=1・・・列(columns)を対象とする

    df1 = pd.concat([df1, df2], ignore_index=True, axis=0)
    df1
    df1 = pd.concat([df1, df2], ignore_index=False, axis=0)
    df1

     (2)列を追加する

     注意点は、追加する行の数を合わせること

    df1["Screen Size (in.)"] = [4.7, 5.8, 4, 4.7]
    df1

     (3)行を削除する

     引数inplaceが必要
       True・・・実行結果が保存され置き換わる
       False・・・実行結果が保存されない

    df1.drop([2, 3], inplace = True)
    df1

    (4)列を削除する

       axis=0・・・行(index)を対象とする
       axis=1・・・列(columns)を対象とする

    df1.drop("Screen Size (in.)",axis=1,inplace=True)
    df1
  • 参考文献

    1.教材

    デジタルスキル標準 ver.1.2
     IPA & METI
    2024-07

    2.文献資料

    スッキリわかるPython入門PDF(375ページ)2020-09-25
    スッキリわかるPython入門1234567890
    0 済 済 済 済 済 済 済 済 済 済
    10 済 済 済 済 済
    360済済済済済
    370済済済済済済
    Python 学習教材初心者向け お勧め
    PDF(309ページ)
    筑波大学システム情報系  教材
    「Python ゼロからはじめる
    プログラミング」
     翔泳社 2,068円
    Python 学習教材1234567890
    0
    10
    100
    200
    300
  • Map関数

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある

    1.利点

     map関数を使うと
       煩雑な処理をできるだけ少ない記述量で実現させられる

     シーケンスの構成要素すべてに対して、ある関数の処理を行わせる
       シーケンスとはオブジェクトを順番に処理するためのデータ構造
         複数ある値をひとかたまりとして格納した型のことを言う

       リストなどのオブジェクトに含まれる各要素に対して
         何かしらの変換を加えて別のオブジェクトを生成させることができる
         リスト処理で使われる例
         「number1=〇〇」「number2=〇〇」「number3=〇〇」の変数は
         リストを使って「number_list=[〇〇,〇〇,〇〇,・・・」と書換える

    2.使用例

     使用例:その1
    sample1_list = list(range(5))
    def multi(x):
        y = x*2
        return y
    sample2_list = map(multi, sample1_list)
    print(list(sample2_list))
    

    <その1の説明>
     Xの値を2倍にしてyにセットする関数(multi)を用意する
     list(range(5))で0〜4までの値を(sample1_list)にセットする
     map関数の引数に(sample1_list)を使って0〜4を渡し
       (sample2_list)に(multi)関数の結果を返す

     使用例:その2
    sample1_list = list(range(5))
    sample2_list = map(lambda y: y*2, sample1_list)
    print(list(sample2_list))
    

    <その2の説明>
     def文によって関数定義をせずに
       map関数の第一引数をlambda式で指定する
         lambda(ラムダ)とはある処理に名前を付けずに定義したもの

     シンプルな処理であればわざわざ関数定義をせずにlambda式で表現する
       ある特定の処理を一度しか行わない場合
       ごく限られた範囲でしか使わない場合

  • Tkinter

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある  DeskTopアプリの部品を作成する(アプリ全体の作成ではない)

    1.「Tkinter」というGUIライブラリ

     PythonやRubyなどのGUI作成を支援するための標準ライブラリ
       シンプルで使いやすく、プログラミング初心者でも実装しやすい
       TKはTool Kitの略

     Tkinterを使用すると、
       ボタン・メニュー・テキストボックス等のウィンドウを簡単に作成できる

    2.導入

     Pythonの標準ライブラリーのため導入作業は不要

    3.サンプル

    import tkinter
    import tkinter.messagebox
    
    def say_helloWorld():
        tkinter.messagebox.showinfo(title="Say",message="Hello, World!")
    
    root = tkinter.Tk()
    button = tkinter.Button(root,text="Click me!",command=say_helloWorld)
    button.pack()
    
    root.mainloop()

    4.実行結果

     最初にoutputエリアに「Click me!」とボックスが表示される、クリックする
     次に「Hello, World!」と「OK」ボタンが表示される、「OK」を押して元へ戻る

     実行環境にはモニターデバイスの接続が必須
       Google Colabではエラーになるので注意する

    実行結果

    5.補足(事例)

    import tkinter
    import tkinter.messagebox
    def func_msg():
        tkinter.messagebox.showinfo(title="Say",message="Hello, World!")
    root = tkinter.Tk()
    
    # Button
    button = tkinter.Button(root,text="Button",command=func_msg)
    button.pack()
    
    root.mainloop()
    import tkinter
    root = tkinter.Tk()
    
    # Canvas
    canvas = tkinter.Canvas(root,width=50,height=50)
    canvas.pack()
    
    root.mainloop()
    import tkinter
    root = tkinter.Tk()
    
    # CheckButton
    var = tkinter.IntVar()
    check_button = tkinter.Checkbutton(root,text="CheckButton",variable=var)
    check_button.pack()
    
    root.mainloop()
    import tkinter
    root = tkinter.Tk()
    
    # Entry
    entry = tkinter.Entry(root)
    entry.pack()
    
    root.mainloop()
    import tkinter
    root = tkinter.Tk()
    
    # Text
    entry = tkinter.Text(root)
    entry.pack()
    
    root.mainloop()
    import tkinter
    root = tkinter.Tk()
    
    # Frame
    frame = tkinter.Frame(root, width=200, height=100,borderwidth=10)
    frame.pack()
    
    root.mainloop()
    import tkinter
    root = tkinter.Tk()
    
    # Label
    label = tkinter.Label(root,text="Label Name")
    label.pack()
    
    root.mainloop()
    import tkinter
    root = tkinter.Tk()
    
    # ListBox
    list_box = tkinter.Listbox(root)
    list_box.insert(1,"Item_1")
    list_box.pack()
    
    root.mainloop()
    import tkinter
    root = tkinter.Tk()
    file_name = tkinter.Menu(root)
    
    # Menu
    menu = tkinter.Menu(root)
    root.config(menu=menu)
    file_menu = tkinter.Menu(menu)
    menu.add_cascade(label="File",menu=file_name)
    
    root.mainloop()
    import tkinter
    root = tkinter.Tk()
    
    # RadioButton
    var = tkinter.IntVar()
    radio_Button = tkinter.Radiobutton(root,text="Option 1" , variable=var,value=1)
    radio_Button.pack()
    
    root.mainloop()
    import tkinter
    root = tkinter.Tk()
    
    # ScrollBar
    scroll_bar = tkinter.Scrollbar(root)
    scroll_bar.pack(side=tkinter.RIGHT,fill=tkinter.Y)
    
    root.mainloop()
    import tkinter
    root = tkinter.Tk()
    
    # TopLevel
    top = tkinter.Toplevel()
    top.title("New Widow")
    
    root.mainloop()
    import tkinter
    import tkinter.ttk as ttk
    root = tkinter.Tk()
    
    # ComboBox
    comboBox = ttk.Combobox(root,value=["apple","orange","remon"])
    comboBox.pack()
    
    root.mainloop()
  • ヒープソート

    1.調査内容

    1.生成AIを利用してPythonプログラムを入手する
       解析を始めるが、全く内容が頭に入ってこない
    2.ネットでヒープソートを検索する
       文章の説明だけでは理解が進まない
    3.二分木のツリー構造に出会う
       この構造をヒープ構造と呼ぶ、と分かる
       1個の親に2個の子
       親が一番大きい数値になる様に並べ替える
    4.ツリー構造の考え方(順序づけ)の違いが分かる
       ・分類や検索で使うツリー構造
         順番に下位の階層に進み
         ヒットしなければ上位に上がって横に進む

         ①
         |— ②
         | |—③
         | |—④
         |—⑤
         | |—⑥
         | |—⑦
       ・ヒープソートで使うツリー構造
         トップの位置からスタートし
         下位に移り、左から順に進む
         二分木の三角形を保って進む

         ①—②—③—④—⑤—⑥—⑦
    5.三角形を使って数値の比較を行い、並べ替える
       親が一番大きな数値になるように並べ替える
    6.下位から始め、同列の処理が終われば上位へと移る
       最終的にトップの位置に一番大きな数値が来る
       トップの値を最後の位置にセットする

       残された数値で同じことを繰り返し
         トップの数値を下位から降順に並べる

    2.Pythonプログラムを調査して気づいた点

     ・range命令に出会う
       数字のリストを作成したり、連番を生成してfor文で利用する
         便利な命令だと分かる

     ・heap構造に出会う
       最も大きな数値を求めるのに有効なツリー構造だと分かる

     ・再帰処理に出会う
       関数の中から自分自身を呼び出し、類似な処理を繰り返す
         最初は全然処理内容がトレースできず四苦八苦した

    再帰処理(サンプル)

       眺めるだけではトレースできないと分かり、print文を挿入して解析する

     ・Pythonでの変数の扱いルールに出会う
       関数の中で使われる変数はグローバル変数ではなくローカル変数
         引数として渡された値だけで処理を組み立てている
         同じ項目名が使えるのは、都度新しいプログラムが読込まれている
           ※無限ループはメモリー不足になるとの注意が多く見られる
           
       <ルール>
       関数内で参照されるだけの変数は暗黙的にグローバルとなる
       関数の本体のどこかで値が変数に代入されたなら
         明示的にグローバルであると宣言されない限り、ローカルとみなす

    3.資料集

    ・pythonソース
    ・プログラム構造
    ・トレース資料
    ・解析資料(図)
    def heapify(arr, n, i):
        largest = i  # 親ノードを最大値として初期化
        left = 2 * i + 1  # 左の子ノードのインデックス
        right = 2 * i + 2  # 右の子ノードのインデックス
    
        # 左の子ノードが親ノードより大きい場合、最大値を更新
        if left < n and arr[left] > arr[largest]:
            largest = left
    
        # 右の子ノードが親ノードより大きい場合、最大値を更新
        if right < n and arr[right] > arr[largest]:
            largest = right
    
        # 最大値が親ノードでない場合、親ノードと最大値を入れ替えて再帰的にheapifyを呼び出す
        if largest != i:
            arr[i], arr[largest] = arr[largest], arr[i]
            heapify(arr, n, largest)
    
    def heapsort(arr):
        n = len(arr)
    
        # ヒープ木を構築(最初に一度、配列をヒープに変換)
        for i in range(n // 2 - 1, -1, -1):
            heapify(arr, n, i)
    
        # 配列をヒープから取り出し、ソートを行う
        for i in range(n - 1, 0, -1):
            arr[i], arr[0] = arr[0], arr[i]  # 最大値を配列の末尾に移動
            heapify(arr, i, 0)  # ヒープのサイズを減らして再度ヒープ化
    
    # ソートするデータを用意
    data = [64, 34, 25, 12, 22, 11, 90]
    print("Before sorting: ", data)
    heapsort(data)
    print("After sorting: ", data)
    
    
  • 講習会(動画) ex

    1.Tecgym講習会

    ゼロからはじめる Python 入門講座2021-09-11
    ①テックジムへようこそ「これからプログラミング学習を始めるにあたって」
    ②Pythonコースのカリキュラム概要と制作者メッセージ
    ③ゼロからはじめるPython入門講座 0:サンプルソースを動かしてみる
    ④テックジムPython基礎コース1-3解説動画「関数化」
    Python コースへようこそ(テキストの使い方)

    ソース公開場所(GitHub)
    ゼロからはじめる Python 入門講座
    オープン講座
    (Youtube)
    1 ゼロからはじめるPython入門講座
    2 学習方法でお悩みの方はご覧ください。
    3 さくっと業務改善・GAS講座「メルマガスタンドを作ろう」
    4 ちょこっと副業 Rails講座1「問合せフォームを作ろう」
    5 ちょこっと副業 Rails講座2「クローラーを作ろう」
    6 ちょこっと副業 Rails講座3「APIを使って読書管理アプリを作ろう」
    7 ちょこっと副業 Rails講座4「APIを使って読書管理アプリを作ろう」
    8 ゼロからはじめる機会学習講座
    9 テックジムの無料講座一覧
    オープン講座
    (補助資料)
    受講者専用
     テキストのダウンロードページ
    個別講座効率アップ10のポイント

    学習の目的別ルート
    補足情報GAS(Google Apps Script)の紹介
     Googleのサービスを有効活用する

    Railsの紹介
     「Ruby」で書かれたWebアプリケーションフレームワーク
    Python基礎コース(初心者向け)カリキュラムの概要
     https://techgym.jp/about/python_course/
    「AI・機械学習」入門講座2020-06-19
    これだけは知っておきたい「機械学習」ビジネス活用講座

    2.TECH PLAY講習会

    Pythonで始める最適化入門
     紹介ページ
    2022-03-23
    講演のプロモーション
       〃
     講演内容(動画)
    2022-03-23
    AI活用から≪意思決定≫の道筋まで見つける方法
  • 可変長引数

    実行例は「stupa.sarnath」の「Google Colabotry」環境に保存してある
    任意の値を引数にセットすることでその値に対応した結果を得る

    1.引数なしの場合(使用例と結果)

    def hello():
        print ('Hello')
    hello()
    
    # Hello

    2.戻り値を返す場合(使用例と結果)

    def add(a, b):
        x = a + b
        return x
    answer = add(70, 30)
    print (answer)
    
    # 100

    3.可変長引数の場合(使用例と結果)

     関数内で可変長引数としてアスタリスク(*)1個を前に付ける
       指定できる可変長引数は1個だけ

    def sample(name1, name2, *args):
        print (name1)
        print (name2)
        print (args)
    sample('Sato', 'Tanaka', 'Suzuki', 'Honda')
    

    4.キーワード引数の場合(使用例と結果)

     関数内で可変長引数としてアスタリスク(**)2個を前に付ける
       指定できるキーワード引数は1個だけ
       ただし、キーワードを付けて複数の項目を指定できる

    def sample(name1, **params):
        print (name1)
        print (params)
    sample('Sato', 年齢=30, 性別='男')