- 1. ARC034 B問題を解説する。 (PythonのACコードあり)
- 2. ロジックサマナー ランクC「圧縮」(Python3) を解いた
- 3. distutils の廃止予定(Python 3.12)
- 4. 計算結果分析のためのPython(身内向け)
- 5. これであなたもDockerプロフェッショナル ~Dockerを使用してNginx経由でDjangoを動かしてみようの巻~
- 6. 【備忘録】バイオインフォマティクス環境設定
- 7. Python マルチスレッドで完全にデッドロックなしでSQLite3を使うためのメモ
- 8. Pythonで複数入力(無限入力)を実行する方法
- 9. PythonでDependency Injectionを実装する
- 10. Pythonでソート
- 11. 【streamlit】streamlit helloを実行してブラウザで動かす方法
- 12. 個人的メモ
- 13. 【streamlit】streamlit hello で コマンドとして認識されていないというエラーが出たときの対処法
- 14. 繰り返し使って星のらせん描いてみた。
- 15. Pythonは長期間のプロジェクトの保守でも快適になるケースがあるよ、という話
- 16. celeryタスクをネットワーク越しにフローとして実行する
- 17. pyenv-winで対応していないバージョンのPythonをインストールする方法
- 18. Python マルチスレッドで同一サイトにHTTPリクエストするときのスクレイピングTip
- 19. stop-processコマンドがプロセスが止まっていた原因だった話
- 20. TRPGログをmarkdownにするプログラムをつくった
ARC034 B問題を解説する。 (PythonのACコードあり)
#ARC034 B問題 方程式
##問題
たとえば、$f(5391)=5+3+9+1=18$ のように、各桁の和を関数$f(x)$で定義する。
$1\leq N\leq 10^{18}$を満たす$N$が与えられるので、$x+f(x)=N$となる$x$を求めてください、という問題。https://atcoder.jp/contests/arc034/tasks/arc034_2
##考察その1 xの上限は?
たとえば、$N=100$のとき、$x$は$100$以上の値をとりません。$100+f(100)>100$だからです。
どのような$N$が与えられても、$x
ロジックサマナー ランクC「圧縮」(Python3) を解いた
# はじめに
**[ロジックサマナー](https://paiza.jp/logic_summoner/)というプログラミング学習サイトの問題の一つです。**
解けるやろって適当に思ってたら、全然正答できなくて悩んでました。数日経っても、意地張って解こうとしましたが、解けなかったです。
そこで答えを探したんですが、欲しいコードがなかった。
なので、私が正答したソースコードをここに載せます。# 問題の概要
[問題はここにあります](https://paiza.jp/logic_summoner/challenges/logics_type_2001)
#### 制約はこちら
> 入力される値
> S> 条件
> ・1 ≦ ( S の長さ) ≦ 100
> ・S には “w”(白) か “b”(黒) の文字しか含まれない#### 入出力例
“`
入力: “bbbwwwww”
出力: 3 5入力: “wwwwwbbb”
出力: 0 5 3
“`
このように、w(白)から始まった場合は、0 を入れなきゃいけない。# 正答したソースコード
実装
distutils の廃止予定(Python 3.12)
こんにちは。
Python 3.12 では “`distutils“` が廃止される予定とのことです。“`pip install“` すると現在警告が表示されます(homebrew による Python 利用の場合。下記例)。参考情報として(Homebrew/homebrew-core (GitHub)内)
* “[Python is deprecating distutils.cfg #76621](https://github.com/Homebrew/homebrew-core/issues/76621)”
* “[pybind11 2.9.1 #94696](https://github.com/Homebrew/homebrew-core/pull/94696)”“`console
$ brew install python3
$ brew info python3 | head -n1
python@3.9: stable 3.9.10 (bottled)
$ python3 -m pip install …
DEPRECATION: Configu
計算結果分析のためのPython(身内向け)
本記事内では、計算機シミュレーションで出力された座標ファイルから分析を行う際に必要となる、
あるいは知っておくと便利なPythonの機能やモジュールを紹介する。
Pythonの基本的な文法については説明を省いている。また、本記事はあくまで身内向けの内容であり、あまり丁寧なつくりではない。
# 分析を行うサンプルファイル
サンプルとして、本記事内では以下のファイルに対して分析を行うことにする。
練習用ディレクトリにコピーしておいて欲しい。“` sample.gro
Methane
15
1MET C 1 2.127 1.952 3.113 0.000 0.000 0.000
1MET H 2 2.235 1.963 3.128 0.000 0.000 0.000
1MET H 3 2.092 1.856 3.139 0.000 0.000 0.000
1MET H 4 2.071 2.025
これであなたもDockerプロフェッショナル ~Dockerを使用してNginx経由でDjangoを動かしてみようの巻~
#自己紹介
普段私は、
一番得意な機械学習(深層学習)をしたり、
Python/Django でWebアプリを開発したり、
TypeScript/Vue or React でフロントエンドの開発をしたり、
PHP/Laravel でWebアプリを開発したり、
さまざまなことを行っています。趣味で休みの日にGo言語で色々作成しているのですが、型のある世界は素敵だなと昨今感じています。
今最もやりたいことは、Goで大規模なWebアプリケーションを作成したい。企業案件やご連絡等ございましたらお気軽に下記よりご連絡いただければと思います。
nagamatsu-k@dym.jp# 今回やりたいこと
Dockerで構築したコンテナ上で、Nginx経由でDjangoのプロジェクトが見れるようにしたい。下記コマンドでダウンロードしてください
(注意).envの設定があるので、クローン後に下記の.env2箇所を指示通り変更してください。
[私のGitHub](https://github.com/kouhei-github/Docker-Django-Nginx-Gunicorn)`
【備忘録】バイオインフォマティクス環境設定
# 【備忘録】バイオインフォマティクス環境設定(macOS Monterey 12.2.1)
「バイオインフォマティクス 〜Pythonによる実践レシピ〜」を購入して、環境構築したときのメモです。
大まかな流れは、以下の通り。
– Xcodeインストール(GUI)
– wgetインストール(コマンドライン)
– Anacondaインストール(GUI)
– condaによるインストール(コマンドライン)## condaによるインストール
Xcode、 wget、 Anaconda のインストールは省略して、condaのところだけ詳細に記載します。
######まずは、conda自身の確認。
>$conda install conda -y######チャネル(リポジトリ)の追加。
>$conda config –add channels bioconda
>$conda config –add channels conda-forge######環境構築。(biopythonは最新にして、pythonは3.8に設定)
>$conda create -n bio
Python マルチスレッドで完全にデッドロックなしでSQLite3を使うためのメモ
# はじめに
トランザクションやらコミットのこと無知な状態でマルチスレッドでsqliteやろうとしたらデッドロックしたのでメモ
# threading.Event()でトランザクション前にスレッドを待機させる
“`python
import threading
import random
import time# event3の中でevent1→event2の順でイベントが実行される
# event1はランダム秒後に開始する、event3の終了を待つ,終了したらevent3_endをclear
# event2はevent1が開始するまで待機状態
# event3はevent1が開始したらevent1をclearにしevent2を待つ
# event3でevent2が開始したらevent2をclearにしevent3の終了を告げる
# 上記繰り返しtest_event1_begin = threading.Event()
test_event2_begin = threading.Event()
test_event3_end = threading.Event()
Pythonで複数入力(無限入力)を実行する方法
“`python:test.py
for l in sys.stdin:
lines.append(l.rstrip(‘\r\n’))
“`上記のようなコードでは、
“`
python test.py
“`
のように実行しても無限に入力を受け付けてしまい、最後まで実行できませんでした。解決策は下記の通りです。
“`
echo “test1.txt” “text2.txt” | python test.py
“`参考:https://stackoverflow.com/questions/43554363/how-to-run-code-with-sys-stdin-as-input-on-multiple-text-files
PythonでDependency Injectionを実装する
備忘録としてDependency Injectionの基礎知識とPythonでの実装方法を整理します。
## 環境
– Python 3.8.10### DIとは?
“` Dependency Injection“` の略です。具体的に言うと、クラスAで利用するインスタンスをクラスAの内部で生成するのではなく、抽象に依存させて外部から渡すことです。
サンプルコードを見てみましょう。
#### 悪い例
“`main.py
class Cat():
def __init__(self, name: str):
self.name = namedef cry(self):
print(f'{self.name} cry meow meow.’)class A():
cat1 = Cat(“ハチワレ”)
def action(self):
self.cat1.cry()if __name__ == “__main__”:
a = A()
Pythonでソート
#並べ替えたい
##sortを使う
###昇順
“`python:
l = [1, 2, 3, 5, 4, 8]
l.sort()
l
“`
“`
[1, 2, 3, 4, 5, 8]
“`
###降順“`
l = [1, 2, 3, 5, 4, 8]
l.sort(reverse=True)
l
“`
“`
[8, 5, 4, 3, 2, 1]
“`
sort()はタプルに対しては使えない。sort()を使うと元のリストが書き換えられる。##sortedを使う
“`python
l = [2, 1, 3, 5, 4, 8]
sorted(l), l
“`
“`
([1, 2, 3, 4, 5, 8], [2, 1, 3, 5, 4, 8])
“`
元のリストはそのまま。sorted()は文字列やタプルを引数にできるが、返すのはリスト。##itemgetterでリスト内のリストを並べ替え
“`python
from operator import itemgetterll = [[“acd”, 123, 456], [“bfe”, 23
【streamlit】streamlit helloを実行してブラウザで動かす方法
#はじめに
streamlit hello を実行してブラウザで動かす方法について記事にしています。#環境
Windows10
Python3.9#streamlit hello の実行方法
1. コマンドプロンプトを起動します。
2. streamlit hello と入力して、Enterを押します。
![streamlit001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321513/827fce32-6822-89e8-01de-4ee8e1a12404.png)
3. ブラウザを起動します。
4. ブラウザのアドレスバーに http://localhost:8501/ を入力します。
5. 以下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321513/00f2b1f9-e434-11ea-4631-e3f1b76701ce.png)#stream hell
個人的メモ
#bit全探索(itertoolsを使う)
“`python
from itertools import productfor pro in product((0, 1), repeat=n): #長さnの各要素が0か1のタプルを返す=bit全探索で便利
print(pro)
“`#二分探索(bisectを使う)
“`python
import bisect
list = [10, 20, 30, 40]
bisect.bisect(list, 25)
“`
“`
2
“`
【streamlit】streamlit hello で コマンドとして認識されていないというエラーが出たときの対処法
#はじめに
streamlitをやり始めたときに、遭遇したエラーの解決方法です。#環境
Windows10
python3.9#streamlitをインストールします。
“`
>pip install streamlit
“`
#streamlit helloを実行します。
“`
>streamlit hello
“`
ここでstreamlitは内部コマンドまたは外部コマンドとして認識されていませんというエラーが出ました。#streamlitにPATHを通します。
1.pip installでstreamlit.exeがインストールされているディレクトリを見つけます。
私の場合は、C:\Users\hogehoge\AppData\Roaming\Python\Python39\Scripts\streamlit.exe にいました。2.PATHを通します。
・STARTボタンを右クリック⇒システム⇒システムの詳細設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0
繰り返し使って星のらせん描いてみた。
## 亀が動くアレ作ってみた
「Pythonではじめる数学の冒険」の課題1-6の答えです。
関数(star)を最初に作って、その後にそれをループ(starSpiral)させるのですが、ずっとstarSpiralを先頭にしてしまっていたのでうまく行きませんでした。
length+=の部分や変数をあらかじめ設定しておく部分は注意です。
やっと正解にたどり着いたので備忘録的に共有。“`python
from turtle import *
shape(‘turtle’)
speed(10)
def star(length=5):
for i in range(5):
forward(length)
right(144)
def starSpiral(length):
for i in range(60):
length+=5
star(length)
right(5)
starSpiral(5)“`
動かすとこんな感じ。
![スクリーンショット 2022-02-23 0.21.29.p
Pythonは長期間のプロジェクトの保守でも快適になるケースがあるよ、という話
先日以下のような記事を拝見しました。
https://kmizu.hatenablog.com/entry/2022/02/17/195423
「うんうん、そうだねぇ・・・」と思いつつ読んでいたのですが、ここ数年ずっとPythonばかりを書いていた身からすると少し違和感を感じるところもあったので頭の整理的に言語化しておきます。
# 前置き
本記事は元の記事を否定するものではありません。元記事で以下のように書かれている通り、元記事はあくまで「そういう傾向がある」という話ですので本記事はそういった傾向に当てはまらないPythonでの例外的なところに触れる形となります。
> これまで色々なプロジェクトを観察(風聞も含む)して来たところ、そういう傾向があるのではないかという仮説です。
本記事はなんとなくPythonだと長期プロジェクトとかコード量が多いと詰むのでは・・・?と感じられた方に対してそういったプロジェクトでも(条件次第で)快適に開発を続けられるよ、と宣伝するためのものです。
逆に本記事に対して強い違和感を感じられる方もいらっしゃると思います(あくまで個人の所感となります
celeryタスクをネットワーク越しにフローとして実行する
### 概要
– [celery](https://docs.celeryproject.org/en/stable/django/first-steps-with-django.html)タスクを以下の観点で実行してみた。
– 「ネットワーク越し」に呼び出す
– さらに「複数個順番」に呼び出す
– さらに「成功時/エラー時のcallback用タスクも指定」して呼び出す—
### 前提
– 環境
– python: v.3.7.7
– pip install
– celery: v.4.4.7—
### celeryタスクをネットワーク越しに呼び出す以下のタスクが定義されているとする。
“`python
import time
@app.task(name=”test”, bind=True)
def test(self, arg1):
time.sleep(5)
res = arg1 + 1
print(“test called. Result is :” + res)
return re
pyenv-winで対応していないバージョンのPythonをインストールする方法
# 1. はじめに
急な話ですが、2021年10月にPython3.10がリリースされましたね!(今更感がありますが…)
個人的には新機能の構造的パターンマッチング(C言語でいうswitch文みたいなやつ)が気になっており触ってみたいと思っていました。
私はWindows環境でPythonを使用する際はpyenv-winを使っているので、さっそく pyenv install -l コマンドでバージョンの一覧を確認!
※今回の記事では、pyenvの基本操作の説明はスキップします。ご了承ください…m(_ _)m“`python
# まずはpyenvのバージョンを確認!!
> pyenv –version
pyenv 2.64.11# pyenv install -l を実行
> pyenv install -l
3.10.0a1-win32 # Python3.10は、ここから
3.10.0a1 # ↑
… # |
3.10.0b2-win32
Python マルチスレッドで同一サイトにHTTPリクエストするときのスクレイピングTip
# 結論
あ、リクエスト用のスレッドつくればいいのか(汗
記事書きながら思いついた。ありがとうQiita。# はじめに
マルチスレッドでスクレイピング処理をしているときに、同一サイトで短時間多重リクエストしでかしそうになったので予防方法をメモする(別スレッドでリクエストするとスリープの意味をなさないので)
# 方法
リクエスト前後でスレッドをロックする
ロッククラスは以下の通りなので別スレッドから自由にロック、アンロックできる
>プリミティブロック (primitive lock) オブジェクトを実装しているクラスです。スレッドが一度ロックを獲得すると、それ以後のロック獲得の試みはロックが解放されるまでブロックします。どのスレッドでもロックを解放できます。https://docs.python.org/ja/3/library/threading.html#threading.Lock
“`python
import time
import threading
import requestslock = threading.Lock()
def htt
stop-processコマンドがプロセスが止まっていた原因だった話
Windows環境でクロームが重いのでPowerShellで時々
“`
ps -Name *chrome* | stop-process
“`
をよくやる。そしてPythonでも“`
os.system(‘powershell -Command “ps -Name *chrome* | stop-process”‘)
“`
や“`
subprocess.Popen(‘powershell -Command “ps -Name *chrome* | stop-process”‘)
“`を使っていた。
ところがある日、自動処理が止まっていることを発見。
原因がこのコマンドであることにやっと気付いた。ハマった状況の蓋を開けてみると“`
次の項目に対して Stop-Process 操作を実行しますか
“`
という確認が出て応答待ち、ペンディング状態だったのだ。-Forceをつけたコマンドなら待たない。
“`
powershell -Command “ps -Name *chrome* | stop-process -Force”
“`
解決した。
TRPGログをmarkdownにするプログラムをつくった
# こんなものを作りました
https://github.com/msattova/trpgLOG2md
やってることは非常にシンプルです。ざっくり説明するとこんな感じ。
1. HTMLファイルを読み込む
1. `
`タグの内側の文字列(HTMLタグ込み)を検索して全部取得
1. 取得した文字列から``タグの内側の文字列(HTMLタグを含まない)を取得
1. それぞれの文字列を適宜markdownの文法で装飾したりしなかったりの処理をする
1. 処理した文字列をoutputディレクトリ内に.mdファイルとして出力# なんでこんなものを?
私はHUGOで生成した静的サイト上でTRPGのログを公開しようと考えていました。
[この記事](https://qiita.com/msattova/items/8695ac914d2ee2638e38)にその時やった試行錯誤が書いてあります。その記事を書いていたときはHTMLファイルの状態で公開しようと考えていたのですが、既存のログコンバーターではあまり満足できず、かと言って自作するのもデザインや機能面での悩みが多く