Python3関連のことを調べてみた2023年01月25日

Python3関連のことを調べてみた2023年01月25日

Pythonで、我ながら下らないコードを書いてしまった(学習まとめ?)

ふとある時、カタカナ単語を五十音順(≒辞書配列順)にソートしてくれる機能が欲しくなってコーディングし始めました。
しかし、よくよく調べてみたら、Pythonの配列に「sort」メソッドがあるではありませんか・・・(笑)。
とんだ「再発明」をしてしまいました・・・(泣)。
でもせっかくなので、自分で書いたコードをQiitaの記事にしてしまおうと考えたワケです(爆)。
よかったら、ご自分の環境で実行して(みるまでもないか)・・・。
(どうせ、「sort」メソッドとほとんど結果は変わらないし)。
もしも、Python標準の「sort」メソッドと挙動や結果が違う部分があったら報告してみてください。
(多分、変更しませんが・・・)。
~~~python:kana_sort.py
# coding: utf-8

#各モジュールの読み込み
import sys
import numpy

#ソート処理する各文字列の最大の長さ
#(実際には、配列に1文字ずつ格納するので「1行分の要素数」と等価)
CHRS_MAX_NUM = 10

#日本語のカナ文字から一意の数値へと変換するための辞書

元記事を表示

DDAによる線分描画

DDA(デジタル微分解析器)による線分の描画をします。
整数演算のみで描画ができるので、アセンブラに落とすときなど便利です。
Pythonで書かれています。グラフィックス・キー入力はpygameを使っています。

“`line.py
#!/usr/bin/python3
from pygame.locals import *
import pygame
import sys
import os

def draw_line(screen,x1,y1,x2,y2):
dx,dy =x2-x1 if x2>x1 else x1-x2 , y2-y1 if y2>y1 else y1-y2
sx,sy = 1 if x2>x1 else -1 , 1 if y2>y1 else -1
if ( dx >= dy ):
e = -dx
for i in range( dx+1 ):
set( screen,x1,y1 )
x1 += sx
e += 2*dy
if ( e>=0 ):

元記事を表示

InfluxDB v2: API の使い方 (Python3)

関連ページ
[InfluxDB v2: API の使い方](https://qiita.com/ekzemplaro/items/6963c9fa714fb47f4d54)

## 準備

環境設定ファイルの作成

“`text:.env
bucket = “dbtest”
org = “ekzemplaro”
token = ‘***-_nfenN6m5LhKUXNcrQ_H3dZSQo2pVpyyJg6nskHEwcl6bMsjc1vyzY9b11hSyGiQMOg==’
url=”http://localhost:8086″
“`

## データの書き込み

“`py:api_insert.py
#! /usr/bin/python
#
# api_insert.py
#
# Jan/24/2023
#
# ——————————————————————
import os
import sys
import json
import requests
from dotenv imp

元記事を表示

【AtCoder入茶記事】入茶しました!

# 1.挨拶
どうもこんにちは、TsubakiMintです。
AtCoderを初めて一つ目の目標としていた入茶を達成しましたので、入茶記事というものを書きます。

# 2.自己紹介
– ハンドルネーム:TsubakiMint
– 所属:地方国立大の理学部数学科学部生
– 使用言語:Python3
– 競プロを始めた時期:2022年12月

# 3.競プロを始めた理由
僕は実は競プロを始めるまでプログラミングが全くできませんでした。具体的には「大学のJavaの授業で途中から分からなすぎてバックれ、単位は貰えたが最低評価」、「大学のCの授業で同様の理由でバックれ、落単」くらい酷かったです。
このままではよくないと思い、プログラミングの勉強を真面目にやろうと思いました。しかし、ただ勉強するだけでは飽きてしまうと思いました。勉強の成果がコンテストの結果として返ってくる競プロはうってつけだったのです。
また、言語は直感的に書ける(と調べたら書いてあった)Pythonを選びました。

# 4.入茶するまで
## 4.1.コンテスト初参加まで
– 言語はPythonを使用すると決まったので、PC上に

元記事を表示

自然数ローマ数字変換 Python3

自然数とローマ数字の変換をします。

