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

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

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

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

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

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

元記事を表示

【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

元記事を表示

【Python】基本!PEP8を意識して書いてみた!

# 本日の内容
今日の記事はPythonを使用する上で基礎的な情報を記載していきます。
実際に勉強会でも使用する内容になります。
下記に記載しているコードはコードスタイル「PEP8」を意識して記載しています。
PEP8については以下のサイトをご覧ください。

https://peps.python.org/pep-0008/

## 変数と四則演算
コードは以下になります。
“`python
# 変数
num = 1
print(type(num)) #

moji = “こんにちは”
print(type(moji)) #

num_1 = 1.1
print(type(num_1)) #

flg = True
print(type(flg)) #
num_lst = [1, 2, 3, 4, 5]
print(type(num_lst)) #

num_tuple = (1, 2, 3, 4)
print(type(num

元記事を表示

sys.argvの個人的まとめ

# 0.sys.argvとは
sys.argv は、Python でコマンドライン引数を処理するために使用されるリストです。プログラムがコマンドラインから実行されたとき、その引数が sys.argv に格納されます。

# 1.sys.stdinとの比較

sys.argv はコマンドライン引数を取得するために使用され、プログラムの起動時に与えられる入力に対応します。
sys.stdin は標準入力からデータを読み取るために使用され、プログラムの実行中に提供される入力に対応します。

# 2.sys.argvのコードの例

“`python:
import sys

# コマンドライン引数のリストを表示
print(“コマンドライン引数:”, sys.argv)

# コマンドライン引数が2つ以上ある場合、それらを表示
if len(sys.argv) > 1:
print(“引数のリスト:”)
for i, arg in enumerate(sys.argv[1:], start=1):
print(f” 引数 {i}: {arg}”)
else:

元記事を表示

Pythonの標準入力sys.stdinの個人的まとめ

# 0.はじめに

Pythonのユーザー入力というとinput()とsys.stdinの2つがありますが、ここではsys.stdinについて記載したいと思います。

# 1.sys.stdinとは
sys.stdinはファイルオブジェクトの一種で、標準入力(通常はキーボード)から直接データを読み取ることができます。主にスクリプトやプログラムで標準入力から一括してデータを読み取るのに使われます。

# 2.input()との比較

## 2.1.対話型入力と一括入力

input(): 対話型で一行ずつ入力を受け取るのに適しています。
sys.stdin: ファイルやパイプからの一括入力や複数行の入力を処理するのに適しています。

## 2.2.プロンプト表示

input(): プロンプトメッセージを表示してユーザーに入力を促します。
sys.stdin: プロンプトは表示されません。直接入力を受け取ります。

## 2.3.用途

input(): 主にスクリプトの対話型入力に使用されます。
sys.stdin: 標準入力からのデータ読み込みが必要なスクリプトや、リダイレクトされ

元記事を表示

【Python3】【殿堂入りキャンペーン】残り物の量 (paizaランク C 相当)をやってみた

https://paiza.jp/works/mondai/c_rank_skillcheck_archive/leftover

**問題: スーパーマーケットの生鮮食品の売れ残り計算**

**入力**:
1. 生鮮食品の初期重量 `m` (kg)
2. 生のまま販売した時の売上割合 `p` (%)
3. 売れ残りをお惣菜にした時の売上割合 `q` (%)

**出力**:
– 最終的な売れ残りの重量 (kg)

**アプローチ**:
1. 初期重量 `m` から `p%` を売り上げる
2. 残りの `m` から `q%` をお惣菜として売り上げる
3. 最終的な売れ残りを計算して出力

**コード**:
“`python
def solve(m, p, q):
# 最初に売れた量を計算 (生のまま)
sold_initially = m * p / 100.0
# 最初に売れた後の残りの量
remaining_after_first_sale = m – sold_initially
# 残りをお惣菜にして売れた量を計算
s

元記事を表示

【Python3】みかんの仕分け (paizaランク C 相当)をやってみた

https://paiza.jp/works/mondai/c_rank_skillcheck_archive/mikan

**問題: みかんを重さごとに仕分ける**

**入力**:
1. 仕分ける重さの区切りを表す整数 `N`
2. みかんの個数を表す整数 `M`
3. 各みかんの重さ `w_1` から `w_M`

**出力**:
– 各みかんを最も近い重さに仕分け、その重さを出力

**アプローチ**:
1. 標準入力から `N`, `M` と各みかんの重さを読み込む
2. 各みかんの重さについて、仕分け先の重さを計算
3. 仕分け先の重さを出力

**コード**:
“`python
def classify_oranges(weight, num_oranges, oranges):
# 各みかんの重さに対して仕分け先の重さを計算して出力
for orange in oranges:
# もし、みかんの重さがweight以下ならweightの箱に仕分け
if orange <= weight: pri

