- 1. 【Python OpenCV】画像 から 横線 のみ検出する(おまけで縦線も)
- 2. にゃんこスイーパー
- 3. 『Python1年生』で勉強中(その3)
- 4. Loguruでライブラリのログを出力する
- 5. MacのPython環境構築で3系にならないときの解決方法
- 6. 【Python】csv.DictReaderで数値(int型のデータ)を読み込む
- 7. 【Python】クラスオブジェクトの中身を確認する2つの方法
- 8. 【mypy】リストに複数の型のデータを入れてはいけない【Python】
- 9. 1年前の日付を求める
- 10. Anacondaセットアップ備忘録
- 11. PythonのTypedDictのキーの有無・値の型をチェックするツールtypeddict-validatorを作った
- 12. pythonとc言語間での定数の同期方法の提案
- 13. PyflowでWindowsにPythonの小さな環境構築する
- 14. B – Chocolate
- 15. チームでの開発環境を整える
- 16. データ型の覚えやすい暗記法を思いついた
- 17. n個のサイコロを振った時の和の確率分布をpythonを使った統計的確率で求める
- 18. 【Python】令和4年度春期応用情報技術者試験 プログラミング問題
- 19. pythonでCの関数だけではなく、構造体も参照する方法
- 20. クッソ初心者がエラー起こしまくった備忘録
【Python OpenCV】画像 から 横線 のみ検出する(おまけで縦線も)
## はじめに
OCRするうえで「枠線」は避けて通れません。文書のOCRを進めていると、表の枠線が検出の邪魔をすることがあります。一方で、OCRをする領域を絞り込むために枠線の位置情報を必要とすることもあります。今回は、そんな枠線の情報を取得することを目指します。
## 対象者
この記事は下記のような人を対象にしています。
– OCRのために枠線の情報を取得したい人## 参考元
参考にしたサイト様を以下に示します。書かれている通り、微調整が重要でした。この記事ではその微調整した部分をまとめ
にゃんこスイーパー
Python+Cursesで、にゃんこスイーパーを書いてみました。
Ubuntuのターミナルで動きます。
ファイルに、chmod +x nyankosweeper.pyとして、実行権を付けて動かして下さい。$./nyankosweeper.py [number of cats]として、動かします。
[number of cats]は、省略できます。省略すると、猫の数は58個となります。スペースキーで、開き、’z’キーで、マークを付けます。カーソルは矢印キーで動かします。
’q’キーで抜け出せられます。pyinstallerで、コンパイルできます。コンパイルしなくとも、そもそも速度はあんまり問題ないですが。
“`nyankosweeper.py
#!/usr/bin/python3import curses
import random
import locale
import select
import sysxsize = 40
ysize = 23
vvram = [[0 for i in range(ysize)] for j in range(xsize
『Python1年生』で勉強中(その3)
## この記事について
『Python1年生』(以下、書籍)でPythonを学習する超初心者の記録です。
後述の「やったこと」にも書いていますが、ようやく書籍を最後まで進めました。
その1, その2に引き続き、超初心者の学習記録ですので、今回も大したことは書いていないと思います。■ バックナンバー
・[『Python1年生』で勉強中(その1)](https://qiita.com/megrim_q/items/c1417f507e96c1fb7015)
・[『Python1年生』で勉強中(その2)](https://qiita.com/megrim_q/items/333be033e5b4637d0eed)## 実行環境
| OS・MW | バージョンなど |
|:-:|:-:|
| OS | Windows 10 Pro 21H2 19044.1645 |
| Python | 3.10.4 |
|IDLE |3.10.4|## やったこと
前回(「その2」)の続きから書籍の最後まで、サンプルプログラムを試しながら読み進めました。
具体的には「第4章 アプリを
Loguruでライブラリのログを出力する
[Pythonのライブラリが出力するログを活用しよう](https://www.rhoboro.com/2020/12/29/logging-and-debug.html)
をloguruでやる方法# logging版
“`py:a.py
import requests
import logginglogger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())try:
requests.get(“https://expired-rsa-dv.ssl.com/”)
except requests.exceptions.SSLError:
logger.info(“SSLError”)
“`“`
$ python3 a.py
Starting new HTTPS connection (1): expired-rsa-dv.ssl.com:443
SSLError
“`# loguru版
[Wan
MacのPython環境構築で3系にならないときの解決方法
先日、ふとAIをやってみたいと思い立ち、Pythonの環境構築を行ったのだが、手順通りにやったはずなのに、Pythonのバージョンが変わらない。
__Python2.7.16__ から __Python3.10.2__ にしたいのに、なんでか変更されない。。。。。。## 環境
PC:Mac
Version:BigSur
shell:bash
→bashかzshでインストール方法が若干変わるみたい。私はbashだったので、ここではbashの場合の解決方法## やりたいこと
Macには初期でPythonがインストールされているが、
__Python2.7.16__ であるため、最新の __Python3.10.2__ をインストール、メインバージョンとしたい## インストール手順
インストールは以下サイトを参考に実施した
参照:[Pythonの開発環境を用意しよう!(Mac)](https://prog-8.com/docs/python-env)## 現状
インストールを手順通りに実施した後に、適用バージョンを確認したところ、
期待値としては“`
$ pytho
【Python】csv.DictReaderで数値(int型のデータ)を読み込む
# はじめに
プログラミング初学者です.CSVファイルをPythonのcsv.DictReaderで読み込む際に起きたエラーとその解決法を共有します.
# 環境
– Python 3.9.4
“`sh:ターミナル
$ python3 –version
Python 3.9.4
“`# エラー発生時のコード
– 読み込み対象のファイル
“`csv:food_calories.csv
food,calorie
ramen,443
coffee,7
cheesecake,281
hamburger,300
chickencurry,690
“`– 先のCSVファイルを読み込むコード
“`python:add_calories.py
import csvsum_of_calories = 0
with open(“food_calories.csv”) as file:
data = csv.DictReader(file)
for row in data:
name = row[“food”]
【Python】クラスオブジェクトの中身を確認する2つの方法
# はじめに
プログラミング初学者です.Pythonでクラスオブジェクトをそのまま出力しても中身が確認できないことを知りこの記事を執筆するに至りました.
# 環境
– Python 3.9.4
“`sh:ターミナル
$ python3 –version
Python 3.9.4
“`# クラスオブジェクトをそのまま出力するとどうなるか
こちらのプログラムを動かしてみます.
“`python:weather.py
class Weather:
def __init__(self, name, weather, temperature):
self._name = name
self._weather = weather
self._temperature = temperaturetokyo = Weather(‘東京’, ‘晴れ’, 25)
print(tokyo)
“`するとこのようになります.
“`sh:ターミナル
$ python3 weather.py
<__main_
【mypy】リストに複数の型のデータを入れてはいけない【Python】
# はじめに
プログラミング初学者です.Pythonで書いたコードをmypyでチェックした際に起きたエラーとその解決方法を共有します.
# 環境
– Python 3.9.4
– mypy 0.940“`sh:ターミナル
$ python3 –version
Python 3.9.4$ mypy –version
mypy 0.940
“`# mypyエラー発生時のコード
キャラクターの名前と身長を格納したリストを身長順に並び替えるというプログラムです.
“`python:sort.py
kimetsu_height: list[list[str, float]] = [
[‘tanjiro’, 165],
[‘nezuko’, 153],
[‘zenitsu’, 164.5],
[‘rengoku’, 177],
[‘inosuke’, 164]
]sorted_kimetsu_height = sorted(kimetsu_height, key=lambda x: x[1])
print(sor
1年前の日付を求める
1年前の日付とググるとdateutilの`relativedelta()`を使う旨がよく出てくる。
一目datetimeでマイナス365日で良さそうだが`うるう年`を考慮すると`relativedelta()`が良いようだ。| 日付 | timedelta(days=365) | relativedelta(years=1) | 備考 |
| ——— | ——————– | ———————- | – |
| 2020/2/28 | 2019/02/28 | 2019-02-28 | 期待通り|
| 2020/2/29 | 2019/03/01 | 2019-02-28 | うるう年はずれる|
| 2020/3/01 | 2019/03/02 | 2019-03-01 | 同上|“`
// 2020/2/28 の365日前
$ python3 -c “import d
Anacondaセットアップ備忘録
# 旧環境がある場合
事前にインストール済のパッケージをtxtファイルにエクスポート
“`export.cmd
conda list –export > package-list.txt
“`# Anacondaのインストール
[anaconda公式のWEBサイト](https://www.anaconda.com/)のDownloadよりインストール
* just meを選択
→user profile下層にAnacondaがインストールされる
* 基本的にすべての項目をrecommendでOK
anaconda.exeチェックもつけたまま# Anaconda起動後
まず初期設定
“`init.cmd
conda init
“`事前にリストアップしていたパッケージのインポート
“`inport.cmd
conda create -n [env-name] –file package-list.txt
“`# 他コマンド
### 使用環境の情報を確認
“`check_info.cmd
conda info -e
“`
### 自分の環境[env-n
PythonのTypedDictのキーの有無・値の型をチェックするツールtypeddict-validatorを作った
JSON を受け取る API などでは、多くの場合で何らかのバリデーションをしていると思うが、そのバリデーションに Python の TypedDict を使えるようにしてみました。
## 概要
https://github.com/SogoKato/typeddict-validator
TypedDict を使って辞書型のデータをバリデーションするユーティリティ。辞書が必要なキーを持っているかや、値が適切な型を持っているかを再帰的にチェックします。 API リクエストや何らかのファイルのような、 JSON や YAML をデシリアライズするシーンで便利です。
現在のところ、一般的な型および Optional を含む Union 型をサポートしています。
## 要件
* Python 3.10 以降
## インストール
PyPI からインストールできます。
https://pypi.org/project/typeddict-validator/“`
pip install typeddict-validator
“`## つかいかた
`validate
pythonとc言語間での定数の同期方法の提案
# はじめに
c言語で作成したシェアードライブラリ(*.so)をpythonから呼び出す場合、
C言語の関数の呼び出し方さえ変わらなければ、処理の中身が変わっても、
pythonの処理(ソース)の変更を行うことなく、最新の状態で動作します。残念なのは、#defineで定義している内容が変わった場合、
最悪、python側のソースを変更しないと期待しているように動かない
可能性がある事です。いくつかオープンソースの実装例を見ていくと、C言語側で定義している#define xxx を、
pythonでは、同じ名称のインスタンスへの代入文で実装しています。実際、同じ内容を2箇所(c,python)に持っている状況が気持ちが悪いですし、
値が変わったか気にするのも大変だし、値を転記するのも面倒なので、
何か仕組みができないかと考えた案を投稿します。pythonは、1ヶ月位しか勉強していないので、このコーディング
がリーズナブルなのかわからないのですが、もっと良いやり方が
あれば、ぜひ教えてください。# 使い方
C言語側条件
* 記号定数マクロのみ指定可能
* マクロ展開後
PyflowでWindowsにPythonの小さな環境構築する
PyFlowというビジュアルスクリプトフレームワークもあるので気を付ける
PyflowのGitHub: [https://github.com/David-OConnor/pyflow](https://github.com/David-OConnor/pyflow)
## Pyflow
最小限のAPIを備えたシンプルで使いやすいインストールと依存関係を管理するシステムツール
+ 環境を自動で判別して,指定されているPythonで実行をするようにしてある
+ ユーザー側のPythonを利用せず[独自にコンパイルしたPythonを利用](https://github.com/David-OConnor/pyflow#python-binary-sources)することで環境に依存しないで構築できる
+ 依存関係のキャッシュされたデータベースや[warehouse](https://github.com/pypa/warehouse)などを利用しているためパッケージ依存関係の解決やlockingが速い
+ (Rustで開発されている)個人的にはこれらが特徴として良いなあと思った
B – Chocolate
## 問題
https://atcoder.jp/contests/abc092/tasks/abc092_b## 答え
“`
n = int(input())
D, X = map(int, input().split())
A = [int(input()) for i in range(n)]
ans = 0
for i in range(n): #2の時、5の時、10の時
for j in range(1,D + 1,A[i]):
ans += 1
ans = X + ansprint(ans)
“`## ポイント
range(start, stop, step)のように引数に整数を3つ指定すると、start ≦ i < stopでstepずつ増加する等差数列が生成される。 第三引数が増える数となる。 引数stepに負の値を指定すると減少していく。この場合は、start ≦ stopでないと空となる。 これを使って合宿の日におけるAiの値が入る日はいくつあるのかを計算することができる。 https://note.nkmk.me/pytho
チームでの開発環境を整える
# 始めに
複数人数でPythonを用いた小規模開発をすることになりました。
今まではデータ集計/分析のために一人でPythonを用いていただけなので、Python/ライブラリバージョン、書き方の統一について意識していませんでした。
ということで、上記事項について調べて実行してみました。# PC環境
– OS : Windows 10 Home 64bit
– WSL2 : Ubuntu 20.04
– IDE : VSCode**VSCode**を用いて**WSL2上のUbuntu 20.04**で**Python3**を使った開発を行うことを目指します。
# Pythonバージョン
[pyenv](https://github.com/pyenv/pyenv)であらゆるPythonバージョンへ切り替えられるように設定します。
## pyenv導入
まず初めに[正常なビルド環境の為の推奨コマンド](https://github.com/pyenv/pyenv/wiki#suggested-build-environment)を実行
“`bash
sud
データ型の覚えやすい暗記法を思いついた
# 背景
プログラミング初学者からPythonの場合strが「文字列」でintが「数字(整数)」だと全く覚えられず混乱するから良い覚え方はないかと打診を受け、「なるほど、、、」と思い考案。# 覚え方
## str(String)
**st**o**r**yは**文字**で書く。
## int(Int)
**int**elliは**数字**で語る。
## bool(boolean)
正解(true)かな?いいえ、不正解(false)です!ブーー(**boo**l)## 所感
もはやギャグですが、「いい国作ろう鎌倉幕府」みたいなノリで初学者には理解してもらえるようです。
需要があれば随時更新していきます。
n個のサイコロを振った時の和の確率分布をpythonを使った統計的確率で求める
## [初投稿]
自分の勉強したことを振り返ることがメインの目的です。拙い文章かもしれませんが、よろしくお願いします!
## 概要
n個のサイコロを振った時の和の確率分布を、pythonを使った統計的確率で求める。## はじめに
確率分布とは、ある操作において起こりうる事象のそれぞれの確率の分布を表現したもので、一般には散布図やヒストグラム形式で表されます。今回はn個ののサイコロを振るという操作を十分大きな試行回数行うことで、確率を求めていきます。
これは統計的確率、もっとわかりやすくいうと、経験に基づいた確率ですね。
試行回数が多ければ多いほどより正確な確率が求められます。## 実装コード
実装は、https://note.com/omori55/n/n639148bab42b
を参考(ほぼパクリ)させていただきましたが、使ったライブラリや関数の中身について自分なりに噛み砕いたことを書きます。“`python:qiita.py
import random
import matplotlib.pyplot as plt
n = int(input(“幾つのサイコロを振
【Python】令和4年度春期応用情報技術者試験 プログラミング問題
## 問題
IPA公式HPの以下を参照。
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2022r04.html## 深さ優先探索での解法(前半部)
### コード
“`python:ans.py
import pprintMAX_BOARD = 81
board = [2,0,1,0,9,0,7,0,0,
0,4,0,2,0,0,3,0,0,
5,0,0,0,0,8,0,2,9,
0,9,0,6,7,0,2,0,0,
6,0,0,3,0,5,0,0,4,
0,0,7,0,4,9,0,1,0,
7,6,0,9,0,0,0,0,3,
0,0,9,0,0,6,0,4,0,
0,0,4,0,1,0,6,0,0]def solve(x):
if x > MAX_BOARD-1:
print_board()
return
pythonでCの関数だけではなく、構造体も参照する方法
pythonから、C言語(シェアードライブラリ)の関数を呼び出す例はありますが、同じようにデータを取り出すやり方です。
C言語のdata構造体をアドレスで参照している場合、pythonでは、下記の様にする必要がありました。C言語側のdata構造体を指すdata_table_ptrからpython側でdataインスタンスを生成します。
“`c:C言語
struct data_table {
int attr;
char *data;
};
const struct data_table data = {
.attr = 100,
.data = “文字列”,
};
const struct data_table *data_table_ptr = &data; ・・・C①
:
void functionA(const struct data_table *ptr) ・・・C③
{
attr = ptr->attr; ・・・C②
:
}
:
functionA(data_table_ptr);
:
“``
クッソ初心者がエラー起こしまくった備忘録
Python初学者が関数のところでSyntaxErrorを起こしまくったので原因と解決法を備忘録として残す。
“`
>>>|def f(x):
…| return x+1
…|f(2)
|
|SyntaxError: invalid syntax
“`
IDLE shellの左端も表記しているので、[>>>]や[…]を意図的に含んでいる。defで関数を定義した後、直後でf(2)のように関数を呼びだそうとしたら、
上記のようにSyntaxErrorと表記された。そこでreturnとf(2)を一行開けた状態にしたところ
“`
>>>|def f(x):
…| return x+1
…|
>>>|f(2)
|3
“`
このように出力された。前者ではまだf(x)が定義される前にf(2)を呼び出していたということだろうか?
IDLE shellの左側にある[>>>]と[…]の違いがあるが、
[…]の中にある場合は一連の流れだからまだ定義し終わっていないということなのだろうか?