Python3関連のことを調べてみた2022年12月20日

Python3関連のことを調べてみた2022年12月20日

MIDIキーボードをゲームのコントローラーにしてみた話

## 音が出せるだけじゃないはず
MIDIキーボードは音楽活動に使われるイメージが大きいですが、仕組みを考えるともっと幅広い使い方ができるように思えます。一つ一つの鍵盤がスイッチだと考えれば、押したらオン、離せばオフのようなシンプルな仕組みと捉えられるはずです!
そこで今回は、実際にPythonを使ってMIDIキーボードの入力を取得して、いろいろと遊んでみました。

## MIDI入力を取得する
まずはとにかく入力を見てみたいですよね。どんな仕組みでキーボードが動いているのか確認してみます。

### pygame.midi
`pygame.midi`を使うと、PythonでMIDI入力を取得できるらしいです。
pygame自体はPythonではおなじみのゲーム制作ライブラリですが、その中にmidiを取得できる機能が付属していました。早速動作確認。
“`python
import pygame.midi as m

### midiキーボードを定義
m.init()
i = m.Input( m.get_default_input_id() )

while True:
i

元記事を表示

Python のデコレーターで関数以外を返した場合

デコレーターで関数以外を返した場合はどうなるのかを確認します。

# 結論
* エラーは起きない
* 受け取った関数名で、渡した値が定義される

“`python
def decotator(func: Callable):
return ‘test’

@decorator
def test_func():
return 1

>>> test_func
‘test’

# メソッドの場合も同様
class Test:
@decorator
def test_method(self):
return 1

>>> Test.test_method
‘test’
“`

これを利用して`callback`をデコレーターでラップしてオブジェクトを定義する、ということをやってみました。
Djangoの`ModelForm`のようにCSVを扱える自作nパッケージ`model-csv`で以下のような使い方を実装してみました。

“`python
# 今までの使い方
class BookCsv(ModelCsv):
# Column

元記事を表示

n個以上欠損値があるカラム(列)を削除

# 概要
pandasのデータフレームで欠損値がn個以上あるカラム(列)を削除したい場合の方法。

# データを用意
“`Python
import numpy as np
import pandas as pd

data_path = “path/train.csv”
df = pd.read_csv(data_path)
“`

# 方法1
dropna()を使う方法。
dropna()は欠損値ではない要素の数がn個以上ある列(行)を残し、それ以外の列(行)を削除する。
よって、欠損値がn個以上ある列を削除したい場合は、行数を取得して、(行数-n)をdropnaに渡してやれば良い。
以下は、n=5の場合。
“`Python
n_samples = len(df)
n_thresh = n_samples – 5 # 行数 – n
df_null_rm = df.dropna(thresh=n_thresh, axis=1)
“`

# 方法2
各列の欠損数を算出して、欠損数がn個より少ない列だけ抜き出す方法。
isnull()で欠損値か判定し、sum()で列ごとの欠損数

元記事を表示

【d.py】ココフォリア形式のログをどどんとふ形式のログに変換する