“`romanumber.py
#!/usr/bin/python3
import sys

TABINT=[1000,900,500,400,100,90,50,40,10,9,5,4,1]
TABROMA=[“M”,”CM”,”D”,”CD”,”C”,”XC”,”L”,”XL”,”X”,”IX”,”V”,”IV”,”I”]
ERRPAT=[‘DD’,’LL’,’VV’, # 500,50,5 がダブらないように
‘CMC’,’CDC’,’XCX’,’XLX’,’IXI’,’IVI’,
#CMCM,CMCのようなエラーパターンは’CMC’にまとめてある
‘DCD’,’LXL’,’VIV’] # 515のパターン

def toint(s):
s=s.upper()
for i in ERRPAT:
if (i in s): return(-1)
a=0
i=0
j=0
while(s):
if (s.startswith(TABROMA

元記事を表示

ハノイの塔を解くプログラム python3

再帰アルゴリズムで、ハノイの塔を解くプログラムです。

`$ chmod +x hanoi.py`で実行権限を付けて実行して下さい。
`’./$ hanoi.py `で、n段のハノイの塔を解きます。

“`hanoi.py
#!/usr/bin/python3
import sys

def hanoi(n,from_,to,work):
if (n>0):
hanoi(n-1,from_,work,to)
print(“move #%d disk from %s to %s” % (n,from_,to))
hanoi(n-1,work,to,from_)

hanoi(int(sys.argv[1]),’Left’,’Center’,’Right’)

“`

# 実行結果

“`
$ hanoi.py 3
move #1 disk from Left to Center
move #2 disk from Left to Right
move #1 disk from Center to Right
move #3 disk from

元記事を表示

unittestの使い方について個人的メモ

# tl;dr;
* unittestはPythonが公式に用意しているユニットテストフレームワーク
* 初めてテストを使ったが、大規模なコードになればなるほどテストが重要だと思うので、今後は、並行してテストを書いていくようにしたい。
* testを先に書いてから開発をする手法もあるらしい DRR?
* テストはテストするmoduleとディレクトリを分ける
* argumentを渡すようにすることで、argparaseをテストすることもできる

official ref.
https://docs.python.org/3/library/unittest.html

# Things learned
#### 1. test moduleの場所について
unittestはテストしたいmodule内に直接記載するケースもあるが分けるケースが多い。それは以下のような理由からである。(公式Ref抜粋)
そのため今回はtestsフォルダを直下に作り,そこにtest.pyを作成した
> * The test module can be run standalone from the comm

元記事を表示

40代おっさんFastAPI、MongoDB連携メモ 認証関係②

## 本記事について

この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
などありましたらコメントにてお知らせいただければ幸いです。

## CORS

オリジン間リソース共有 (Cross-Origin Resource Sharing, CORS ) は、追加のHTTPヘッダーを使用して、あるオリジンで動作しているウェブアプリケーションに、異なるオリジンにある選択されたリソースへのアクセス権を与えようウェブアプリケーションは、自分とは異なるオリジン (ドメイン、プロトコル、ポート番号) にあるリソースをリクエストするとき、オリジン間HTTPリクエストを実行します。

### オリジン(Origin)

Originとは

` “://” [ “:” ]`

scheme: https,http
hostname: google.comなど
post : 443など

これがすべて同じになるのが同一オリジンとみなされる

### Cross

オリジン単位でのアクセス制御可

元記事を表示

40代おっさんFastAPI、MongoDB連携メモ 認証関係

## 本記事について

この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
などありましたらコメントにてお知らせいただければ幸いです。

## 認証関係のクラスを作る

プロジェクト直下にファイルを作成`auth_utils.py`

JWTとは
JSON Web Token(JWT)Webを介して、2者の間で、情報を安全に転送するために使用されるJSONオブジェクト。認証システムや情報交換に用いられています。転送される情報は、デジタル署名されているため、信頼することができ。Token自体は主にヘッダー、ペイロード、署名で構成されている。これらの3つの部分はドット”.”で区切られている。

### シークレットキーを環境変数に定義

`.env`ファイルに

“`python
CSRF_KEY=XXXXXX
JWT_KEY=XXXXXX
“`

### auth_utils.py

“`python
import jwt
from fastapi import HTTPException
from passlib.context

元記事を表示

Alexaにスプレッドシートで作ったオリジナル単語帳を読んでもらう

# はじめに

Alexaを使って簡単に聞き流すタイプの単語帳を作れないかと思ったので作りました。
スキルの公開はしたくなかったので、自分専用です。

# ざっくり構成
![素材類.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236151/f4b15876-d667-2e24-49ad-89b512556976.png)
開発環境を作るのがめんどくさいので今回は[Amazon Alexa developer console](https://developer.amazon.com/alexa/console/ask)を利用してスキルの開発をします。

# Google SpreadSheetを使って単語帳をつくってAPIで返すようにする
外部から叩いて、SpreadSheetの内容を返すようにします

## データを作る
* シートに単語を記入していきます。
* シート名は`シート1`になってます
![単語帳 – Google スプレッドシート – Google Chrome 2023_01_2

元記事を表示

ウルシステムズプログラミングコンテスト2023 D問題解説(Pythonコード例付)

# はじめに 

 本記事はPythonでAtcoderにチャレンジしているけど、Pythonはコード例がないため解説がわかりにくい!と感じている方を対象としています。
 私自身大してレートも高くないので、不備等あるかもしれませんがご了承くださいm(_ _)m
 質問や指摘などもコメント等に書いてくださったら対応していきたいと考えていますのでどしどしコメントしてください。(内容がわかりにくいぞ!みたいな文句でもオールオッケーです笑)
# ウルシステムズプログラミングコンテスト2023(AtCoder Beginner Contest 286) [D問題]
 問題のURLはこちらです。[ウルシステムズプログラミングコンテスト2023(AtCoder Beginner Contest 286)](https://atcoder.jp/contests/abc286/tasks/abc286_d)
# 使う手法 
今問題では**動的計画法**を利用していきます。
動的計画法とはざっくりいうと、**問題を小さく分割して、ひとつ前の計算結果を利用して最終的な解を見つける**というものです。

元記事を表示

40代おっさんFastAPI、MongoDB連携メモ③

## 本記事について

この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
などありましたらコメントにてお知らせいただければ幸いです。

## update

“`python
async def db_update_todo(id:str, data: dict) -> Union[dict, bool]:
todo = await collection_todo.find_one({“_id”: ObjectId(id)}) # find_oneでObjectId(id)が存在するか検証無ければnone
if todo:
updated_todo = await collection_todo.update_one( # update_oneを使ってMongo DBにアクセス
{“_id”: ObjectId(id)}, {“$set”: data}
)
if (updated_todo.modified_count > 0): # modi

元記事を表示

PythonでのDebug方法 (もう`print()` は使わない)

tl,dr;

* コードのデバッグに`print()`はデメリットが多いため使わない
* 代わりに`Logging`を使う
* ベストプラクティスがありそうだが、わからない

Summary

プログラムを書くときに不可避のエラー。これまでは、エラーが発生した際にはエラーメッセージを元にコードの怪しいと思われる箇所に `print(‘check’)` などと入れることで、エラー箇所の特定を行なっていた。しかし、これはどうにもエンジニアっぽくない。そしてなんかダサい。
というわけで、脱`print()`の方法を探すと、`Logging`というデバッグ用の基本モジュールがPythonには用意されていた。
Logging HOWTO: https://docs.python.org/3/howto/logging.html

Why use logging (don’t use `print()`)

`print()`を使うデメリット
* 効率性の問題
* `print(‘checkpoint 1’)`など内容をユニークにして打ち込む必要がある。怪しい箇所がすぐに特定でき

元記事を表示

Pythonでの音声信号処理 (8) 波の解析の一歩

## やりたいこと
波形データを解析するための理屈的な側面を整理すること

## やってみた
### 波形データの一般形
波のデータは、色々なsin波を合成したもの。
sin波といっても、大きさが違うもの、周波数が違うもの、ちょっと横にズレた(いわゆる位相が違う)ものなどがある。

位相がずれたsin波は、sinとcosの和で表現できる。
つまり、
sin(x + φ) = A・sin(x) + B・cos(x)
のように書くことができる。

このことから、どんな波形データも、
F = (a1・sin(x) + b1・cos(x)) + (a2・sin(2x) + b2・cos(2x)) + ・・・
のような形で表現できる。

### やりたい解析

sin(2x)の「2」の部分は、いわゆる周波数。なので、a2・sin(2x)でのa2は、「2」の周波数がどれくらいの大きさで入っているかということ。
つまり、波 F に対して、a1、b1、a2、b2、・・・が分かれば、波に含まれている、それぞれの周波数の大きさが分かるということになる。

まずは、この a1、b1、a2、b2、・・・を算出

元記事を表示

Pythonでの音声信号処理 (7) 色々なデータを鳴らす

## やりたいこと

ノコギリ波や矩形波などを鳴らしてみる

## やってみた

### ノコギリ波
#### ノコギリ波の再生
“`p7_1.py
# -*- coding: utf-8 -*-
import sys
sys.dont_write_bytecode = True

from multiprocessing import Process
import time
from pydub import AudioSegment
from pydub.playback import play

from Grp import Line
import Dummy as dmy

def main():
smpl = 44100 # サンプリングレートは44.1KHz
sec = 1 # 1秒分

# ノコギリ波
wav1 = dmy.makeWave(1, smpl, sec, 0, 0, 1)
for i in range(64):
freq = i + 1
wav1 += dmy.makeW

元記事を表示

nlplotの共起ネットワークで概要を抽出する

# この記事はなに?

前から「共起ネットワークで遊んでみたいな〜」と思っていて、実際に色々遊んでみた記録です。

# 環境構築

mecabなどのインストールは下記。
“`
echo “mecab-python3==1.0.5
nlplot==1.4.0
pandas==1.4.3
beautifulsoup4==4.11.1” > pipfile
pip install -r pipfile
“`
beautifulsoup4はhtmlからテキストを抽出するのに使用してるだけなので、必要ない人はなくても大丈夫です。

# 実装
詳細は省きますが、こんな感じで実装してます・

* mecabにない単語は、前後の単語を組み合わせてプログラム側で単語として判断するようにしている
* 名詞、動詞、形容詞を抽出対象に設定
* 名詞、動詞については無視する単語も設定(する、ある、いる、など)
* 単語の名寄せをしている(ざまあとざまぁがあったら、全てざまぁに寄せるなど)
* 個々の分析について共起が何回発生したかを見てplotに表示するかどうかを判断している

# 例1: 概要を把握する

元記事を表示

[Python]Classモジュールの中でimport_moduleを利用して処理タイプ毎に動的にモジュールを読み込み実行する

# やりたいこと

Classモジュールの中に処理タイプ毎のモジュールを用意しておき動的に読み込み実行する

## Code

動作確認環境: Python 3.7.10

“`
test.py
test_class/
  ├ __init__.py
  └ func/
    ├ hoge.py
    └ fuga.py
“`

“`python:test_class/__init__.py
from importlib import import_module

class test_class():
def __init__(self, func_type):
self.func = import_module(f”.func.{func_type}”, “test_class”)

def exec(self):
self.func.main(‘test message’h)
“`
Classの中ではimport_moduleを利用して動的にモジュールを読み込む
この時import_moduleはtest_classモジュールからの相対PAT

元記事を表示

【Python】gpt-indexのsave_to_disk関数でTypeError: Object of type float32 is not JSON serializableになったときの対処

# はじめに
[GPT Index でのHuggingFaceの埋め込みモデルの利用 | npaka](https://note.com/npaka/n/nee11eb7e620e)にしたがって作ったindexをsave_to_diskで保存しようとしたときに以下のエラーが出ました。対応方法を考えます。

“`Python
index.save_to_disk(“index.json”)
“`

“`
TypeError: Object of type float32 is not JSON serializable
“`

# 環境

“`
% pip list | grep gpt-index
gpt-index 0.2.3
% python -V
Python 3.10.2
“`
(gpt-indexの更新が非常に活発(記事投稿日2023/1/20時点での最新が0.2.8)なので、すぐにout-datedな情報になるかもしれません。)

# 解決方法
## 保存
save_to_disk関数の内部で辞書を`json.dump`に渡す処

元記事を表示

Python 逆ポーランド記法の電卓

逆ポーランド記法(Reverse Polish Notation;RPN)の電卓です。
chmod +x revp.pyで実行権を付けて動かして下さい。
引数の式はコマンドラインに、`revp.py 10 20 +`のように、スペースで区切って入力して下さい。
エラーチェックはしてませんので、誤った文字列を渡すと、pythonがエラーを返します。

“`revp.py
#!/usr/bin/python3
import sys
stack=[]
s=sys.argv[1:]

while(s):
e=s[0]
if (e==’+’):
stack.append(stack.pop()+stack.pop())
elif (e==’-‘):
a=stack.pop()
stack.append(stack.pop()-a)
elif (e==’*’):
stack.append(stack.pop()*stack.pop())
elif (e==’/’):
a=stack.pop()
stack.append(sta

元記事を表示

Pythonにおける組み込み型の種類

# はじめに
近年の静的型付け言語の流行に伴い、Pythonでコードを書く際に静的型付け言語のように型安全な書き方を記載することが求められるようになってきました。実際にPython3においてversionが上がる度に型ヒントに関する機能が充実するようになってきました。
今回はPythonにおける型の種類をまとめました。
※因みにPythonはすべてがオブジェクトなので、Pythonにおける型とはオブジェクトの種類(type)のこと。ここではtype()の戻り値のクラスを型と呼びます。

Python実行環境は Python 3.9.6

# Pythonに備わっている組み込み型(Built-in Types)
組み込み型は主に下記が存在します。(公式ドキュメントから抜粋)
1, 数値型(整数、浮動小数点数、複素数、真偽値)
2, シーケンス(リスト、タプル、rangeオブジェクト)
3, テキストシーケンス(文字列)
4, 集合型(set, frozenset)
5, マッピング(辞書)
6, バイナリシーケンス
7, コンテキストマネージャー型
8, その他組み込み型(クラス、インス

元記事を表示

OTHERカテゴリの最新記事