Python3関連のことを調べてみた

Python3関連のことを調べてみた
目次

Workato:Pythonコネクタで利用可能な全モジュールを取得する

# はじめに

Workatoの標準コネクタで対応できない処理は、Ruby, Python, JavaScriptなどのコネクタを利用することで必要な処理を実装することができます。

各コネクタを利用する際の前提の1つとして、利用可能なモジュールはそのコネクタが提供するモジュールに限られることが挙げられます。言い方を変えると、ユーザーが任意でモジュールを追加することはできません。このため、各コネクタの言語でどのモジュールが利用できるかを知ることが、開発を進めるうえで重要になります。

ここでは、Pythonコネクタで利用可能な全モジュールの取得方法について、手順を記載します。WorkatoのPythonコネクタで利用可能なモジュールは、オフィシャルとして[こちら](https://docs.workato.com/connectors/python.html#supported-features)にまとめられていますが、非常にざっくりとしており全ての対応モジュールが書かれていません。以下の方法で対応しますと、全ての利用可能なモジュールを取得することが可能です。

# 手順

## 1

元記事を表示

Cloud FunctionsでGemini APIを呼び出してみた

こんにちは。
業務において、HTTPリクエストをトリガーにGoogle Cloudのサーバレスクラウドコンピューティング「Cloud Functions」上のPythonファイルを実行し、Geminiにプロンプトを投げ、回答をレスポンスするということをおこないました。
備忘録として、実装を簡単にまとめてみようと思います。

# Cloud Functionsの概要
Cloud Functionsとは、Google Cloudが提供するサーバレスのクラウドコンピューティングサービスのひとつです。
サーバレスとは、サーバーが必要ないという意味ではなく、サーバーの構築や保守などのメンテナンスが不要という意味です。
指定したイベントをトリガーにサーバーを意識することなく、クラウド上でプログラムを実行できる便利なサービスです。
トリガーとして指定できるものは多数ありますが(Pub/Sub・Cloud Firebaseなど)、今回は外部サービスからのHTTPリクエストをトリガーに指定します。
類似サービスとして、AWSの「Lambda」などがあります。

# 実装
今回は下記のように実装をしました

元記事を表示

BuildozerでAndroidアプリを作る 2024 WSL2

この記事はPython+GUIをKivyで作成し、BuildozerでAndroidアプリを作成する方法についての記事です。

これはずいぶん前からある方法なのですが、Buildozerが動作する環境がシビアでよく失敗します。
Windowsで仮想のLinuxであるWSL(Windows Subsystem for Linux)を動作させてビルドすると動作したのでお知らせします。

### 1.WSLのUbuntuをインストール
Microsoft StoreでWSLをインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884555/10c44d96-50d3-d770-daed-f0c87417e192.png)
インストールしたら、スタートアップメニューから実行できます。