# 概要
discord.py用のcogコードです。
`main.py`から`load_extension`する事を想定しています。
`main.py`の作例は[こちら](https://qiita.com/HikaruR/items/e518441cbe5a9a6acd77)

## バージョン情報
Python 3.8.12
discord.py 2.1.0

# 実装される機能
TRPGセッションツール[ココフォリア](https://ccfolia.com)で出力されるログを、hybridコマンドを通して古き良きどどんとふ形式のログに変換します。
[どどんとふ全タブ用コンバータ](http://dummy.flop.jp/trpg/conv/)を通した後に文字化けしている状態を修復するhybridコマンドも同梱しています。

“`python:html_conv.py
import discord
from discord.ext import commands
import re #正規表現を扱うモジュール
import typing #typing.Optional解禁

元記事を表示

discord.pyでcogを使う

# バージョン情報
Python 3.8.12
discord.py 2.1.0

# 最小限に近いもの
## メインファイル
“`Python:main.py
import discord
from discord.ext import commands

prefix = ‘!’
COGS = [
“Greeting”
]

class MyBot(commands.Bot):
“””起動用のあれこれ”””
async def setup_hook(self):
for cog in COGS:
try:
await self.load_extension(cog)
except Exception as e:
print(e)
await self.tree.sync()

# 接続に必要なオブジェクトを生成
intents = discord.Intents.default()
intents.messages = True
bot = MyBot(
command_prefix

元記事を表示

Python3.11を最速インストールしようとしてSSLモジュールでハマった話

お疲れ様です。KBTです。
待ちに待ったPython3.11がリリースされてから早2ヶ月、皆さんそろそろPython3.6.Xからの乗り換えを検討されている頃でしょうか。
私も早速インストールしてみましたので、今回はインストール時にハマった話を書いてみたいと思います。

# 今回の環境
“`
# cat /etc/centos-release
CentOS Stream release 8
“`

# OpenSSLをインストールする
まずはOpenSSLをインストールします。
折角新しくインストールするなら今をときめくOpenSSL3系をインストールしたいですよね。
試しにdnfでインストールしようとしたところ、本日(2022/12/17)時点で3.0.1がインストールされるようです。
“`
# dnf install openssl3
Last metadata expiration check: 3:49:02 ago on Sat 17 Dec 2022 08:33:35 AM JST.
Dependencies resolved.
===================

元記事を表示

python 関数の可変長位置引数について改めて考える

## 可変長位置引数(スター引数)
可変長位置引数を用いると関数の呼び出しコードが簡潔になり読みやすくなる。

以下のように初めての人と知り合いで発言を区別するコードを記述する。
~~~python:exam.py
def hello(message, name):
if not name:
print(‘nice to meet you’)
else:
print(f'{message}! {name}さん’)

hello(‘こんにちわ’, ‘saku’)
hello(‘こんにちわ’, []) # 第二引数を指定しないとTypeErrorが発生する

>>>
こんにちわ! sakuさん
nice to meet you
~~~
このコードに可変長位置引数を使ってみる
~~~python:exam2.py
def hello(message, *name):
if not name:
print(‘nice to meet you’)
else:
print(f'{message}! {

元記事を表示

【PySimpleGUI】画像閲覧とPDF画像変換アプリを自作してみた

# PySimpleGUIを使って、デスクトップアプリケーションを自作

## 目的と背景

日々の業務でPDF資料を使うことが非常に多い。また、PDFの一部だけ切り取って、共有したいという機会も多く、PDFを開いて画面キャプチャしたりするのが手間。
Windows標準のエクスプローラーでも画像やPDFの中身を見ることは出来るが、他の情報(ディレクトリや、そのほかの実行ファイルなど)が多く扱いにくい。

## 完成品と動作

以下のような、GUIを作成。

![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3052682/c78cdb19-356e-864b-a833-ad78ef8b585d.png)

タブ1は、任意のディレクトリの画像形式(pnh,jpeg)のみが一覧で表示され、クリックすると中身の画像が閲覧できる。
※サイズは任意サイズに変更可能
※都合の良いPDFファイルがなく自作…

![画像4.png](https://qiita-image-store.s3.ap-nort

元記事を表示

【python】勉強メモ-その6 辞書について

### 1.はじめに
今回は、完全に自分用のメモとなります。

##### value(値)の取得方法
“`sample_01.py
favorite_languages = {
“Jane”: “python”,
“Sarah”: “c”,
“Ed”: “ruby”,
“Philip”: “python”,
}

ans = favorite_languages[“Jane”]
print(ans)

“`

“`result.txt
python
“`

##### .get() 存在しないキーにアクセスした場合のエラーハンドリング

`dict.get(“key”, “返すメッセージ”)`
第二引数を省略した場合は、`None`が返される。

“`sample_02.py
favorite_languages = {
“Jane”: “python”,
“Sarah”: “c”,
“Ed”: “ruby”,
“Philip”: “python”,
}

ans = favorite_languages.g

元記事を表示

paizaラーニング「i 番目の出力 3 Python3編」

https://paiza.jp/works/mondai/array_primer/array_primer__string_i-thinput_step3
#### 私の解答
“`Python3
n, m = map(int,input().split())
S = [“”] * m
values = input().split()
for i in range(m):
S[i] = values[i]
print(S[n-1])
“`
#### 解答例
“`Python3
values = input().split()
N = int(values[0])
M = int(values[1])

S = [0] * M
values = input().split()
for i in range(M):
S[i] = values[i]

print(S[N – 1])
“`

元記事を表示

paizaラーニング「文字列の配列の入力 2 Python3編」

#### 私の解答
“`Python3
li = [x for x in input().split()]
for ele in li:
print(ele)
“`

#### 解答例
“`Python3
S = [“”] * 10
values = input().split()
for i in range(10):
S[i] = values[i]

for s in S:
print(s)
“`

元記事を表示

paizaラーニング「i 番目の出力 Python3編」

https://paiza.jp/works/mondai/array_primer/array_primer__string_output_step3
#### 私の解答
“`Python3
li = [“good”, “morning”, “paiza”,”813″, “pa13”]
print(li[3-1])
“`
#### 解答例
“`Python3
li = [“good”, “morning”, “paiza”, “813”, “pa13”]
print(li[2])
“`

元記事を表示

paizaラーニング「全要素の出力 Python3編」

https://paiza.jp/works/mondai/array_primer/array_primer__string_output_step2
#### 私の解答
“`Python3
li = [“good”, “morning”, “paiza”,”813″, “pa13”]
for a in li:
print(a)
“`
#### 解答例
“`Python3
li = [“good”, “morning”, “paiza”, “813”, “pa13”]
for ele in li:
print(ele)
“`

元記事を表示

paizaラーニング「要素数の出力 Python3編」

https://paiza.jp/works/mondai/array_primer/array_primer__string_output_step1
#### 私の解答
“`Python3
li = []
li.append(“Hello”)
li.append(“paiza”)
li.append(“1234”)
li.append(“pa13”)
print(len(li))
“`
#### 解答例
“`Python3
li = [“Hello”, “paiza”, “1234”, “pa13”]
print(len(li))
“`

元記事を表示

paizaラーニング「要素の挿入 Python3編」

https://paiza.jp/works/mondai/array_primer/array_primer__elm_insert
#### 私の解答
“`Python3
N, M, K = map(int, input().split())
A = [int(x) for x in input().split()]

A.insert(M-1, K)
for ele in A:
print(ele)
“`
解答例2とほぼ同じでした。
#### 解答例1
“`Python3
values = input().split()
N = int(values[0])
M = int(values[1])
K = int(values[2])

A = [0] * N
values = input().split()
for i in range(N):
A[i] = int(values[i])

A.insert(M – 1, K)

for a in A:
print(a)
“`
#### 解答例2
“`Python3
N, M, K = map(i

元記事を表示

Slackのリアクション数を集計するアプリを作ってみた

本記事はCocone Advent Calendar 2022の18日目の記事となります。
# はじめに
はじめまして、ココネ新卒クライアントエンジニアの、たこくらげです。

ココネのエンジニア文化の1つにcode-festaというものがあります。
これはSlackのチャンネルで自分が実装したコードの共有や技術tips、実装で詰まった部分などを共有し、それに対してのリアクション数で半期毎に表彰を行うというものです。

code-festaは素晴らしい文化なのですが、一方で信じられないことに以前までこのリアクション数の集計は手動でやっていました…。(1時間とか普通にかかっていた)
流石にめんどくさいのでPythonの勉強を兼ねて簡易的な集計アプリを作りました。

# 作ったもの
まず初めに、このアプリを実行するためにあらかじめslack appを作成し、集計を行いたいチャンネルに追加をします。
今回は`conversations.history`と`users.info`を叩ければいいのでスコープは`users:read`と`channels:history`があれば良いかと思います

元記事を表示

リーダブルコードを読んで過去書いたコードを振り返る(表面上の改善編)

本記事は、[ハンズラボ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/handslab) 18日目の記事です。

# はじめに
断捨離していたら新卒の時に購入した[リーダブルコード](https://amzn.asia/d/0Oz7MMh)を見つけたので読んでみました。
本記事では、リーダブルコード第1部「表面上の改善」の内容を自分の解釈を踏まえて、過去に書いたコードや読んだコードを振り返ります。
# 本題
## 理解しやすいコード
以下は、三項演算子を入れ子で使っているパターンです。
ワンライナーで書かれていてとてもトリッキーなことをしているように見えます。
このコードを最初見た時、意味がわかりませんでした。

“`js
this.isDirty ? this.validFunc ? this.validFunc(this.modelValue) : this.errMessage ? false : true : null;
“`
三項演算子はかっこいいし便利ですが以下の書き方の方が読みやすいと思いま

元記事を表示

データ可視化Webアプリケーションをplotly-Dashで作る

# はじめに

Pythonで手軽にデータ可視化用Webアプリケーションを作れる[plotly](https://plotly.com/python/)と[Dash](https://dash.plotly.com/introduction)というライブラリを紹介して、ちょっと使ってみようと思います。

ざっくり言うと、plotlyで描いたグラフをWebアプリケーションフレームワークのDashで作ったものに載せることで完成するという使い方になっています。

# plotlyとは

plotlyはデータをさまざまなグラフで可視化できるPythonライブラリです。作成したプロットはインタラクティブな操作が可能で、ズームインしてさらに分析するなどもできます。

pipで簡単にインストールできます。(2022/12/16時点でバージョン5.11.0が最新版でした)
“`
$ pip install plotly
“`

## サブモジュールについて

* `plotly.express`
* データを可視化するための関数が定義されています。
* 高レベルなAPIを提供してい

元記事を表示

paizaラーニング「要素の削除 Python3編」

https://paiza.jp/works/mondai/array_primer/array_primer__elm_erase
#### 私の解答
“`Python3
N, M = map(int, input().split())
A = [int(x) for x in input().split()]
del A[M-1]
for ele in A:
print(ele)
“`
#### 解答例1
“`Python3
values = input().split()
N = int(values[0])
M = int(values[1])

A = [0] * N
values = input().split()
for i in range(N):
A[i] = int(values[i])

del A[M – 1]

for a in A:
print(a)
“`
#### 解答例2
“`Python3
N, M = map(int, input().split())
A = [int(x) for x in input().spl

元記事を表示

paizaラーニング「配列末尾への追加 Python3編」

https://paiza.jp/works/mondai/array_primer/array_primer__push_back
#### 私の解答
“`Python3
N, M = map(int, input().split())
A = [int(x) for x in input().split()]

A.append(M)
for ele in A:
print(ele)
“`
私の解答は解答例2とほぼ同じでした。
#### 解答例1
“`Python3
values = input().split()
N = int(values[0])
M = int(values[1])

A = [0] * N
values = input().split()
for i in range(N):
A[i] = int(values[i])

A.append(M)

for a in A:
print(a)
“`
#### 解答例2
“`Python3
N, M = map(int, input().split())
A = [int(x)

元記事を表示

OTHERカテゴリの最新記事