- 1. 191 Digital Graffiti
- 1.0.1. ABC 157 A – Duplex PrintingをPython3で解く
- 1.0.2. [python] NumPy-Mathematical functionsの備忘録
- 1.0.3. 玉手箱の空欄推測問題をPythonで解いてみた 〜ソルバー編〜
- 1.0.4. 玉手箱の空欄推測問題をPythonで解いてみた 〜文字認識編(pyocr)〜
- 1.0.5. 玉手箱の空欄推測問題をPythonで解いてみた 〜GUI編(Tkinter)〜
- 1.0.6. 玉手箱の空欄推測問題をPythonで解いてみた
- 1.0.7. Python 関数名を取得する
- 1.0.8. Python 入門2 (文字列, リスト)
- 1.0.9. 半日で出来る!Python導入~スクレイピング処理
- 1.0.10. 3時間で分かる!複数ページのスクレイピング~gmail連携
- 1.0.11. Pythonのリストについて
- 1.0.12. ABC 088 A – Infinite CoinsをPython3で解く
- 1.0.13. Python開発仮想環境構築備忘録(Windows+Docker+VSCode+Hyper-V+Python3)
- 1.0.14. FastAPI: MariaDB に接続
- 1.0.15. CORESERVERでFlaskを使ったWebAPIを作ってみる
- 1.0.16. Python: 関数を並列実行する(排他処理制御付き)
- 1.0.17. pythonでcsvのデータをデータベースへ書き込む。
- 1.0.18. 銀河麻雀の待ちを調べるプログラムを作った
Python ループ処理させたい関数が複数あるときのテクニック
以下のように第一引数にループさせたい関数を、第二引数に前処理したい関数を指定するwrapper関数を作成して、マルチスレッドでtargetを指定する前にwrapして使ったりしています。
# 無限ループさせる例
“`python
import timedef wrap_loop_func(main_func: any, preprocessing_func: any = None):
“””関数をループさせる関数を返す”””
def loop_func():
if preprocessing_func:
preprocessing_func()
while True:
main_func()
return loop_funcdef task():
print(‘task’)
time.sleep(1)def preprocessing():
print(‘pre-processing has done.’)# loop_task
超初心者がAtcoder ProblemsのC問題を191回から200回までをpythonで解いてみた
解き方を忘れないためにまとめてるだけなのでコードはめちゃくちゃ不細工です、ここもっと良くできるよって場所あったら教えていただけるとありがたいです!!
191 Digital Graffiti
https://atcoder.jp/contests/abc191/tasks/abc191_c
“`python:practice.py
h,w = map(int, input().split())
S = []
for _ in range(h):
s = input()
S.append(s)
ans = 0
for row in range(h-1):
for col in range(w-1):
tmp = []*4
tmp.append(S[row][col])
tmp.append(S[row+1][col])
tmp.append(S[row][col+1])
tmp.append(S[row+1][col+1])
if tmp.c
ABC 157 A – Duplex PrintingをPython3で解く
# 初めに
「[AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~](https://qiita.com/drken/items/fd4e5e3630d0f5859067)」の各問題の類題をPythonで解きます。
(解法に詰まって調べたとき、C++の解法が多くPythonしか分からない私では参考にできなかったため。)
*競プロ & Python初心者のため、解法やコードが未熟です。# [ABC 157 A – Duplex Printing](https://atcoder.jp/contests/abc157/tasks/abc157_a)
**【問題文】**
高橋君は、全 N ページから成る書類を両面印刷します。両面印刷では、1 枚の紙に 2 ページ分のデータを印刷することが出来ます。最小で何枚の紙が必要か求めてください。
**【制約】**
– N は整数
– 1≤N≤100**【入力】**
入力は以下の形式で標準入力から与えられる.
“`
N
“`
**【出力】**
答えを出力せよ。**【解答】**
“`p
[python] NumPy-Mathematical functionsの備忘録
普段Numpyを扱う際に確認しがちな内容が多いのでその整理のために記事にしてみました。
よく使うものが増えたら随時
最後に参考にしているURLを載せているので拙い点があればそちらも一見のほど。# 公式のdocumentation
– [Mathematical functions – NumPy](https://numpy.org/doc/stable/reference/routines.math.html)# 目次
– 動作環境
– 三角関数# 動作環境
|種類 |バージョン |
|:—————|:————–|
|MacBook Air |Monterey12.0.1 |
|python |3.8.3 |
|jupyter notebook|6.0.3 |
|numpy |1.18.5 |まずはパッケージのインポートから
“`python:
import numpy as np
“`
num
玉手箱の空欄推測問題をPythonで解いてみた 〜ソルバー編〜
# はじめに
玉手箱の空欄推測問題を解いてみたのソルバー編です.[前回](https://qiita.com/sekishoku/items/532e34981da9126b737e)までで問題を解く上で必要な値の取得までできているので,今回は実際に問題を解いていきます.# 問題設定
空欄推測問題は以下のような問題で,テーブルの数値が二次元配列で与えられ,予測する値がNaNになっていることを想定しています.
(https://jyosiki.com/spi/tama31_a.html より引用)
運賃を予測するので,運賃を目的変数,その他の値を説明変数とした線形回帰問題として解きます.数式で書くと
“`math
y_{運賃} = w_{フェリーの本数} \times x_{フェリーの本数
玉手箱の空欄推測問題をPythonで解いてみた 〜文字認識編(pyocr)〜
# はじめに
玉手箱の空欄推測問題を解いてみたの文字認識編です.[前回](https://qiita.com/sekishoku/items/4d92856139d1a5a943ea)のGUI編で値の入力をするインターフェースは作りましたが,一々値を入力するのも面倒くさいので,どうせなら表を読み取って自動で値を入力するようにしてしまいます.# 文字認識部分
Pythonには既に文字認識を行えるpyocrというライブラリが存在するので,それを使うことにしました.少しインストール手順が面倒くさいです.インストールしてしまえば後は簡単で,ほんの数行で画像から文字列を抽出してくれます.pyocrに登録されているエンジンを使って,それに画像を与えるだけです.認識する言語も指定できlang引数で指定します.今回は日本語を想定しているので,jpnを与えています.
“`Python
import pyocr
from PIL import Imageengine = pyocr.get_available_tools()[0]
img = Image.open(‘test.png’)
t
玉手箱の空欄推測問題をPythonで解いてみた 〜GUI編(Tkinter)〜
# はじめに
玉手箱の空欄推測問題を解いてみたのGUI編です.問題の値を入力し,結果を表示するためのインターフェースを作っていきます.# 概観
完成予想図としては下のような感じになります.
実装にあたってPythonだとTkinterというライブラリがよさげだったので,それを使うことにしました.# 前準備
まず,はじめにウインドウを作ります.これはほぼおまじないなので,定型文通りに作っています.
“`Python3
import tkinter as tkroot = tk.Tk()
root.title(‘solver’) # ウインドウのタイトル
root.geometry(‘550×260’) # ウィンドウの大きさ
root.resizable(width=False, height=False) # ウ
玉手箱の空欄推測問題をPythonで解いてみた
# はじめに
就活を始めると大体の人が適性検査を受けることになりますが,Web上で受ける知能に関する検査は大きくSPIと玉手箱の2種類があると思います.そのうちの玉手箱には下の図のような表を読み取って,空欄に当てはまる値を予測させるという問題が出ます.
(https://jyosiki.com/spi/tama31_a.html より引用)
この問題であれば,答えの選択肢として
① 495 ② 510 ③ 525 ④ 540 ⑤ 555
の5つがあります.ちなみに模範解答は②らしいです.私はそこまで頭が良くないので,これらの知能テストがすこぶる苦手です.特にこの類推問題関連は難しすぎて「絶対に答えが一意に定まらないだろ」と発狂しながら解いていました.なので,面倒くさいことはPythonに
Python 関数名を取得する
“`python
def my_func():
returnprint(my_func.__name__)
“`“`実行結果
‘my_func’
“`# 使用例
## マルチスレッドの実行時にタスク名(関数名)をスレッド名にする
“`python
from threading import Threaddef task1():
while True:
breakdef task2():
while True:
breaktask_list = [task1,task2]
for task in task_list:
th = Thread(target=task, args=(), daemon=True, name=task.__name__)
th.start()
“`## wrapperにして使う
@shiracamusさんにコメントいただきました。“`python
def greet(callback):
print(“Hello”, callba
Python 入門2 (文字列, リスト)
# はじめに
このシリーズは、プログラミング経験やアルゴリズムとデータ構造などの知識がある方に向けて、Pythonの基礎について解説することを目的としています。
一つの記事あたり大体15分程度で読み終われるように文章量を調整しています。
この記事はPython入門シリーズの第2回目の投稿にあたります。
今回の記事ではタイトルにもある通り、文字列とリストについて解説します。
# 目次
– 文字列
– 文字列の宣言
– 値の埋め込み
– 文字列の操作
– リスト
– リストとは
– リスト内包表記
– スライス
– range関数# 文字列
### 文字列の宣言
“`str.py
str1 = “私は”
str2 = ‘”犬”が好きです。’
str3 = str1 + str2 # 文字列の結合print(str3)
“`> 私は”犬”が好きです。
Pythonでは、文字列の記述方法としてシングルクォーテーション、またはダブルクォーテーションのいずれかを用いることができます。
この二通りのやり方
半日で出来る!Python導入~スクレイピング処理
# 概要
【内容】
・Pythonの開発環境を導入する
・指定したWebサイトの情報を取得するプログラムを作成する【想定読者】
・Python、ないしはスクレイピングに興味があるが、手が出せないでいる方【使用データ】
弊社Webサイト:https://www.anestec.co.jp/# 1.Pythonの開発環境を(手軽に)導入する
## 1-1 .Pythonのバージョン、どちらを選ぶか?Pythonには2.x版と3.x版があり、文法や出力結果が異なっている。また、一部の機能において互換性を持っていない。
現在、2.x版のサポートは2020年ごろに終了しており、3.x版に対応したライブラリも数多く提供されているため、**新規に導入するのであれば3.x版が強く推奨されている。**## 1-2.Pythonの開発環境
Pythonには用途に応じた豊富なライブラリが存在している。
ライブラリが標準搭載されているプラットフォームを利用することで、効率よく開発を進めることが出来る。**Anaconda**
データサイエンスに特化したプラットフォームで、デ
3時間で分かる!複数ページのスクレイピング~gmail連携
# 概要
【内容】
・複数のページをスクレイピングし、情報をCSVファイルに出力する
・出力したCSVファイルをgmailに添付して送信する
・【参考】Spyderの画面について特筆すべき箇所【想定読者】
・前回のページ内容を把握している方https://qiita.com/Anest_Doi/private/9cf344b13cd173af2ce1
【使用データ】
「現代用語の基礎知識」選 ユーキャン新語・流行大賞
https://www.jiyu.co.jp/singo/index.php# 1.スクレイピングを行う
## 1-1.前準備
前回と同じくスクレイピングを実施する為に、対象サイトの構成を把握する必要がある。
今回はユーキャン新語・流行語大賞について、1994年(第11回)~2021年(第38回)までの情報を取得するプログラムを考える。**対象サイトの構成**
第11回のページと、第12回のページでURL部分の差異が末尾のみであることが分かる。
また、ページ構成は両者ともに以下のフォーマットが用いられている。
本体部分は”contents
Pythonのリストについて
# 概要
【内容】
・Pythonにおけるリストで実施出来ることを一通り説明する。【想定読者】
・Pythonのリストに関する文法・出来ることが知りたい方【参考サイト】
・Python全般の文法について用途別に記載しているサイトhttps://note.nkmk.me/python-post-summary/
# 1.Pythonの型宣言
Javaについては変数を定義する際に、型宣言が必要。
“`java:sample.java
int x = 10;
String y = “abc”;
Listlist = new ArrayList<>(); “`
Pythonでは型宣言は必要ない。
右辺に記載されている内容によって、数値(整数、小数)、文字列、リスト型などを区別する。“`python:sample.py
# 型を定義しなくても、コンパイルが通過する。
x = 10
y = “abc”
list = [“Mon”,”Tue”,”Wed”,”Thu”,”Fri”,”Sat”,”Sun”]“`
# 2.Pythonのリ
ABC 088 A – Infinite CoinsをPython3で解く
# 初めに
「[AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~](https://qiita.com/drken/items/fd4e5e3630d0f5859067)」の各問題の類題をPythonで解きます。
(解法に詰まって調べたとき、C++の解法が多くPythonしか分からない私では参考にできなかったため。)
*競プロ & Python初心者のため、解法やコードが未熟です。# [ABC 088 A – Infinite Coins](https://atcoder.jp/contests/abc088/tasks/abc088_a)
**【問題文】**
E869120 は 1 円硬貨を A 枚と 500 円硬貨を無限枚持っています.
これらの硬貨だけを使うことによって, ちょうど N 円を支払うことができるかを判定しなさい.**【制約】**
– N は 1 以上 10000 以下の整数
– A は 0 以上 1000 以下の整数**【入力】**
入力は以下の形式で標準入力から与えられる.
“`
N
A
“`
**
Python開発仮想環境構築備忘録(Windows+Docker+VSCode+Hyper-V+Python3)
自分用備忘録
WindowsでDockerを使い、VSCode上でPythonを実行できる仮想環境を作る。
※操作は基本管理者権限で実行する想定。## Hyper-V有効化
「コントロールパネル」-「プログラムと機能」-「Windowsの機能の有効化または無効化」からHyper-Vを有効化する。

## Dockerインストール
Docker for windowsを公式サイトからダウンロード、インストールする。
https://hub.docker.com/editions/community/docker-ce-desktop-windows/
“`py:mariadb01.py
# ——————————————————————
# mariadb01.py
#
# Mar/18/2022
# ——————————————————————
from fastapi import FastAPI
import mysql.connector
from dotenv import load_dotenv
import sys
import os# ——————————————————————
def get_d
CORESERVERでFlaskを使ったWebAPIを作ってみる
# 概要
Androidアプリ開発で、Serverから情報を取得して表示するアプリを作った際、なるべく手軽で、安価で・・・
という考えから、CORESERVERでWebAPIを作ってみた。という記事です。CORESERVERは、単なるHTMLやCGIをアップロードできる領域というものではなく、Python3やMySQLも使えるので、Flaskで簡易的に作っています。
https://play.google.com/store/apps/details?id=com.sekai.tsukuru.app.quickmatome&hl=ja
# 基本的な話
## CORESERVERとは
■ CORESERVER(https://www.coreserver.jp/ )ざっくり言えば、コスパ最強の「レンタルサーバー」です。
V1プランで「**CORE-Mini**」を選択すれば、年払いで**2,640円**(1日 7円!)にて使えるという驚き。→料金表(V1の方をみてね)
https://www.coreserver.jp/price/しかも、月間の転送量MAXは「無
Python: 関数を並列実行する(排他処理制御付き)
“`python
# ユーザーIDごとに排他処理をするのに使うLockオブジェクトを保持する
locks: Dict[str, Lock] = {}def f(
s: str, # printしたい文字列
id: str, # (例えば)ユーザーID
wait_seconds: int, # 排他処理や並列処理が動作していることを確認するために使う
):
# 排他処理用のLockオブジェクトがまだなければ作成して保持
locks.update(**{id: Lock()}) if not locks.get(id) else None# ユーザー単位でそれぞれ排他処理する(守りたい処理順序があるときなど。)
with locks[id]:
time.sleep(wait_seconds)
print(s)if __name__ == “__main__”:
threads: List[Thread] = []threads.append(Thread(targ
pythonでcsvのデータをデータベースへ書き込む。
# 目的
pythonでcsvのデータをデータベースへ書き込みをします。# 環境
MariaDB version 10.3.31-MariaDB-0+deb10u1
Python version: 3.7.3
OS: Raspbian 10.0# イメージ
ラズパイ内にmySQLを入れ、データベース、テーブル、要素の作成をします。そのあとpythonからcsvファイルの読み込みを行い、新規に作成したデータベースへ書き込みを行っていきます。データベースの操作は、コマンドラインから、phpmyAdminからの2種類があり、今回は、コマンドラインを使用しました。コマンドの説明については、[別の記事](https://qiita.com/yutaka_m/items/73380d45ef3dac027996)にしましたので、そちらを参考にしてください。
簡単に言えば、各種類の牌に1枚ずつ「ギャラクシー牌(銀河牌)」と呼ばれる牌種が自由になる牌が入った状態での麻雀だ。
例えば、銀河1mは1p,1sとしても扱える。
銀河東は東南西北、銀河白は發中としても