- 1. Pythonで、Fizz Buzz 問題の理論を元に素数を判定してみた
- 2. Pythonで九九の表を作成してみた
- 3. デコレーターについての備忘録
- 4. クロージャーについての備忘録
- 5. ABC358のEをPythonで解く方法(復習)
- 6. Python講座 – 2024ver.
- 7. requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)というエラー
- 8. Pythonの基本概念だけを学習してみた
- 9. Pythonで、10進数→n進数、n進数→10進数に変換してみた
- 10. [AWS SAM] Selenium4をAWS lambda Python3.12で動かす
- 11. 【備忘録】正常系テストと異常系テストの例
- 12. メモ:langchainへのプルリクの出し方
- 13. コンピュータと会話するためには
- 14. Python3でファイルのメッセージダイジェストを求めたい
- 15. Chainlitをクラウド上で編集・起動してみる
- 16. Windowsでバイオインフォマティクス(分子系統解析)の実行環境を構築する
- 17. 【langchain】EnsembleRetrieverがDocumentを同一とみなす条件
- 18. バージョン管理とログ管理を楽にするサンプルコード
- 19. Openpyxl: Cell の結合 (汎用版)
- 20. Pythonでファイルが見つからない
Pythonで、Fizz Buzz 問題の理論を元に素数を判定してみた
### FizzBuzz問題とは
“FizzBuzz”とは英語圏の有名な言葉遊びです。ルールは1から順に数を数え上げていき、3の倍数なら「Fizz」、5の倍数なら「Buzz」、両方の倍数(15の倍数)なら「Fizz Buzz」、いずれでもなければその数を言うというものです。簡単なプログラミングの練習として、3の倍数のときは「”fizz”」、5の倍数のときは「”buzz”」、共通の倍数(のときは「”fizzbuzz”」、その他は「数値」を戻すという単純な処理を実装します。この記事においては、1から1000までの範囲で、Fizz Buzz 問題を検証してみたい。
その後、1から100と1から1000までの素数を、FizzBuzz問題のように検証してみたい。### FizzBuzz 問題応用編プログラムコード
“`
target = 1000
for number in range (1, target + 1):
if number % 3 == 0 and number % 5 == 0:
print (“Fizz Buzz”)
elif number % 3
Pythonで九九の表を作成してみた
Pythonを使って、九九の表を作ってみました。
## 二重for文
九九になると、 for文を二重で使うのが一般的だ。
コードを書いていきましょう。“`
for i in range (1,10):
for j in range (1,10):
if j == 9:
print (f”{i} x {j} = {i *j}”)
print ()
elif i*j < 10: print (f"{i} x {j} = {i *j}") else: print (f"{i} x {j} = {i *j}") ``` ### コードの出力結果 ``` 1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 1 x 4 = 4 1 x 5 = 5 1 x 6 = 6 1 x 7 = 7 1 x 8 = 8 1 x 9 = 9 2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10 2 x 6 = 12 2 x 7 = 14 2 x 8 = 16 2
デコレーターについての備忘録
### デコレーターとは
デコレーターは、関数を修飾する関数です。これにより、関数を書き換えることなく、その関数に処理を追加したり、変更したりすることができます。### デコレーターを使わない例
まず、デコレーターを使わない例を見てみましょう。“`python
def add(a, b):
print(a + b)print(‘Start!!’)
add(1, 2)
print(‘Finish!!’)print(‘Start!!’)
add(3, 4)
print(‘Finish!!’)
“`このコードでは、`add`関数を呼び出す前後に同じメッセージを表示しています。
### デコレーターの使用例
次に、デコレーターを使って上記の処理を簡略化する例を見てみましょう。“`python
# デコレーター関数を定義
def my_decorator(func):
def wrapper(a, b):
print(‘Start!!’)
func(a, b)
print(‘Finish!!’)
クロージャーについての備忘録
### クロージャーとは
クロージャーは、関数の外で宣言された変数や引数を保持する機能のことです。これにより、関数が定義されたスコープの外からも変数にアクセスできます。Pythonでは、すべてがオブジェクトとして扱われるため、変数もオブジェクトです。### 基本的な関数の例
以下は、円の面積を計算する関数の例です。“`python
def circle_area(pi, radius): # 関数オブジェクトを作成してcircle_area変数に代入
return pi * radius * radiusarea = circle_area # ()がないと、変数に代入されている関数オブジェクトを取り出すだけ
print(area) #print(area(3.14, 2)) # 12.56
“`### クロージャーの例
次に、クロージャーを使った関数の例を見てみましょう。“`python
def circle_area(pi):
def calculation(radius)
ABC358のEをPythonで解く方法(復習)
[E-Alphabet Tiles](https://atcoder.jp/contests/abc358/tasks/abc358_e)の問題の解法が思いつかず&実装方法も思いつかず悔しかったのでこの記事で復習します。
# 問題文
>> AtCoder Landでは、アルファベットの書かれたタイルが販売されています。高橋君は、タイルを一列に並べてネームプレートを作ろうと考えました。
> 長さ$1$以上$K$以下の英大文字からなる文字列であって、以下の条件を満たすものの個数を998244353で割った余りを求めてください。
> – $1 \leq i \leq 26$ を満たす任意の整数$i$について以下が成立する。
– 辞書順で$i$番目の英大文字を$a_i$とおく。例えば、$a_1 = `A`, a_5 = `E`, a_{26} = `Z`$である。
– 文字列の中に含まれている$a_i$の個数は0以上$C_i$個以下である。## 失敗したコード
“`python
from collections import deque, defaultdict
Python講座 – 2024ver.
## 誰がこれを読むべきか
Pythonを学ぼうと思っている、プログラミング初心者
前提 : `$` の後に続くコマンドを実行する場合は、`$`を取り除いて入力してください:::note info
初版年月日 : 2024年6月15日
更新年月日 : –
使用環境 : macOS (Monterey~)
確認環境 : Python3.8~
(Windowsでも動作に差はないと思いますが、シェルスクリプトの書き方が違うため、お気をつけください)
:::## 目次
1. [はじめに](#はじめに)
1. [プログラミングとは](#プログラミングとは)
1. [プログラミング言語とは](#プログラミング言語とは)
1. [Pythonとは](#pythonとは)
1. [セットアップ](#セットアップ)
1. [python環境構築](#python環境構築)
1. [pipとは](#pipとは)
1. [python仮想環境とは](#python仮想環境とは)
1. [venvとは](#venvとは)
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)というエラー
# はじめに
前回に引き続き、FastAPIを用いた会議室予約アプリの作成中に出てきたエラー文です。# 問題
“`
raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
“`
上記のエラーに遭遇。
# 原因
API側から受け取ったデータが変である可能性ありとのこと。
https://teratail.com/questions/tm5eg39ug7j7uy“`
#main.py
@app.get(“/bookings”, response_model=List[schemas.Booking])
async def read_bookings(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
booking = crud.get_bookings(db, skip=skip,
Pythonの基本概念だけを学習してみた
# はじめに
Python は、そのシンプルさと柔軟性、強力な標準ライブラリによって、多くの開発者に愛用されています。この記事では、Python 独自の概念について学び、そのメリットを探ります。
# 動的型付け
Python は動的型付けの言語であり、変数の型を明示的に宣言する必要がありません。変数に値を代入すると、その変数が参照する値の型が決まります。
“`py
x = 10 # x は整数型
x = “Hello” # x は文字列型に変更
print(x)
“`このコードでは、変数 x に整数値を代入した後、文字列を代入しています。
## 動的型付けのメリット
1. 柔軟性: 変数の型を変更できるため、柔軟なコーディングが可能。
2. シンプルさ: 型を宣言する必要がないため、コードがシンプルで読みやすい。
3. 迅速なプロトタイピング: 型の宣言に時間をかけずに、迅速にプロトタイプを作成できる。
# インデントによるブロック構造
Python はインデントを使用してコードのブロックを定義します。これにより、コードの可読性が向上し
Pythonで、10進数→n進数、n進数→10進数に変換してみた
私たちは、一般的に10進数を使っています。これは、10を基数とした表現法です。
0から9の10個の数字を使って数を表現し、10になると、桁が上がります。ここで、私はPythonを使って、n進数に変換できないか興味を持った。この記事の目的は、10進数をどのようにn進数へ、n進数をどのように10進数に変換するかを説明したい。
### 10進数からn進数への変換方法
“`
x = “10”
#2進数への変換
print (int(x,2))
#6進数への変換
print (int(x,6))
#8進数への変換
print (int(x,8))
#16進数への変換
print (int(x,16))
“`
### 実行結果
“`
2
6
8
16
“`
### n進数から10進数への変換方法
“`
#2進数への変換
print (int(‘10100′,2))
#6進数への変換
print (int(’32’,6))
#8進数への変換
print (int(’24’,8))
#16進数への変換
print (int(’64’,16))
“`
### 実行結果
“`
[AWS SAM] Selenium4をAWS lambda Python3.12で動かす
# はじめに
AWS SAMを使ってAWS LAMDA上でselenium3を使う方法をご紹介いたしましたが、当初目的が別にありました。
きっかけはこちらの方の記事でした。
selenium4の最新版を利用すれば、新しく追加されたselenium-managerという機能があり、簡易的なChromeブラウザと、そのバージョンにあったChromDriverを自動でインストールしてくれます。
また古いHeadless-Chromiumはselenium4に対応していないため、最新のchromeに対応させたかったのですが、なぜか手元のマシン(M2 Macbookpro)で動かず、手詰まりになっていました。
この記事は動作するようになったコードの紹介と、その解決方法についてのまとめです。
## こんな方におすすめ
* AWS Lambda python3.8以上でselenium4を使いたい方
* AWS SAMを使っている方
* Apple Silicon製のMac(M
【備忘録】正常系テストと異常系テストの例
# はじめに
お久しぶりです。Tomita Kentaroと申します。今回はプログラミングのテストについて書きたいと思います。特に正常系テストと異常系テストについて簡単にまとめます。今回扱う、ソースコードの全体を以下に示します。“`python:Test.py
import unittestdef divide(a, b):
return a / bclass TestDivideFunction(unittest.TestCase):
def test_divide_normal(self):
self.assertEqual(divide(10, 2), 5)
self.assertEqual(divide(9, 3), 3)
self.assertEqual(divide(5, 1), 5)def test_divide_by_zero(self):
with self.assertRaises(ZeroDivisionError):
divide(1
メモ:langchainへのプルリクの出し方
# はじめに
langchainにプルリクエストを出してみたので、自分用にメモを残します。# 経緯
EnsembleRetrieverの仕様で気になるところがあったので、後方互換性をもちつつユーザから指定できる選択肢を上げるためのプルリクを出してみました。今回出したプルリクは以下です。
[langchain: add id_key option to EnsembleRetriever for metadata-based document merging #22950](https://github.com/langchain-ai/langchain/pull/22950)
# 基本方針
langchainのgithubから辿れる場所に[contribution guideline](https://python.langchain.com/v0.1/docs/contributing/)があるので基本的にはこれに従います。
判断に迷ったところを中心にメモします。# masterブランチのfork
[langchain](https://github.com/lan
コンピュータと会話するためには
# 導入
お疲れ様です!今日は自然言語処理について学習したことをアウトプットします!## 自然言語処理(NLP)とは
自然言語処理(Natural Language Processing、NLP)とは、人間が日常的に使用する言語をコンピュータに理解させるための技術です。
NLPは、テキストや音声データを解析し、その意味を理解することを目的としています。
この技術は、検索エンジン、音声アシスタント、翻訳アプリなど、日常生活のさまざまな場面で利用されています。## NLPの歴史と発展
NLPの歴史は長く、1950年代にチューリングテストが提唱されたことに始まります
。それ以来、計算機の性能向上と共に、NLPの技術も飛躍的に進歩してきました。
今日では、機械学習やディープラーニングの技術を駆使して、より自然で精度の高い言語処理が可能となっています。## コンピュータと会話するためにNLPが必要な理由
コンピュータと自然な会話をするためには、単に言葉を理解するだけでなく、その背景にある文脈や感情も理解する必要があります。
NLPは、これらの複雑なタスクを実現するための基本技術です。
Python3でファイルのメッセージダイジェストを求めたい
Python3でファイルのメッセージダイジェストを求める方法を紹介します。ここではSHA256を例にします。
python3.11以降の場合、`hashlib.file_digest`を利用します。
“`python3
import hashlib
with open(‘INPUT.txt’, ‘rb’) as f:
digest = hashlib.file_digest(f, “sha256”)
print(digest.hexdigest())
#=> 6f67ea379608add8b4f3c0a3c95c0e70ab2752405de7c69c152faabd5870305e
“`それ以前のバージョンの場合は、ファイルを自前で読み込む必要があります。
まずファイル内容をすべてメモリ上に展開してよい場合は以下のようなコードになります。
“`python3
import hashlib
with open(‘INPUT.txt’, ‘rb’) as f:
digest = hashlib.sha256(f.read())
print(digest
Chainlitをクラウド上で編集・起動してみる
ChainlitをGCP Cloud Shell Editorでプレビューしてみるのが今回やること。
## 準備
### Cloud Shellに入る
Web検索からすぐ入れるページがここ。
ここで「コンソールへ移動」をクリック。
![スクリーンショット 2024-06-14 225804.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68673/5e734e92-db31-3cd0-2d31-9c1ff78555e1.png)下のような画面が出てくるので、「エディタを開く」を選択。
![スクリーンショット 2024-06-14 225901.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68673/334f9fdc-7cd9-35ab-fef3-dc19d1fe182b.png)すると、このような画面が出てきて、しばし待つ。
![スクリーンショット 2024-06-14 225908.png](https:/
Windowsでバイオインフォマティクス(分子系統解析)の実行環境を構築する
## 背景
バイオインフォマティクスでは、MacBookの使用が推奨され、Windowsでの環境構築に関する情報が少ないです。この記事では、WSL2を使用して、Windows PCで分子系統樹解析を行うための環境構築方法を紹介します。バイオインフォをこれから始める人に向けて、丁寧に書いていきたいと思います。## 動作環境
– Windows11
(Anaconda3のインストール後の操作は、Macの人も参考になると思います)## 環境構築フロー
1. WSL2のインストール
2. Anaconda3のインストール
3. Anaconda3で解析用の仮想環境を構築
4. 各種パッケージのインストール## 1. WSL2のインストール
WSL2とは、Windows Subsystem for Linux 2の略称で、Windowsコンピュータ上でLinux環境を構築することができます。Linuxと聞くとギョッとしてしまうかもしれませんが何も恐れることはありません!今までのWindows環境が壊れることもありません。
### 手順
1. Windows PowerShellを管理
【langchain】EnsembleRetrieverがDocumentを同一とみなす条件
# 概要
langchainのEnsembleRetrieverが異なるretrieverから検索の結果得られたDocumentをアンサンブルするとき、どういう条件でDocumentの異同を判断しているのか調べました。
結論としては、page_contentが同じとき、同一のDocumentとみなすようです。
# 検証
検証バージョンは以下です。“`sh
langchain 0.2.3
langchain-community 0.0.29
langchain-core 0.2.5
“`まず全く同じtextのリスト2つ用意し、それぞれでretrieverを作って、均等な重みでensembleしてみます。
“`Python
from langchain_community.retrievers import BM25Retriever
from langchain.retrievers import EnsembleRe
バージョン管理とログ管理を楽にするサンプルコード
研究をしているときに`git`でバージョン管理をすることは少なくないと思います。
– 複数人で開発を行っている場合
– 同じファイル構造をローカルPCとリモートサーバーなど2箇所に保存し、実行する場所(サーバー・GPUなど)とコードを書く場所(PC)を分けて開発する場合などでお世話になる機会が多く、`git`に足を向けて寝られないエンジニアがほとんどなのではないでしょうか。
ある日、筆者はこのようなケースにぶち当たりました。
– かなり前の学習モデルの動作確認をしようとしたが、モデル構造が以前と今では変更されており、どのバージョンまで戻せばいいのか分からない
– `nohup`実行したときに`nohup.out`のどの部分にログが残っているのか分からないこのとき、`git reset`や`git reflog`,`git revert`を駆使して頑張ってバージョンを戻すことも可能ですが、間違えて今のファイルを全部消してしまうリスクもありますし、元のバージョンに戻すのが面倒くさいケースもあります。
極論言えば、タイムスタンプ付きのログ用フォルダを用意して、そこに移動すれば
Openpyxl: Cell の結合 (汎用版)
こちらのプログラムを汎用的に使えるように改造しました。
[Openpyxl: Cell の結合](https://qiita.com/ekzemplaro/items/9996dc355cc957c1dd61)## プログラム
“`py:merge_cells.py
#! /usr/bin/python
# —————————————————————
# merge_cells.py
#
# Jun/14/2024
# —————————————————————
import sys
import openpyxl
from openpyxl.styles import Alignment# —————————————————————
# [4-6]:
def column_analize(ws,column):
p
Pythonでファイルが見つからない
Pythonを初心者の頃、以下のようなコードでファイルが見つからず悩んだ。
“`file_not_found.py
with open(“test.txt”) as file:
print(file.read())
“`
VScode上でPythonファイルをディレクトリで開かずに、再生ボタンを押して実行していたことがこの問題の原因である。この場合、作業ディレクトリがPythonファイルの存在するディレクトリではない。Pythonファイルからみた相対パスで指定すると`FileNotFoundError: [Errno 2] No such file or directory: ‘test.txt’`と注意されてしまう。再生ボタンを押すだけで実行可能という利便性を持たせつつ、ファイルのパスを正しく指定する解決法を2つ示す。
## pythonファイルのパスから絶対パスをつくる
Pythonでは`__file__`からそのPythonファイル自体のパスが得られる。文字列の操作でもパスをつくることができるが、`os`や`pathlib`を使うと簡単にパスが作れる。`os`では