### 2.WSL2上で環境を作ろう
私のWindows10 PCのWSL 1の環境ではlibffiの実行中にエラーが出ました。
“`
.buildozer/android/platform

元記事を表示

情報は外在する。小さいコンピュータシミュレーションモデル io.py

情報は外在します。
人間は生まれたとき、何にも知らない状態で生まれてきて、成長をするごとに情報を得たり失ったりします。
このプログラムは誕生したばかりの人間が初めての情報を得る瞬間をシミュレーションしています。
これは、実存主義の情報版です。
なーんて、偉そうに書いてますが、やってることは、乱数で2つの内から一方を選んでselfという変数に代入しているだけです。

pythonで書かれています。`./io.py`で実行して下さい。
拙作のtruerandモジュールを使います。

https://qiita.com/fygar256/items/657719d5670f4534401f

“`io.py
#!/usr/bin/python3
import truerand
def main():
self=[]
print(f”information source is /dev/random”)
print(“self will get information”)
print(f”state of no information self={self}”

元記事を表示

unittest pytestの一歩踏み込んだ使い方

# pytestの一歩踏み込んだ使い方

pytestを使ってテストを書いて~
中の関数呼び出しは mock があるから~
と言われたけれど、
関数のテストするには、例外処理とか、例にない mockの書き方とか
検索しても assert x == y までの書き方までが多くて、
リファレンス的なものにたどり着けなかったので、まとめ

# その関数がどの引数で呼ばれたか
“`python
from unittest import mock
mock_instance = mock.MagicMock(spec=MockModule)
mock_instance.method_name.assert_called_once_with(a, b, c)
“`

# 何回呼ばれたか
“`python
from unittest import mock
mock_instance = mock.MagicMock(spec=MockModule)
mock_instance.method_name.call_count == 1
“`
# メソッドの中で呼んだメソッドで例外を起こしたい

元記事を表示

【Python】ModuleNotFoundErrorの原因は環境変数PYTHONPATHにあった…

# エラー概要
以前まで使用していたpytestを実行したら、「`ModuleNotFoundError`」になって、失敗してしまった。

> xxx.app.main import app E ModuleNotFoundError: No module named ‘xxx’

# 原因と解決方法
今回の原因は`PYTHONPATH`にありました。

まずは以下のコマンドで確認。

“`
echo $PYTHONPATH
“`

そして今回実施するプロジェクトのルートディレクトリがない場合は以下のように追加してあげます。

“`
export PYTHONPATH=”${PYTHONPATH}:/xxxx”
“`

ディレクトリ構造は以下の通り。

使用したtestファイルでは、プロジェクトのルートディレクトリから別のディレクトリのモジュールをインポートして使用していたのですが、それが原因なのか。以前までできていたような気がするのだが…

よく仮想環境venvを使っているので、その切り替えや新規作成により、設定に影響があったのかも。
または、何がしか(IDEと

元記事を表示

【Python3】ハノイの塔 (paizaランク A 相当):アルゴリズム付きの解説

https://paiza.jp/works/mondai/real_event/hanoi

**要求分析**
– 3つの杭(A、B、C)があり、杭Aには `n` 個の円盤が大きい順に積まれている。
– `n` 個の円盤を最短手順で杭Aから杭Cに移動させる。
– `t` 回の移動後の各杭の状態を出力する。

**アルゴリズム**
1. 初期状態を設定し、各杭に円盤を配置。
2. 再帰的に円盤を移動する関数 `move_disks` を定義。
3. 移動後の各杭の状態を出力する。

以下は実装例です。

“`python
def hanoi(n, t):
# 初期状態の設定
pegs = [list(range(n, 0, -1)), [], []]
moves = []

# ハノイの塔の再帰的な移動関数
def move_disks(num_disks, from_peg, to_peg, aux_peg):
if num_disks == 0:
return
move_disks(n

元記事を表示

【Python3】Fizz Buzz (paizaランク C 相当):アルゴリズム付きの解説

https://paiza.jp/works/mondai/c_rank_skillcheck_sample/fizz-buzz

以下の要件を満たす「Fizz Buzz」アルゴリズムを作成します。

**要求分析**
– 標準入力から整数 `N` を読み込む。
– 1から `N` までの整数を順に処理し、特定の条件に従って出力を変更する。

**アルゴリズム**
1. `N` を標準入力から読み込む。
2. 1から `N` までの整数を順に処理する。
3. 各整数 `i` に対して以下を行う:
– `i` が3の倍数かつ5の倍数の場合、`”Fizz Buzz”` を出力。
– `i` が3の倍数の場合、`”Fizz”` を出力。
– `i` が5の倍数の場合、`”Buzz”` を出力。
– その他の場合、整数 `i` をそのまま出力。

以下は実装例です。

“`python
# 標準入力から整数Nを読み込む
N = int(input().strip())

# 1からNまでの整数を順に処理
for i in range(1, N + 1):
#

元記事を表示

【Python3】文字列収集 (paizaランク S 相当)をやってみた

https://paiza.jp/works/mondai/real_event/word_collection

以下に、【問題】に対応するPythonソースコードを作成し、解説を行います。

“`python
# 入力の読み込み
import sys
input = sys.stdin.read

# 入力データを一括で読み込む
data = input().split()

# NとMを取得
N = int(data[0])
M = int(data[1])

# N個の文字列とその価格を格納するリスト
strings = []
prices = []

# N個の文字列と価格をリストに分割して格納
index = 2
for _ in range(N):
strings.append(data[index])
prices.append(int(data[index + 1]))
index += 2

# M個のクエリを格納するリスト
queries = []
for _ in range(M):
queries.append(data[in

元記事を表示

【Python3】【殿堂入りキャンペーン】お菓子の詰め合わせ (paizaランク A 相当)をやってみた

https://paiza.jp/works/mondai/a_rank_skillcheck_archive/school_hiking

“`python
# utf-8
def combinations(iterable, r):
# combinations()関数は、与えられたiterableからr個の要素を持つすべての組み合わせを生成するジェネレータです。
pool = tuple(iterable) # 入力のiterableをタプルに変換してpoolに格納します。
n = len(pool) # poolの長さ(要素の数)を取得します。
if r > n: # rがnより大きければ、組み合わせは存在しないので終了します。
return
indices = list(range(r)) # 組み合わせを表すインデックスのリストを作成します。
yield tuple(pool[i] for i in indices) # 最初の組み合わせを生成して返します。
while True:

元記事を表示

【Python3】じゃんけんの手の出し方 (paizaランク A 相当)をやってみた

以下に、Pythonプログラムを解説します。

“`python
# じゃんけんの手の出し方
n, m = map(int, input().split()) # じゃんけんの回数 n と出す指の本数の合計 m を入力
s = input() # 相手のじゃんけんの手を表す文字列 s を入力

# じゃんけんの手のカウントを初期化
enemy_g, enemy_c, enemy_p = 0, 0, 0
for v in s:
if v == “G”:
enemy_g += 1 # 相手がグーを出す回数をカウント
elif v == “C”:
enemy_c += 1 # 相手がチョキを出す回数をカウント
else:
enemy_p += 1 # 相手がパーを出す回数をカウント

ans = 0 # 勝つ回数の最大値を格納する変数
# 0 ≦ p ≦ m//5 の範囲で p(パーの回数)を全探索
for p in range(m // 5 + 1):
c = (m – p * 5) // 2

元記事を表示

【Python3】山折り谷折り (paizaランク A 相当)をやってみた

https://paiza.jp/works/mondai/real_event/origami

“`python
# 山折り谷折り A
# utf-8

”’
N 回折ったときの折り目は N-1 回折ったときの折り目から簡単に求めることができます。
1 回折ったときの折り目は “0”、2 回折ったときの折り目は “0” + “0” + “1” = “001”、3 回折ったときの折り目は “001” + “0” + “011” = “0010011” です。
N-1 回折ったときの折り目の文字列を S、S を逆順にし、0 と 1 を反転させた文字列を S’ とすると、N 回折ったときの折り目の文字列は S + “0” + S’ となります。

N 回折ったときの折り目の数 2N-1 個の要素を持つ配列を用意します。
方針の通りに 1 回折ったときの折り目から順に N 回折ったときの折り目までを順に求めます。
”’

# 入力値を取得
N = int(input())

# 折り目の数 2^N – 1 を計算して配列のサイズを決定
size = 2 ** N – 1

# 折り目

元記事を表示

【Python3】本の整理 (paizaランク A 相当)をやってみた

このコードでは、本の位置情報を記録する配列を用いて、効率的に交換回数を計算しています。

“`python
# 入力を読み込む
N = int(input())
shelf = [int(x) – 1 for x in input().split()]

# 各本の位置を記録する配列を用意
pos = [-1] * N
for i in range(N):
pos[shelf[i]] = i

# 交換回数を記録する変数
ans = 0

# 本棚の本を並び替える処理
for i in range(N):
# 既に正しい位置にある本はスキップ
if shelf[i] == i:
continue

# 交換回数を増やす
ans += 1

# i番目の本と現在の正しい位置にある本を交換
shelf[pos[i]] = shelf[i]
pos[shelf[i]] = pos[i]

# 交換回数を出力
print(ans)
“`

### プログラムの説明

1. **入力の読み込み**

元記事を表示

【Python3】長テーブルのうなぎ屋 (paizaランク B 相当)をやってみた

https://paiza.jp/works/mondai/b_rank_skillcheck_sample/long-table

以下は、うなぎ屋の座席配置をシミュレーションするPythonプログラムです。

“`python
# 入力を標準入力から読み取る
import sys
input = sys.stdin.read

# メイン処理関数
def main():
# 入力データを読み取り、行ごとに分割する
data = input().strip().split(‘\n’)

# 最初の行から座席数(n)とグループ数(m)を取得
n, m = map(int, data[0].split())

# 座席の使用状況を管理するリスト(Falseは空いている、Trueは埋まっている)
seats = [False] * n

# 座れた人数のカウンター
seated_count = 0

# 各グループの処理
for i in range(1, m + 1):
a_i, b_i =

元記事を表示

Attention機構を図解しながらわかりやすく説明する

# はじめに
[ゼロつく2](https://amzn.to/3zMUT0C)で解説されているAttention機構について、私の理解を含めて解説したいと思います。
また、ゼロつく2以外にも情報収集し、いくつか参考になった情報を加えてAttentionについて理解が深まるように記事を書きたいと思います。

# Attentionとは
* 入力データの中から重要な部分に焦点を当てる仕組み
* 自然言語を中心に発展した深層学習の技術の1つで、機械翻訳や文章生成の性能向上に寄与

## Attentionの利点
* 長い依存関係の処理
* 従来のRNNでは入力文章が長くなると、情報が保持しにくいという点がありましたが、重要な部分に焦点を当てることで効果的に処理できるようになりました
* 説明可能性の向上
* どこに焦点を当てているかを可視化することでモデルがどのように予測しているかを理解することができます
* 並列処理性能の向上
* TransformerのようなAttentionベースのモデルは並列処理に適しており、GPUを効率的に使用できます。従来のRNNでは、各

元記事を表示

EasyOCRインストール時の注意点(2024/6以降)

# はじめに

先日(2024/7)新しく構築した環境でEasyOCRを使ったプログラムがなぜか動かなかった(既存環境ならちゃんと動く)。調べたところ、EasyOCRが依存パッケージのバージョンアップについていけていないようなのでまとめた。

# 環境

+ EasyOCR 1.7.1
+ Python 3.9.13 / Python 3.12.4 (両方ともMicrosoft Store版)
+ Windows 10 Pro (64bit) 22H2

# 状況

EasyOCRを使ったプログラムを実行すると次の2種類のメッセージが出て、プログラムが異常終了する

“`
A module that was compiled using NumPy 1.x cannot be run in
NumPy 2.0.1 as it may crash. To support both 1.x and 2.x
versions of NumPy, modules must be compiled with NumPy 2.0.
Some module may need to rebuild

元記事を表示

【Python3】みんなでしりとり (paizaランク B 相当)をやってみた

https://paiza.jp/works/mondai/b_rank_skillcheck_archive/word_chain

“`python
# coding: utf-8

# 入力を受け取る
N, K, M = [int(i) for i in input().split()] # しりとりをする人数、単語リストの数、しりとりの発言数を取得
d_dict = {input() for i in range(K)} # 単語リストをセットに格納
m_list = [input() for i in range(M)] # しりとりの発言ログをリストに格納
n_list = [i + 1 for i in range(N)] # プレイヤーの番号リストを作成

n = 0 # 現在のプレイヤーのインデックス
flg = 0 # 直前のプレイヤーがルールを破ったかどうかを示すフラグ

# しりとりの発言を順番に処理する
for i in range(len(m_list)):
z = “” # ルールを破ったプレイヤーの番号を格納する変数
if

元記事を表示

【Python3】神経衰弱 (paizaランク B 相当)をやってみた

https://paiza.jp/works/mondai/b_rank_skillcheck_archive/concentration

**問題**:
神経衰弱と呼ばれるトランプゲームのシミュレーションを行います。数字が書かれたトランプを縦 H 枚、横 W 枚の長方形の形に並べた状態でスタートします。トランプには1〜13の数字のうちどれかが書かれており、同じ数字のトランプが複数存在します。プレイヤーが N 人おり、各プレイヤーがトランプをめくっていき、めくった2枚のトランプに同じ数字が書かれていればそのトランプを取り除きます。ゲームの初期状態とトランプの記録が与えられるので、各プレイヤーが取り除いたトランプの枚数を求めます。

**入力値**:
“`
H W N
t_{1,1} t_{1,2} … t_{1,W}
t_{2,1} t_{2,2} … t_{2,W}

t_{H,1} t_{H,W}
L
a_1 b_1 A_1 B_1
a_2 b_2 A_2 B_2

a_L b_L A_L B_L
“`

**期待される出力値**:
“`
各プレイヤーが

元記事を表示

Pythonマルチスレッド検証

## PythonのマルチスレッドでSQLite3からデータを取得する検証
### マルチスレッドでSQLite3からデータを取得する
#### 1.参照するテーブルのレイアウト
+ test_db.sqlite3.large_data

| 列名 | データ・タイプ |
|:-:|:-:|
| id | INT |
| col1 | INT |
| col2 | TEXT |
| 〜 | |
| col15 | TEXT |

#### 2.検証用コード
+ あらかじめ dataset をインストールしておくこと
“`
pip install dataset
“`
“`sqlite3_multi_thread.py
import concurrent.futures
import datetime
import traceback
import dataset

# 取得条件
CONDITIONS = [
{‘db’: ‘1’, ‘min’: ‘1’, ‘max’: ‘1000000’},
{‘db’: ‘2’, ‘min’: ‘1000001’, ‘max’

元記事を表示

Python、SQLite3でのマルチプロセステーブル生成

## Python、SQLite3でのマルチプロセステーブル生成検証

#### 1.検証内容
+ 1つのDBのテーブルを参照する。参照結果をもとに複数のDBに各々テーブルを作成する
+ sqlite-utilsモジュールを使用して、1SQLクエリで複数のDBのテーブルを使用する
+ マルチプロセスでテーブルを参照、作成する

#### 2.参照するテーブルのレイアウト
+ test_db.sqlite3.large_data
+ test_db.sqlite3.large_data2
+ test_db.sqlite3.large_data3

| 列名 | データ・タイプ |
|:-:|:-:|
| id | INT |
| col1 | INT |
| col2 | TEXT |
| 〜 | |
| col15 | TEXT |

#### 3.作成するテーブルのレイアウト
+ db_1.sqlite3.table_1
+ db_2.sqlite3.table_2
+ db_3.sqlite3.table_3
+ db_4.sqlite3.table_4
+ db_5.sqli

元記事を表示

OTHERカテゴリの最新記事