元記事を表示

Python 2次元配列の複数キーによるソートについて

# はじめに
 2次元配列の複数キー(優先順位付き)によるソートについて、Lambda関数を使用した要領について、備忘録を兼ねてまとめました。

# 特定の列を基準としたソート
 身長(昇順)、体重(降順)、名前(昇順:辞書順)にする場合は次の通り、優先するキーから順に記載します。
“` Python:Python
import pprint

class_data = [
[taro,178,60],
[jiro,180,82],
[saburo,178,65]
]

class_data.sort(key=lambda x:(x[1],-x[2],x[0]))
pprint.pprint(class_data)

#[[saburo,178,65],
# [taro,178,60],
# [jiro,180,82]]

“`
:::note info
各キーの前に「-」を付けることで、昇順を降順に切り替えることができます。
:::

参考にしたサイトを見失ったので、見つけられたら貼り付けます。

元記事を表示

【Python3】野球の審判 (paizaランク C 相当)をやってみた

https://paiza.jp/works/mondai/c_rank_skillcheck_archive/umpire

**問題: 野球のストライクとボールのコール**

**入力**: 投球数 `N` と各投球の結果 `s_1` から `s_n` (`strike` または `ball`)
**出力**:
– ストライクが 1 〜 2 つたまったとき → `”strike!”`
– ストライクが 3 つたまったとき → `”out!”`
– ボールが 1 〜 3 つたまったとき → `”ball!”`
– ボールが 4 つたまったとき → `”fourball!”`

**アプローチ**:
1. 標準入力から投球数 `N` と各投球の結果を読み込む
2. ストライクとボールのカウントを初期化
3. 各投球結果を基にカウントを更新し、適切なコールを出力

**コード**:
“`python
# 標準入力からデータを読み込む
import sys
input = sys.stdin.read().strip().split()
N = int(input[0]) # 投球数

元記事を表示

【Python3】宝くじ (paizaランク C 相当)をやってみた

https://paiza.jp/works/mondai/c_rank_skillcheck_archive/lottery

**問題: 宝くじの当選結果を判定**

**入力**: 当選番号 `b`、購入した宝くじの数 `n`、および購入した各宝くじの番号 `a_1` から `a_n`
**出力**: 各宝くじが何等に当選したかを出力

**アプローチ**:
1. 当選番号 `b`、購入した宝くじの数 `n`、および購入した各宝くじの番号 `a_1` から `a_n` を標準入力から読み込む
2. 各宝くじの番号を当選番号と比較して何等に当選したか判定
3. 結果を出力

**コード**:
“`python
# 標準入力からデータを読み込む
import sys
input = sys.stdin.read().strip().split()
b = int(input[0]) # 当選番号
n = int(input[1]) # 購入した宝くじの数
tickets = [int(input[i+2]) for i in range(n)] # 購入した宝くじの番号リスト

元記事を表示

【Python3】Fizz Buzz (paizaランク C 相当)をやってみた

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

**問題: 1からNまでの整数を表示するが、特定の条件で文字列を代わりに表示**

**入力**: 整数 `N`
**出力**:
– 3の倍数かつ5の倍数のときには、”Fizz Buzz”
– 3の倍数のときには、”Fizz”
– 5の倍数のときには、”Buzz”
– それ以外の数値はそのまま表示

**アプローチ**:
1. 標準入力から整数 `N` を読み込む
2. 1からNまでの整数について条件を確認し、適切な文字列を生成
3. 結果を出力

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

# 1からNまでの整数を順に処理
for i in range(1, N + 1):
# 3の倍数かつ5の倍数のとき
if i % 3 == 0 and i % 5 == 0:
print(“Fizz Buzz”)
# 3の倍数のとき
eli

元記事を表示

【Python3】【殿堂入りキャンペーン】N倍の文字列 (paizaランク D 相当)をやってみた

https://paiza.jp/works/mondai/d_rank_skillcheck_archive/square

**問題: 指定された個数の「*」を繋げた文字列を出力**

**入力**: 整数 `N`
**出力**: `N` 個の「*」を繋げた文字列

**アプローチ**:
1. 標準入力から整数 `N` を読み込む
2. `N` 個の「*」を繋げた文字列を生成
3. 結果を出力

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

# N個の「*」を繋げた文字列を生成
result = ‘*’ * N

