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

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

ハノイの塔を解くプログラム 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

元記事を表示

AtCoderの暖色コーダ(黄・橙・赤)はどれだけの速度でコードを書く? ユーザの解答時間を色別で集計してみた

[Supership](https://supership.jp/)でVPoEをしている名畑です。2023年冬アニメの[テクノロイド オーバーマインド](https://techno-roid.com/anime)を見ていて、その内容から[うたプリ](https://www.utapri.com/)を思い出していたら、[上松範康](https://twitter.com/agematsu)さんの作品だと後から知りました。ストーリー展開が予想外で面白いです。

:::note info
AtCoderについて調べてみたシリーズの過去記事
– [そもそもAtCoderとはどんなものか](https://qiita.com/nabata/items/44fa3995e476b12b9860)
– [誕生年毎のアクティブユーザ数](https://qiita.com/nabata/items/75407e48c7ca8de8a4a4)
– [アクティブユーザの世代別国と地域](https://qiita.com/nabata/items/28b5572978ee4abb0126)
– [プログ

元記事を表示

久しぶりにpython書いたら複数文字列の演算子を使った条件式の書き方わからんくなってた

# 条件式 and,or
Pythonを書く時、論理演算子として**and**や**or**を使って、条件式を書くことがある。(JavaScriptやCでは __&&__ や __||__ で表現する)
有名なもので、[FizzBuzz問題]()の***3の倍数かつ5の倍数***を表現するときに**and**が使われることが例に挙げられる。

# 複数文字列がinで囲まれた大きな文字列に含まれるかどうか
次のような場合を考える
“`python:example1.py
if “abc” or “def” in “ghi”:
print(“True”)
else:
print(“False”)

>>> True
“`
直感的には、”abc”も”def”も”ghi”には含まれていないため、*False*が返ることが期待されますが、実際には、予想と反する*True*が返ってきます。

これがなぜかというと、pythonでは次のように解釈されているためです。
“`python:example2.py
if “abc” or (“def” in “ghi”):

`

元記事を表示

Azure Web Appsを使ってみてなんか気になったところ

Azure Web AppsでFlaskデプロイしたのですが、その仕組みやらなんやらがわからず混乱しているという記事というかメモです。

### 1なぜコマンドプロンプトやPowerShellでコマンド入力せずに動くのか。
私はVScodeを使ってPythonやらFlaskやらのフレームワークを使ってコードを書いています。そのときに、コマンド入力したり、Pathを入力することで、実行しています。
しかし、AzureWebAppsでは主に
・Azure Portalで設定し、
・Githubと連携し、
・Github Actionsのワークフローが自動設定され、
・デバッグすることで、
なぜか動いているんです。
コマンド入力することでファイルが動くことを当然視していた私にとって、これは非常に奇妙に映るわけです。

設定することで動くPaaSやホスティングサービスの例はあります。
例えば、Heroku。HerokuにはProcfileという「最初にこれを設定して、あれを動かして」といった具合に手続きをHerokuに伝えるファイルがあるようです。

調べてみるとAzureWebAppsにもあ

元記事を表示

指定されたバックグラウンド色の部分を、指定された色で塗りつぶすpaint関数

指定されたバックグラウンド色の部分を、指定された色で塗りつぶすpaint関数です。
グラフィックスにはpygameを使っています。
このプログラムでは、塗りつぶし領域が広いと、すぐRecursionErrorが起きてしまうので、改良が必要です。

“`paint.py
#!/usr/bin/python3
from pygame.locals import *
import pygame
import sys
import os
import random
sys.setrecursionlimit(20000)
xsize=400
ysize=400
pygame.init() # Pygameを初期化
screen = pygame.display.set_mode((xsize,ysize)) # 200×200の画面を作成
pygame.display.set_caption(“paint” ) # タイトルを作成

# ペイント関数
def paint(x,y,back_r,back_g,back_b,paint_r,paint_g,paint_b):

元記事を表示

Rembgでレシート画像を切り抜き

# 目的
– レシートと背景が写った写真からレシートをくりぬきたい
– Rembgってすごいらしい
– なんか画像処理っぽいことしたい

# 前回のあらすじ

https://qiita.com/kazzzu/items/d9684319d2d0b64d6f31

https://qiita.com/kazzzu/items/ebaa3f42c91d9ade3ee5

今回はrembgをやってみたいと思いました。原理とか理論とかは参考文献を参照してください。
最近のDeepleaningはすごいですね。恐ろしく簡単に背景消せるんだ、と思いました。

# 環境
– Windows11 Home
– VSCode
– Python3.10
– pip
rembg

# 本編
参考:

https://github.com/danielgatis/rembg

https://dev.classmethod.jp/articles/python-rembg/

## Rembgをpipでインストールします

“`
pip install rembg
“`
## プログラムを作成します

元記事を表示

Windowsとpython3.11で”delimiter” must be a 1-character stringというエラー

次のようなプログラムをwindowsで実行

“`diff_python
import csv

raw_data_path = ‘hoge.txt’

with open(raw_data_path) as raw_data_file:
reader = csv.reader(raw_data_file, delimiter=’¥t’)
for row in reader:
print(row[0], row[5],row[6])
“`
その結果タイトルのエラーが発生
“`
reader = csv.reader(raw_data_file, delimiter=’¥t’)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: “delimiter” must be a 1-character string
“`
原因は`delimiter`の引数が`¥t`になっていること。`delimiter=’\t’`にすることで解決。

単なるコピペには注意

元記事を表示

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

元記事を表示

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、・・・を算出

元記事を表示

OTHERカテゴリの最新記事