Python3関連のことを調べてみた2022年04月23日

Python3関連のことを調べてみた2022年04月23日

『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 logging

logger = 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 csv

sum_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 = temperature

tokyo = 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 + ans

print(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 pprint

MAX_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の左側にある[>>>]と[…]の違いがあるが、
[…]の中にある場合は一連の流れだからまだ定義し終わっていないということなのだろうか?

元記事を表示

pygribでGPVデータを処理してPyGMTで描画

この記事では、気象庁の配信するGPVデータの処理を行い、PyGMTで可視化する方法を紹介します。

# はじめに
GPVデータ(Grid Point Value Data)とは、世界中の地表面などを等間隔に区切った領域ごとに、気温や気圧など多数の気象要素を収録したデータのことです。日本語にすると格子点値なのでそのままですね。
PyGMTとは、地球科学の研究者がよく用いるGMT(Generic Mapping Tool)をPythonで扱えるようにしたものです。データを地図にする機能に優れています。

GPVデータの形式は、世界気象機関(WMO)が定めた二進形式格子点資料気象通報式(第2版)形式、いわゆるgrib2形式がよく用いられます。中身はテキストデータではなくバイナリデータなので、いきなりPyGMTで描画は出来ません。ところでPythonの世界には、grib2形式を簡単に読み込んでくれる`pygrib`というライブラリがあります。今回は、これを使って扱いやすい形式に変えてからPyGMTで描画します。

# 環境の準備
## 仮想環境の有効化
この記事の内容はAnacondaの仮想環

元記事を表示

【Python】二次元リストからcsvファイル作成・追記

## 環境
+ Microsoft Windows 10.0.22000.613(21H2)
+ Windows PowerShell 5.1.22000.613
+ conda 4.12.0
+ Python 3.8.12.final.0
+ csv 1.0

## コード
“`py:py
import csv

CSV_PATH = “パス”
li = [[“A”, “B”], [“C”, “D”, “E”]]

with open(CSV_PATH, mode=”a”, encoding=”utf-8″) as f:
writer = csv.writer(f)
writer.writerows(li)
“`

“`:csv
A,B
C,D,E
“`

### csvモジュールについて
`writerow(list)`:一行用
`writerows(list)`:複数行用

https://www.delftstack.com/ja/howto/python/write-list-to-csv-python/

https://techacademy.jp

元記事を表示

OTHERカテゴリの最新記事