- 1. 【Python】並列処理モジュールmultiprocessingを使うと、毎回結果が異なるケースがあるのか?競合状態とは
- 2. if文がゼロ(0)を持つ変数を識別できるように書く
- 3. python いろんなカッコがわからなかった話(自分用)
- 4. python 反復処理(自分用)
- 5. Python3: GATT で String データを送受信
- 6. python if構文(自分用)
- 7. Python認定基礎試験 setに関するメモ
- 8. Python認定 基礎試験 タプルのメモ
- 9. 独学でpythonを始めて挫折した話(自分用)
- 10. Python3 基礎試験 スタックとキューとcollections.deque のメモ
- 11. 【色変記事】AtCoderで入茶した件
- 12. Pythonで始める!金融計算をシンプルに:計算記号を使いこなす
- 13. python3 基礎試験 判定と繰り返しのメモ
- 14. Python3: GATT で String データを送信
- 15. Pythonの例外処理を1から解説
- 16. Python3: GATT のデータを受信
- 17. [Python] 辞書操作
- 18. Python3: GATT の Characteristic を調べる
- 19. Python logging 解説(初心者向け)
- 20. 個人的TRPGbotの制作記
【Python】並列処理モジュールmultiprocessingを使うと、毎回結果が異なるケースがあるのか?競合状態とは
# 概要
Pythonで並列処理を行うことができる`multiprocessing.Pool()`を使ってみました。並列処理を使うと、場合によっては、
「同じプログラムを走らせても、毎回異なる結果になる」
というケースがあること(=競合状態ともいう)がわかりましたので、そちらをサンプルコード付きで紹介します。
# 検証内容と前提
今回は、「100レコードを保持するデータベースのテーブルから、100のレコードidを一定の塊(チャンク)に分割して、チャンクごとに並列処理でリストに代入していく」
という並列処理を想定します。
例えば、100件のレコードがある場合で、チャンクは10とします。
すると、`[0 – 9]`, `[10 – 19]`…といった形でまず塊を作成していって、それが4つたまったら、並列処理で一斉にリストの中の要素を別のリストに代入していく、という流れです。この例で言うと、`[0 – 9]`, `[10 – 19]`、`[20 – 29]`、`[30 – 39]`の4つになったら、それぞれのリストの要素を共有リスト(ここでは`shared_list
if文がゼロ(0)を持つ変数を識別できるように書く
argparseを使って引数で受けた数値ゼロ(`0`)の条件処理でハマった問題
横着して`if args.hoge:`と書くと処理できない例
“`py
num: int = 1if num:
if num > 0:
print(“yes”)
else:
print(“no”)
else:
print(“ERROR”)# yes
“`
上の条件文`if num:`は`num`が正でも負でも動くが、ゼロのときだけ動かない
“`py
num: int = 0if num:
if num > 0:
print(“yes”)
else:
print(“no”)
else:
print(“ERROR”)# ERROR
“`
`if num:`にゼロ(`0`)を認識させるには、`is not None`を付ければよい
“`py
num: int = 0if num is not None:
if num > 0:
print(“yes”
python いろんなカッコがわからなかった話(自分用)
こんにちは。
絶賛python学習中に非エンジニアです。
当初、理解するのに苦労した3つのカッコについて記述する。1. ():タプル
2. []:リスト
3. {}:辞書型(dict)
3. まとめ1.():タプル
–
タプルの特徴:
イミュータブル(変更不可):タプルは作成後にその要素を変更することができません。リストは要素の追加、削除、変更ができますが、タプルはそれができません。
カッコで表現:タプルは通常、丸括弧 () で定義されますが、カンマがあれば括弧なしでもタプルとして認識されます。
複数の型を保持できる:タプル内には異なるデータ型を持つ要素を含めることができます。例えば、整数、文字列、浮動小数点数などが混在していても問題ありません。
タプルの特徴的な用途:
イミュータブルであるため、データが変更されることを防ぎたい場合に使います。
関数から複数の値を返すときなどにもよく使われます。
“`
# タプルの例
tuple = (1, 2, 3, “apple”, “banana”)
print(tuple)# 出力 ⇒ (1, 2, 3, ‘appl
python 反復処理(自分用)
1.基本編(forを活用)
–
for構文:for 代入先 in 代入先へ入れる要素 というのが基本的な構造である。
“`
# for構文による反復処理
# iという代入先へ5回順番に代入するfor i in range(1,6): # range(1,6) ⇒ 1~5という範囲という意味(1~6ではない)
print(“Hello World”)# 出力 ⇒ Hello World(5回表示される)
“`
2.基本編(whileを活用)
–
VBAにもwhileによる反復処理があり、こちらについては理解しやすい。
ちなみに無限ループに陥りやすい
while構文:while 比較する対象 比較演算子 比較対象 という構造である。“`
# while構文による反復処理
# iが5より小さい間は繰り返すという意味i=0
while i < 5: print("Hello World") i + = 1 # この記述がない場合、無限ループとなるため要注意!
Python3: GATT で String データを送受信
通信相手のアドレスと Characteristic UUID を与えて、String を送受信する方法です。
## プログラム
“`py:send_get_data.py
#! /usr/bin/python
# send_get_data.py
#
# Oct/02/2024
# ——————————————————————
import asyncio
from bleak import BleakClientDEVICE_ADDRESS = “2C:BC:BB:65:E8:5A” # デバイスのMACアドレスを入力
CHARACTERISTIC_UUID_READ = “7DEF8317-7301-4EE6-8849-46FACE74CA2A” # 通知を受信するキャラクタリスティックのUUID
CHARACTERISTIC_UUID_WRITE = “7DEF8317-7302-4EE6-8849-46FACE74CA2A” # 書き込みを行うキャラクタリスティックの
python if構文(自分用)
1.基本編
–
if構文はif、elif、elseで構成される。(elif、elseは省略可能)“`
# 変数aとbを比較し、結果をprint関数で表示するa = 20
b = 10if a==b:
print(“aとbは等しいです”)
elif a>b:
print(“aはbより大きいです”)
else:
print(“bはaより大きいです”)# 出力 ⇒ aはbより大きいです
“`2.ネストも可能
–
あまり深くなりすぎるとコードの可読性が下がるので、おすすめしません。
(エクセル表関数やVBAを使いこなしている方がよくやりがちなパターン)“`
a = 50
b = 10
c = 30# aとbを比較し、その後ネストによりaとcを比較する(ネストする場合)
if a > b:
print(“aはbより大きい”)
if a > c:
print(“aは最も大きい”)# 出力 ⇒ aはbより大きい
# 出力 ⇒ aは最も大きい# aとbを比較し、その後ネストによりaとcを比較
Python認定基礎試験 setに関するメモ
Pythonエンジニア認定基礎試験の勉強メモです📝
ここでは`set`について。
# setとは
集合を扱うデータ型で、要素を重複しないように保持する。
setに要素を追加するには `add()`メソッドが使用できるが、要素同士は順序を持たないため
要素を取り出す時も、決まった順序で取り出されることはない。
集合同士で、演算も可能。# set()関数で定義できる
`set()関数`の引数はリストやタプルなどの反復可能体。
“`python
# 引数: リスト
set_1 = set([‘a’, ‘b’, ‘c’, ‘d’])# 引数: タプル
set_2 = set((1, 2, 3, 4))
“`# 特定の要素を含むかどうかの判定
“`python
sample_set = {‘sample’, ‘keyword’}print(‘keyword’ in sample_set) # True
print(‘password’ in sample_set) # False
“`
この処理の時間計算量は`O(1)`になる。# set同士の演算
### 和集合
Python認定 基礎試験 タプルのメモ
Pythonエンジニア認定基礎試験勉強中のメモです📝
この記事はタプルについて。# タプルとは
複数の値を扱うデータ型。
一般的に `(‘apple’, ‘banana’, ‘peach’)`のようにカンマ区切りの要素を `()`囲む。
(※ 実際にはカンマで要素が区切られていればOKなので、()は省略できる)
一度定義されたタプルは、その後に要素の追加、削除、値の変更などはできない。
“`python
tuple_1 = (1, 2, 3)# 既に定義されたタプルを使って、新たにタプルを定義することは可能
tuple_2 = tuple_1 + (4, 5,)print(tuple_1) # (1, 2, 3)
print(tuple_2) # (1, 2, 3, 4, 5)
“`## タプルの定義方法
“`python
# カンマ区切りの要素を括弧で囲む
tuple_3 = (‘dog’, ‘cat’, ‘mouse’)# ()を省略した形もある
tuple_4 = ‘rice’, ‘bread’, ‘noodle’# 要素が一つのときは末尾にカンマを
独学でpythonを始めて挫折した話(自分用)
きっかけ
–
初めまして。
私は大企業で働く非エンジニアです。(IT企業ではない)
この記事では下記のついてまとめています
(自分の頭の中の整理をするためのアウトプット)1.なぜpythonを始めたのか
2.すぐに挫折する
3.転機と学習再開まで
4.挫折した原因を考える
5.アウトプットする習慣を作る
6.今後の活動1.なぜpythonを始めたのか
–
私は株式投資を行っており、各銘柄の信用倍率、貸借状況の各指標をチェックしていました。
正直、これが面倒だなって思ってた時にyoutubeで「pythonで自動化」みたいな動画を見て、「これやってみよう!」と思い立ち、pythonについて調べ始める。2.すぐに挫折する
–
2021年1月
当時VBAを少しかじったことがある程度の知識しかなかったが、なんとかなるだろうと軽い気持ちでpythonに関する書籍の口コミを調べる。⇒Python3 基礎試験 スタックとキューとcollections.deque のメモPython3エンジニア認定基礎試験の勉強中です。
今日は問題を解いていて、あれ?となったスタックとキューについて、そこから派生して調べたcollections.dequeの処理が効率的な理由を簡単にメモを残します。# スタック
**LIFO : 後入れ先だし = 最後に追加したものが最初に出てくる**
`push : スタックにデータを追加すること`
`pop : スタックからデータを取り出すこと`
“`python
# 簡単な例
stack = []
stack.append(1) # pythonではpushをappend()を使用
stack.append(2)
stack.append(3)
print(stack) # [1, 2, 3]
print(stack.pop()) # pythonではpop()を使用 -> 最後に追加した 3 が取り出される
“`
# キュー
**FIFO : 先入れ先出し = 先に追加したものが先に出てくる**
`enqueue : キューにデータを追加する`
`dequeue : キューからデータを取り出す`“`python
【色変記事】AtCoderで入茶した件
# 始めに
初めましてyuumaと申します。
ABC373で初めての色変を体験したので色変記事というものを書いてみようと思います。
![スクリーンショット 2024-10-04 135742.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896155/b2469dc4-9b69-ba9a-0c97-541293a7b19c.png)
# 自己紹介
* 国立理系の大学一年生
* 大学入学前のプログラミング経験なし
# やったこと
* ほぼ毎週コンテストに出た(abc352から)
* AtCoder Daily Traningに参加(9月から)
大体上の2つだけであとはたまにA,B,Cを埋めていました。
# 使用言語
python3を使っています。~~python3で通らないときはChatGPTにC++へ変換させることもあるので、C++を使っていると言えるかもしれません~~
# 覚えたアルゴリズム
* 二分探索
* DP(動的計画法)
* 累積和
* BFS(幅優先探索)
# 競プロをやっていてよかったこ
Pythonで始める!金融計算をシンプルに:計算記号を使いこなす
Pythonは、金融業界でも利用されています。書籍も何冊か見つけられると思います。
本記事では、Pythonの基礎的な計算記号を使って、金融計算をどのように行うか、具体的な例を交えて解説していきます。
## この記事で得られること
– +, -, *, \/などの計算に利用する演算子の使い方がわかる。
– お金のシュミレーションに関心の持てるかも
– コードがシンプルにしてあるので、取り入れやすい。## なぜ、この内容の記事なのか
シンプルに書いてあるので、すぐに行動に移しやすいのではと意図しています。
少しでも、お金を増やすことに関心持ってもらえるかも思っています。# print関数と計算記号の基本
Pythonで計算結果を表示する際に最もよく利用されるのがprint()関数です。この関数に計算式を渡すことで、その結果をコンソールに出力することができます。#### Pythonで利用できる主な計算記号は以下の通りです。
– +: 足し算
– -: 引き算
– *: 掛け算
– ***: べき乗
– /: 真の除算(小数点以下を含む)
– //: 整数除算(小数点以下を切
python3 基礎試験 判定と繰り返しのメモ
# 1. `is` と `==`
“`
if value is None:
“`
“`
if value == None:
“`
このふたつがあったとき、
前者は value が Noneであるかを判定可能。
後者もほとんどの場合で正しく判定可能ではあるものの、 `is`での判定よりも時間がかかったり、`==`の動作を変更するようなことも可能。
よって、`valueがNoneであるかを判定する最適な方法`は`if value is None:`である。
# 2. range()関数
“`
range(stop)
range(start, stop)
range(start, stop, step)
“`
のいずれかで使用可能。
`stop は含まない (< stop)` `start 省略 => 0始まり`
`step 省略 => 1ずつ増加`
# 3. dicに使えるメソッド
`items()` : key, valueをペアで取得。
`keys()` : keyのみを取得。
`values()` : valueのみを取得。
“`python
data = {‘key1
Python3: GATT で String データを送信
送信先のアドレスと Characteristic UUID を与えて、String を送る方法です。
## プログラム
“`py:send_data.py
#! /usr/bin/python
#
# send_data.py
#
# Oct/02/2024
# ——————————————————————
import asyncio
from bleak import BleakClientDEVICE_ADDRESS = “08:3A:F2:66:04:4A”
CHARACTERISTIC_UUID = “7DEF8317-7302-4EE6-8849-46FACE74CA2A”# ——————————————————————
async def send_data(address, char_uuid, data):
async with BleakClient(address)
Pythonの例外処理を1から解説
# はじめに
Pythonには例外処理の書き方がいくつかあります。
この記事では、例外処理の基本となるtry-except構文、ファイル操作などでお馴染みのwith文を紹介し、最後にコンテキストマネージャについて解説します。
:::note info
Pythonコード多め・文章少なめです。
::::::note info
例外処理について初歩の初歩から始まり、Python独自の書き方まで解説します。
:::# 例外とは
IndexErrorやValueErrorなど、コードを動かすとエラーを起こすことがあります。これを **例外** と呼びます。
“`Python
lst = [2, 4, 6, 8]
element = lst[4] # IndexError (リストの範囲外を見に行っているため)
“`
“`Python
word = “Python”
value = int(word) # ValueError (アルファベットをint型にしようとしたため)
“`# try-except構文
## try節, except節
例外が出るかも
Python3: GATT のデータを受信
こちらで送信する String を Python で受信しました。
[ESP32: GATT で String を送信](https://qiita.com/ekzemplaro/items/52dc8b065a431147013c)送信元のアドレスと Characteristic UUID が必要です。
## プログラム
“`py:get_data.py
#! /usr/bin/python
#
# get_data.py
#
# Oct/02/2024
# ——————————————————————
import asyncio
from bleak import BleakClientDEVICE_ADDRESS = “08:3A:F2:66:04:4A”
CHARACTERISTIC_UUID = “00002a19-0000-1000-8000-00805f9b34fb”async def read_characteristic(address, char_uu
[Python] 辞書操作
# 辞書のキーと値を入れ替える
こんな感じです。
~~~Python:Irekae.py
dic = {“英語”:90, “国語”:85, “数学”:82, “理科”:95, “社会”:84}
reversed_dic = {j:i for i, j in dic.items()}
print(reversed_dic)
# 出力結果
{90:’英語’, 85:’国語’, 82:’数学’, 95:’理科’, 84:’社会’}
~~~
# 2つの辞書をマージする その1
辞書に対してアスタリスク2つをつけると、キーワード引数としてアンパックできるので、アスタリスクを2つつけた辞書データを{}で囲って結合します。
~~~Python:merged_dict1.py
menu1 = {“カツカレー”:850, “味噌カツ定食”:900, “アジフライ定食”:800}
menu2 = {“鯖の塩焼き定食”:950, “シェフの気まぐれ定食”:1000}
merged_menu = {**menu1, **menu2}
print(merged_menu)
# 出力結果
# {‘カツカレー’:
Python3: GATT の Characteristic を調べる
事前に bluetoothctl で ペアリングをしておく必要があります。
## プログラム
“`py:get_services.py
#! /usr/bin/pythonimport asyncio
from bleak import BleakScanner, BleakClient# 対象デバイスの MAC アドレスを設定
TARGET_MAC_ADDRESS = “2C:BC:BB:65:E8:5A” # ここに対象デバイスの MAC アドレスを入力# デバイスをスキャンして、接続後にサービスと characteristic を取得する関数
async def connect_and_list_characteristics():
print(f”Scanning for device with MAC address: {TARGET_MAC_ADDRESS}”)# BLE デバイスのスキャン
devices = await BleakScanner.discover(return_adv=True)
targe
Python logging 解説(初心者向け)
# はじめに
Pythonのloggingについての記事です。
:::note info
loggingについて詳しくない人向けの記事です。ログの初歩から始めて、図やPythonコードを見ながら進めていきます。
:::# ログとは
ログとは、アプリケーションやシステムが実行中に生成する記録やメッセージのことです。
よくあるのはこういうログ。
| ログ名 | 説明 |
|:-:|:-:|
| エラーログ | システムやアプリケーションのエラーに関する情報。 |
| イベントログ | 特定のイベントやアクションに関する記録。 |
| デバッグログ | 開発中のデバッグ情報。詳細な実行状況を記録する。 |
| 情報ログ | 一般的な運用情報。システムの状態や進行状況を示す。 |# 実際に動かしてみる
まずはPythonのloggingがどのような出力をするのか見てみます。
“`Python: Python
import logginglogging.warning(“This is warning message!!”)
print(“reached
個人的TRPGbotの制作記
# TPRGbotが作りたい!!!
### 卓回す時にDiscordの中で「いあきゃら」とか、「CCFOLIA」とかのURLを管理失敗する人向け
## 目次
| [1. 目標](#1-目標) |私のやりたかった事|
|:—–:|:—–|
| [2. 成果物](#2-成果物) |結果的に出来上がった物|
| [3. 追加予定の仕様](#3-追加予定の仕様) |追加を予定している要素|
| [4. 悩み](#4-悩み) |技術力ない故の悩み|
| [5. リンク集](#5-リンク集) |リンク集|## 1. 目標
### 開発目標
1. TRPGを進行する上で便利になるツールの制作
1. 仕様ごとに分割した見やすいコードを意識した制作
1. 処理の安定と24/7に耐えうるプログラム制作
1. データベース化することによって、マルチサーバ上で動作するようにする
### 仕様目標
1. 各TRPGに使うロール等の管理
1. Roomでの秘匿処理の管理
1. 各PCのキャラシの管理
1. 秘匿処理用スレッドを自動作成し、HO毎に自動追加## 2. 成果物
###