- 1. 夜の渡り鳥が出す鳴き声を検出するnighthawkをdockerで動かしてみた
- 2. 二重ループ:活用編 三角形の探索
- 3. Pythonを使って二人用しりとりゲームを作る
- 4. 動的型付け言語の限界と静的型付け言語の真価
- 5. APIキー不要のPythonのTwitter APIラッパー”twikit”の紹介
- 6. POSCARが存在するディレクトリorファイルパス一覧の取得
- 7. I tried creating a Web API with Python [Introduction to Fast API]
- 8. お金の支払い
- 9. リアルタイムで音響イベントをラズベリーパイ(Raspberry Pi4 B)で検出
- 10. 人はマクドナルドだけで生きていけるのか?
- 11. 数値変換判定処理
- 12. スーパー鳩時計
- 13. Flask-APSchedulerでadd_jobしようとしたらunexpected argumentで躓いた話
- 14. ソーラーパネルの稼働状況の出力
- 15. log2
- 16. 多原子イオンを点置換した新しい結晶構造作成ログ(三角錐形・平面三角形編)
- 17. レガシーなWEBサイトの大量のファイルにGTMのタグを自動で追加したい
- 18. 多原子イオンを点置換した新しい結晶構造作成ログ(四面体形編)
- 19. 素数の個数
- 20. I created an app with Django [Diary app]
夜の渡り鳥が出す鳴き声を検出するnighthawkをdockerで動かしてみた
# 目的
夜渡る小鳥は鳴き声を出しながら飛んでいきます。春とか秋とか平野部でもよく聞こえます。この鳴き声をフライトコールと言いますが、夜間のフライトコール(NFC:Noctural Flight Call)を録音して渡りの生態を調べることが北米で行われています。そのための自動検知プログラムがpythonで開発されており、それをdockerで動かしてみようというものです。pythonの環境構築はバージョン管理やコンフリクトとかライブラリがないとか苦手なので、dockerを使うというのが新しいと思います。## 難易度
– 初心者向け## anaconda3をインストール
– docker desktopをインストールする
– こちらをご覧ください。 https://docs.docker.jp/desktop/install.html– docker-anacondaのイメージをとってくる
– continuumio/anaconda3:latest“`
$ docker pull continuumio/anaconda3
“`– anacon
二重ループ:活用編 三角形の探索
https://paiza.jp/works/mondai/double_roop_problems/double_roop_problems__triangle
今までの例からしてこれでいけると思ったんですけどね。。。
だめでしたね。おそらくループが多すぎるのだと思います。“`py
N = int(input())
Ans = “NO”
for a in range(1,N):
for b in range(1,N-a + 1):
for c in range(1,N-a-b + 1):
if a ** 2 == b ** 2 + c ** 2:
Ans = “YES”print(Ans)
“`
でもよく考えたら、ですね。
2辺が決まったら、あともう1つって自動で決まるんですよね。
だからforを一つ減らせます。
ただ、aが0にならないようにしないとですが、
結局Falseになるので関係ないか。“`py
N = int(input())
flag =
Pythonを使って二人用しりとりゲームを作る
## 初めに
今回は、判定に二分探索を使ってしりとりゲームを作りました。## コード
“`py
import rewordList = []
#しりとりの初めの文字を初期値で入れる
LastTimeWord = “り”
#ひらがな判定用
p = re.compile(‘^[ぁ-ゖ]+$’)#しりとりとして成り立っているか判定
def siritoriCheck(inputWord):
global LastTimeWord
if inputWord[0] == LastTimeWord[-1]:
#成り立っていたら言葉を格納
LastTimeWord = inputWord
return False
return True#言葉が重複していないかをチェック
def wordCheck(inputWord):
global wordList#最後の文字が「ん」だったらTrue
if inputWord[-1] == “ん”:
return True
動的型付け言語の限界と静的型付け言語の真価
# はじめに
動的型付け言語はその柔軟性で知られていますが、この柔軟性が時には代償を伴います。一方で、静的型付け言語はその厳格さにより多くのメリットを提供します。FastAPI と Pydantic を使用することで、Python のような動的型付け言語でも型の安全性を部分的に享受できるようになりました。しかし、この体験はまた、静的型付け言語におけるエディタの補助や型システムの堅牢さがいかに価値あるものかを痛感させられました。型ヒントとデータバリデーションを通じて得られた疑似的な型安全性は、静的型付け言語の持つ本質的な型安全性とエディタのサポートには及びません。この経験から、静的型付け言語の厳格さがもたらすクリアな利点に気づき、その優秀さを再認識するに至りました。
# 動的型付け言語における疑似型の問題点
FastAPI と Pydantic の使用は Python のような動的型付け言語でも型の安全性を向上させることができますが、この疑似的な型安全性には限界があります。特に、実行時まで型の不一致が検出されないことが多く、これは開発者にとって予期しないバグやエラーの原因となります
APIキー不要のPythonのTwitter APIラッパー”twikit”の紹介
# この記事の概要
APIキーなしで利用できるPythonのTwitterAPIラッパーを作ったので紹介します。この記事を読んで使っていただけたら幸いです。
詳しい使用方法などは以下のリポジトリやドキュメントでご確認ください。https://github.com/d60/twikit
ドキュメント: https://twikit.readthedocs.io/en/latest/twikit.html
追記: 非同期に対応しました
# インストール
pipを使用してインストールしてください
“`bash
pip install twikit
“`# はじめに
まずは、TwitterのAPIにアクセスするためのクライアントを定義し、アカウントにログインします。以下は、コードの例です。
“`python
from twikit import Client# 第一引数に言語を指定
client = Client(‘ja’)# アカウントにログイン
client.login(
auth_info_1=’email@example.com’,
a
POSCARが存在するディレクトリorファイルパス一覧の取得
## プログラム使用法の確認
“`terminal
python3 get_poscar_existed_path_list_argparse.py -h
“`
usage: get_poscar_existed_path_list_argparse.py
example: python3 get_poscar_existed_path_list_argparse.py /mnt/ssd_elecom_c2c_960gb/cif/This script takes five arguments: arg1.
positional arguments:
arg1 directory path that name is cif/: /mnt/ssd_elecom_c2c_960gb/cif/options:
-h, –help show this help message and exit## 実行ログ
“`terminal
time python3 get_poscar_existed_path_list_argparse
I tried creating a Web API with Python [Introduction to Fast API]
## Web APIとは?
– ネットワークを経由してデータをやり取りする方法の1つ
## Web API サーバーとは?
– Web ブラウザ以外のアプリケーションから、HTTP 経由でデータや機能を提供するためのサーバーのこと
– データベースやその他のシステムと連携して、データを取得したり、処理したり、新しいデータを作成したりすることができる“`
pip install fastapi
pip install “uvicorn[standard]”
“`
“`main.py
from fastapi import FastAPIapp = FastAPI()
@app.get(“/”) # HTTPリクエストメソッド GETに対する関数
def read_root():
return {“message”: “APIです”}# パラメータを作成する
@app.get(“/items/{item_id}”)
def read_item(item_id):
return{“item_id”:item_id, “item_name”:”Tシャツ
お金の支払い
https://paiza.jp/works/mondai/double_roop_problems/double_roop_problems__payment
最初全く考えつきませんでした。
たぶん、(1,X,Y)=Zの組み合わせを全部考えて
それらの中でそれぞれの数が最小になるのを選べばよいわけです。
だけど、これらをどうやって多重ループにすればいいのか?が考えつきませんでした。ただし、
・ 2 ≦ X , Y ≦ 1000
・ X != Y
・ 1 ≦ Z ≦ 3000
うーんと。
まず1円というのがあるので、
ひとまず、テストケースを元に考えます。
500 1000 300なので、
X = 500
Y = 1000
Z = 300。
ZがXやYよりも少なければ、問答無用で1円をZ枚分使うのが最小になりますね。だから300が答えになります。テストケース2だと
50 100 855
X = 50
Y = 100
Z = 855
XよりYが大きければそっちを限界まで使いますね。
この場合、Z//Y = 8をcntにいれて、余りをsumに入れればいいわけなので sum = Z
リアルタイムで音響イベントをラズベリーパイ(Raspberry Pi4 B)で検出
# 使用したデバイス
1\.Raspberry Pi 4B(64-bit)
2\.USB接続マイク(logicool C270n HD WEBCAM)# 前準備
マイクのデバイスが認識しているか
参考サイト https://hellobreak.net/raspberry-pi-usb-microphone/# 手順
ターミナルで以下のコードからgit cloneし、ファイルに移動。そしてrequirements.txtに書かれているライブラリをインストール
使用させて頂いたgit hub
https://github.com/robertanto/Real-Time-Sound-Event-Detection
“`
git clone https://github.com/robertanto/Real-Time-Sound-Event-Detection.git
cd Real-Time-Sound-Event-Detection
pip3 install -r requirements.txt
“`
インストールが完了したらThonnyかターミナルで実行
ターミナルの
人はマクドナルドだけで生きていけるのか?
# 概要
「ファストフードは栄養が偏る」昔から様々な人たちに言われてきたことですが、果たして本当にそうなのでしょうか?昔はともかく、健康寿命が注目されている最近は栄養に気を使ったメニューなどが販売されており、ファストフードそのもののイメージも変わりつつあるように思えます。そこで、ファストフードでの飲食が本当に栄養バランスが偏るのかについて検証しようと思います。
この検証にあたり、先行研究があったので、そちらを参考として進めていこうと思います。
# 参考https://qiita.com/takobaya391076/items/49b15c1fa36734b3fa53
https://qiita.com/youwht/items/9098d560f28d16aa5567
https://qiita.com/Kashalpha/items/582d0ffab82192304ca5
# 目標
先人たちが辿ってきた足跡をそのままなぞっても面白くないので、以下の要素を追加したものを完成系として目指そうと思います。
– 栄養摂取目安を年齢・性別・運動レベル別に設定する
数値変換判定処理
数値に変換できるかチェックできるプログラムを2通りで実装しました。
1.例外処理を使う場合
“`python
str1 = input()
try:
num1 = int(str1)
print(“YES”)
except:
print(“NO”)
“`2.isdigitメソッドを使う場合
“`python
s = input()if s.isdigit():
print(“YES”)
else:
print(“NO”)“`
追加
正負記号を入れた整数はisdigitメソッドでは判定できません
下のプログラムを実行しました。![タイトルなし.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1055346/29706047-7973-53f3-255f-5389d305a26a.jpeg)
スーパー鳩時計
https://paiza.jp/works/mondai/double_roop_problems/double_roop_problems__cuckoo_clock
素直に書くと
“`py
for x in range(24):
for y in range(60):
if ((x + y) % 3 == 0 and (x + y) % 5 == 0) or (x + y) == 0:
print(‘FIZZBUZZ’)
elif (x + y) % 3 == 0:
print(‘FIZZ’)
elif (x + y) % 5 == 0:
print(‘BUZZ’)
else:
print()
“`3で割り切れるかつ5で割り切れる数、かもしくは0もx+yでというやつ。
とりあえず倍数をあげてみます
3 6 9 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60
Flask-APSchedulerでadd_jobしようとしたらunexpected argumentで躓いた話
Flaskを利用してマイクロサービスを作っていますが,ちょっと定期的な処理を実装しようとして躓いたので情報共有
## 環境
環境は以下の通り
Python: 3.9.18
APScheduler: 3.10.4
Flask: 3.0.1
Flask-APScheduler:1.13.1docker container(python3.9ベース)内にpip経由でライブラリを入れて作った環境で動かしてます
## やろうとしたこと
“`Python:test.py
from flask import Flask
from flask_apscheduler import APSchedulerdef func1():
pass # 関数の内容は関係ないのでscheduler = APScheduler()
app=Flask(省略)
scheduler.init_app(app)
scheduler.add_job(func1, ‘cron’, min=15)
“`
こちら[公式](https://apscheduler.readthedocs.io/en/l
ソーラーパネルの稼働状況の出力
# データの取得
ダッシュボード製作にあたり、必要な情報を取得しました。
自宅では、ソーラーパネルを設置しており、ポータルサイトから動作状況を確認できます。https://ctrl.kp-net.com/settingcontrol/login
で、ログインすると、下記のような画面が表示されます。
![スクリーンショット 2024-01-30 113530.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3675614/e5397df1-d75d-3072-36a8-b6182479ed60.png)ここに、ログイン、スクレイピングして、必要な数値を出力することを目的としました。
# ログインに必要なペイロード
Chrome上ログイン画面で、F12でなにが送信されているのか調べました。
ID、PASSのほか、非表示のcsrfの入力が必要でした。
最終的には、HTMLを見たら、どんな形でブラウザから受け取っているのかわかりました。# csrfの壁
認証には、アクセス毎に変わるワンタイムパスワ
log2
https://paiza.jp/works/mondai/double_roop_problems/double_roop_problems__log2
素直にこの通りに解きましたが
これだと、掛け算がオーバーフローしてエラーになる可能性があるそうです。
たしかにそれもそうか。
log2だと天文学的な数値になるとか学生の時に聞いたことがあるし。“`py
N = int(input())
sum = 1
for i in range(1,N+1):
sum *= icnt = 0
while sum > 0:
if sum % 2 != 0:
breaksum //= 2
cnt += 1print(cnt)
“`
で、再度見てみると。
たとえば4だとすると
1 * 2 * 3 * 4 は 24で、2で割り切れるのは3回。
要素ごとに2で割れるか調べてみると
1 * 2 * 3 * (2 * 2)
こうなります。2が3個あるので、3回割れることになる。
これを応用すれば良さそうです。“`py
N =
多原子イオンを点置換した新しい結晶構造作成ログ(三角錐形・平面三角形編)
### 複数の多原子イオンに対して,点置換するプログラムを実行
“`terminal
time ./do_mk_polyatomic_ion_replaced_point_poscar_for_trigonal_pyramidal_planar_shape.sh
“`target_ion_name: CO3
central_atom_symbol: C
neighboring_atom_symbol: O
bond_length_lower_end: 0.99
bond_length_upper_end: 1.66
target_npy_p: ../get_some_ion_contained_pos_folder_p_list/CO3_contained_poscar_folder_path_list_ver2.npy
os.path.exists(target_npy_p): True
100%|█████████████████████████████████████████████████████████████████████████████████████████
レガシーなWEBサイトの大量のファイルにGTMのタグを自動で追加したい
## 目的
大量のHTML、PHPファイルで構成されたWEBサイトにGoogleタグマネージャーを一括でインストールしたい。## 経緯
htmlやPHPで構成されたレガシーなWEBサイトに大量のファイルが。
それらのファイルにはヘッダーやフッターなどの共通部分がモジュール化されておらず。
その為、googleタグマネージャーなどの全ページに設定したタグは一つずつ職人の手で手作業で更新する必要が。
地道に数十ファイルを更新した結果、気が滅入ってきたので、どうにか一括で更新するべく一念発起。## 成果物
指定したフォルダ内の指定した拡張子のファイルの中から、指定した文字列を含むファイルに対して置き換え処理をするシンプルなものができました。
同じ文字を置き換えするファイルが大量にある場合に有効。“`python3
import os# ファイルの中に指定した文字列を含むか確認
def check_string(file_path):
with open(file_path, ‘r’, encoding=’utf-8′) as file:
data
多原子イオンを点置換した新しい結晶構造作成ログ(四面体形編)
“`terminal
time ./do_mk_polyatomic_ion_replaced_point_poscar.sh
“`target_ion_name: AlCl4
central_atom_symbol: Al
neighboring_atom_symbol: Cl
bond_length_lower_end: 1.80
bond_length_upper_end: 2.70
target_npy_p: ../get_some_ion_contained_pos_folder_p_list/AlCl4_contained_poscar_folder_path_list_ver2.npy
os.path.exists(target_npy_p): True
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 170/170 [00:05<00:00
素数の個数
https://paiza.jp/works/mondai/double_roop_problems/double_roop_problems__prime_number_easy
全然分からなかったですね。。。
これで行けるかなと思ったんですが。“`py
N = int(input())
cnt = 1 #2も素数のため
for i in range(3,N+1):
for j in range(2,10):
if i % j == 0:
continue
else:
cnt += 1print(cnt)
“`
とりあえず素数って
1とその数以外割り切れない数ってやつですよね。とりあえず2以上なのは間違いないでしょう。
条件にも入ってますし。とりあえず10まで考えてみます。
2 = 1, 2 と2つしかないので素数。
3 = 1, 3 と2つしかないので素数。
4 = 2で割り切れちゃうので素数ではない。
5 = 1, 5 と2つしかないので素数。
6 = 1, 2, 3, 6と 2も3
I created an app with Django [Diary app]
## 1. Create a project
“`
django-admin startproject [project]
cd [project]
python3 manage.py startapp [project]
“`
① Create urls.py in diary file
“`diary/urls.py
from django.urls import path
from .import views
app_name=’diary’
urlpatterns=[
path(”, views.index, name=’index’)
]
“`
② Edit views.py in diary file“`diary/views.py
from django.shortcuts import renderdef index(request):
return render(request, “diary/day_list.html”)
“`
③ Create templates/diary file in diary file a