# 結果を出力
print(result)
“`

**コードの説明**:
1. **整数の読み込み**:
– `input().strip()` を使って標準入力から入力を読み込みます。
– `int()` を使って入力された文字列を整数 `N` に変換します。

2. **文字列の生成**:
– `’*’ * N` で、N個の「*」を繋げた文字列を生成します。

元記事を表示

【Python3】Eメールアドレス (paizaランク D 相当)をやってみた

https://paiza.jp/works/mondai/d_rank_skillcheck_archive/email_address

**問題: Eメールアドレスの構築**

**入力**: ローカル部 `s` とドメイン `t` が改行区切りで与えられる
**出力**: `s@t` の形式でEメールアドレスを出力

**アプローチ**:
1. 標準入力からローカル部 `s` とドメイン `t` を読み込む
2. `s` と `t` を `@` で結合してEメールアドレスを生成
3. 結果を出力

**コード**:
“`python
# 標準入力からローカル部とドメインを読み込む
s = input().strip()
t = input().strip()

# Eメールアドレスの形式で結合
email_address = s + “@” + t

# 結果を出力
print(email_address)
“`

**コードの説明**:
1. **文字列の読み込み**:
– `input().strip()` を使って標準入力からローカル部 `s` を読み込みま

元記事を表示

【Python3】足し算 (paizaランク D 相当)をやってみた

https://paiza.jp/works/mondai/d_rank_skillcheck_sample/addition

**問題: 2つの正の整数の合計を計算**

**入力**: 半角スペース区切りで2つの整数 `a` と `b`
**出力**: `a` と `b` を足した結果

**アプローチ**:
1. 標準入力から1行の文字列を読み込む
2. 半角スペースで分割して2つの整数 `a` と `b` を取得
3. 整数に変換して合計を計算
4. 結果を出力

**コード**:
“`python
# 標準入力から1行の文字列を読み込む
input_line = input().strip()

# 読み込んだ文字列を半角スペースで分割して2つの整数を取得
a, b = map(int, input_line.split())

# 整数に変換して合計を計算
result = a + b

# 結果を出力
print(result)
“`

**コードの説明**:
1. **文字列の読み込み**:
– `input().strip()` を使って標準入力から1行

元記事を表示

【Python3】一番小さい値 (paizaランク D 相当)をやってみた

https://paiza.jp/works/mondai/d_rank_skillcheck_sample/min_num

**問題: 5つの正の整数のうち最も小さい数字を出力**

**入力**: 5行にわたって正の整数が1つずつ与えられる
**出力**: 最小の整数を出力

**アプローチ**:
1. 標準入力から5つの整数を読み込む
2. 最小の整数を見つけて出力

**コード**:
“`python
# 5つの整数を格納するリスト
numbers = []

# 標準入力から5行の整数を読み込む
for _ in range(5):
num = int(input())
numbers.append(num)

# リストの中で最も小さい数を探す
min_number = min(numbers)

# 最小の整数を出力する
print(min_number)
“`

**コードの説明**:
1. **リストの初期化**:
– 5つの整数を格納するための空のリスト `numbers` を用意します。

2. **標準入力から整数を読み込む**:

元記事を表示

【Python3】十億連勝 (paizaランク S 相当)をやってみた

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

**問題: ゲームの隠し要素を満たす連勝数を数える**

**入力**: N個のステージと各ステージでの試合数A_i、最大連勝数X
**出力**: X連勝を達成する方法の通り数の下9桁

**アプローチ**:
1. ステージを順に進み、各試合結果を考慮して連勝数を更新。
2. 特定の連勝数に達する方法を動的計画法(DP)で記録。
3. DP状態は (連勝数, X連勝達成フラグ) の組み合わせ。
4. 最終結果を計算し、9桁に収める。

**コード**:
“`python
def push(dic, key, val):
“””辞書に値を追加または更新するヘルパー関数”””
if key in dic:
dic[key] += val
else:
dic[key] = val

# 入力を読み込む
N, X = map(int, input().split())
A = [int(input()) for _

元記事を表示

【Python3】ハノイの塔 (paizaランク A 相当)をやってみた

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

**ハノイの塔**のプログラムは、与えられた `n` 個の円盤を杭Aから杭Cに最短手順で移動する際の `t` 回目の状態を出力します。

**コードの手順**:
1. ハノイの塔の状態を再帰的にシミュレート。
2. 特定の手順数 `t` における状態を記録。
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(num_disks – 1, from_peg, aux_peg, to_peg)
if len(moves)

元記事を表示

OTHERカテゴリの最新記事