Python3関連のことを調べてみた2021年02月12日

Python3関連のことを調べてみた2021年02月12日

PEP 634, 635, 636 (Structural Pattern Matching) を読んだよメモ

今週の火曜日、PEP 634〜636 の 3本の PEP が Accept されました。

この 3本の

元記事を表示

Django Channelsを使ったチャットアプリで画像を送れるようにする

作業環境
> python 3.8.6
> Django 3.1.5
> channels 3.0.3

# はじめに
DjangoとChannelsを使ってチャットアプリを作っているのですが、テキストだけでなく画像もチャットで送れるようにしたいと思い、色々試して辿り着いた方法をここに記します。

Channelsの導入方法や設定などは記していません。

チャットアプリを作る際に参考にさせていただいたサイトはこの記事の最後にリンクを貼っています。

# 結論
画像をBase64形式(文字列)に変換すれば、テキストと同じように画像をやり取りできる。

# 作業
#### HTML

“`html:chat.html




“`

#### ★JavaScript(画像をBase64に変換)

“`js:chat

元記事を表示

matplotlobで数式と日本語を使えるようにする!

[matplotlib](https://matplotlib.org/)でタイトルやラベルに数式を挿入、日本語を表示する手法を一つずつ紹介する。

## 環境
* macOS BigSur 11.1
* Python 3.8.6
* matplotlib 3.3.3

# 数式
数式はLaTeXコマンドを用いて以下のように書くことで挿入できる。LaTeXコマンドがわからない方は[こちら](http://www.latex-cmd.com/)を参考にすると良い。

“`python
r’$LaTeXコマンド$’ #表示したい数式をLaTeXで書く。
“`
例えばx軸のラベルを$\Gamma(x)$にしたい場合は

“`python
plt.xlabel(r’$\Gamma(x)$’)
“`
のように書く。

# 日本語化
matplotlibで使用するフォントを変更し、日本語も表示可能にする。フォントは無料で使用できるIPAexゴシックに変更する。
### matplotlibのインストール先の確認
matplotlibのインストール先を確認するために以下のコマンドを叩く。

元記事を表示

3次元極座標系と一様乱数を用いると球面上に一様に乱数は生成できない

3次元極座標系を用いて球面上に一様な乱数を生成しようとする。

“`math
x=r\sin{\theta}\cos{\phi}\\
y=r\sin{\theta}\sin{\phi}\\
z=r\cos{\theta}\\
\\
(0\leq{\theta} \leq {\pi}, 0\leq{\phi} \leq 2{\pi})
“`
#実際のプログラム

今回はAnacondaのJupyter Notebookを用いてプログラムを実行した。

###全体

全体としては下記のように記述した。

“`
import numpy as np
import random
import math
import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(5,5))
ax = fig.add_subplot(111, projection=”3d”)

test=1000
r=1.0
for i in range(test):
a

元記事を表示

【忘備録】リスト内包表記について(Python)

#通常のリスト作成
“`python
num = (1, 2, 3, 4, 5)
list = []
for i in num:
list.append(i)

print(list)

“””
【結果】[1, 2, 3, 4, 5]
“””
“`

#リスト内包表記でのリスト作成
“`python
num = (1, 2, 3, 4, 5)
list = [i for i in num]

print(list)

“””
【結果】[1, 2, 3, 4, 5]
“””
“`

##条件を追加する
“`python
num = (1, 2, 3, 4, 5)
list = [i for i in num if i % 2 == 0] #2で割って余りが0のもの

print(list)

“””
【結果】[2, 4]
“””
“`

##for文を2つ連結して使用
“`python
num = (1, 2, 3, 4, 5)
num2 = (6, 7, 8, 9, 10)
list = [i * j for i in num for j in num2]

p

元記事を表示

[デイリーコーディング] 文字列内の各アルファベットを10個後のものに変換する

#今日の問題: 文字列内の各アルファベットを10個後のものに変換せよ

ord()とchr()を使って解決していきます。

“`python:回答(Python3)
from icecream import ic # デバッグ用にicecreamをインポートしています。

def move_ten(st):
result = “”
for i in st:
ordI = ord(i)
if ordI >= 113:
result += chr(ordI – 16)
else:
result += chr(ordI + 10)
return result

ic(move_ten(“testcase”)) # “docdmkco”
ic(move_ten(“codewars”)) # “mynogkbc”
ic(move_ten(“exampletesthere”)) # “ohkwzvodocdrobo”
ic(move_ten(“returnofthespacec

元記事を表示

googletrans , YouTube subtitle , Google Colab

[English](https://qiita.com/dauuricus/items/7c2d7a6a73b3755c5c6c)

以前、話していることを聞き書きしたいときにYouTubeにアップロードして、一時間ほど待って、キャプションが自動でできてから、そのキャプションファイルを .str / .sbv などでダウンロードして、さらに[Subtitleedit](https://nikse.dk/About)や[Aegisub](https://github.com/Aegisub/Aegisub)など優れた機能の字幕編集エディターを使って、間違いを修正して、編集終わればテキストファイルにして書き出していました。

IBMワトソンTTSのdemo(日本語ドメインのは見たことないです。HPリンクのメンテ一切してないようなので。)や、京都大学の河原研究室の字幕生成の実験公開サーバーなども使わせていただいて、結果を比較したりしていました。

編集しやすいということでは、字幕ファイルにするのが最もスムーズだと感じました。

元記事を表示

A. ABC Preparation, B. Shift only, C – To Infinity, D – Powerful Discount Tickets

2021年2月10日 くじかつ
精進問題

##[A – ABC Preparation](https://atcoder.jp/contests/abc185/tasks/abc185_a)

O(1)

“`python:python
a, b, c, d = list(map(int, input().split()))

print(min(min(a, b), min(c, d)))
“`

“`C++:C++
#include

#define rep(i,n) for(int i=0; i<(n); ++i) #define fixed_setprecision(n) fixed << setprecision((n)) #define execution_time(ti) printf("Execution Time: %.4lf sec\n", 1.0 * (clock() - ti) / CLOCKS_PER_SEC); #define pai 3.1415926535897932384 #define NUM_MAX 2e

元記事を表示

Python[List/Dict] – スライス、ストライド、catch-allアンパック、ソート

# シーケンスのスライス
Pythonには、シーケンスをスライスする構文があります。スライスをすることにより要素の部分集合に最小限の労力でアクセスできます。list, str, byteという組み込み関数は簡単にスライスできます。

~~~python
a = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’]
print(‘Middle two: ‘, a[3:5])
print(‘All but ends: ‘, a[1:7])
>>>
Middle two: [‘d’, ‘e’]
All but ends: [‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]
~~~

末尾までスライスする時には、末尾のインデックスは冗長なので省きましょう。

~~~python
print(‘To end: ‘, a[5:])
>>>
To end: [‘f’, ‘g’, ‘h’]
~~~

スライスでは、りすんとを超えたstart, endも欠損した要素を無視することで適切に扱われます。
また、インデックスに直接アクセスしようとすると例外が発生します

元記事を表示

Python[List/Dict] – getメソッド, setDefault, defaultDict, __missing__

# 組み込みdictのget()・setDefault
Dictを扱うための3つの基本的な演算とは、キーとその値へのアクセス, 代入, 削除です。

例えば、以下のようなフルーツを`counters`とするdictを定義します。

~~~python
counters = {
‘appple’: 3,
‘banana’: 2
}
~~~

新たに追加するものを`counters`に増やすには、キーがあるかどうか調べ、なければデフォルトのカウンタ値0で挿入し、カウンタの値を1つ増やします。if分でキーが存在する場合にTrueを返すin文を使います。

~~~python
key = ‘lemon’
if key in counters:
count = counters[key]
else:
count = 0
counters[key] = count + 1
print(counters)
>>>
{‘appple’: 3, ‘banana’: 2, ‘lemon’: 1}
~~~

同じことを実現する別の方法として、存在しないキーの値を得たい場合にK

元記事を表示

Python Pycharmのインストール 

皆さん、記事主モノ([My Twitter](https://twitter.com/El4lQmonosiwnf) へ)です。
今回も学んだことについて、一つ一つアウトプットを兼ねて、Pythonに関する知識や理解を皆さんと共有できたらと思います。
インストール方法は概ねWindowsもMacも変わりません

ではやっていきましょう!

#統合環境開発(IDE)ってなに?
まずPythonの統合開発環境IDEというのを説明させていただきます。
IDEというのは、 Integrated Development Environment の略であり、ソフトウェア開発に必要なソフトウェアを一つに組み合わせたもので、同じ操作画面から統一的な操作法で利用できるようにしたソフトウェアパッケージとなります。
そしてこのIDEは、プログラムを記述し、コードをコンパイルし、実行してデバックするという流れがあり、このプロセスを単一のツール上で行うことができます。
##IDEの一つPycharmについて
今回使っていくPycharmはjetbrains([リンク先](https://www.jetbrain

元記事を表示

Pandasで2つのデータフレームに共通する行だけ残す・削除する方法

Pandasで2つのデータフレームを比較して処理を行う方法をまとめます。

例として以下のデータフレームを使用します。

“`py
import pandas as pd

df_2017 = pd.DataFrame({‘種類’:[1, 2, 3, 1, 3], ‘サイズ’: [“S”, “S”, “M”, “L”, “S”], ‘平均価格’: [200, 120, 250, 300, 260]})
df_2020 = pd.DataFrame({‘種類’:[2, 2, 1, 1], ‘サイズ’: [“S”, “M”, “L”, “M”], ‘平均価格’: [130, 180, 340, 280]})
“`

2017年のデータ

||種類 |サイズ |平均価格|
|:—-:|:——–:|:————:|:————:|
|0 |1 |S |200|
|1 |2 |S |120|
|2 |3 |M |250|
|3 |1 |L |300|
|4 |3 |S |190|

2020年のデータ

元記事を表示

古いUbuntuにpyenvで新しいPythonを入れる

やんごとなき理由により

# 環境
– Ubuntu 14.04

# やりたいこと
– pyenv で Python 3.9.0を入れる

普通にやると以下のようなエラーが出てしまう

“`
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
“`

# やること

## 新しいopensslを導入

14.04のopensslは古いので、Python 3.7以降が必要とするopenssl 1.0.2以降をビルドしてインストールする。

“`bash
cd /tmp
mkdir openssl-build
wget https://www.openssl.org/source/openssl-1.1.1i.tar.gz
tar xvfz openssl-1.1.1i.tar.gz
cd openssl-1.1.1i
./config –prefix=/usr/local/openssl/1_1_1i –openssldir=/usr/local/openssl shared
m

元記事を表示

ImportError: DLL load failed: 指定されたモジュールが見つかりません。とエラーが出たら

##環境
windows 10
python 3.8.5

##初めに
Jupyter Labにて、
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
とエラーが発生して解決にてこずってしまったため、
メモとして書き記しておきたいと思いました。

##解決方法
解決方法はマイクロソフトのサイトの
[The latest supported Visual C++ downloads](https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0)
Visual Studio 2015, 2017 and 2019の下にある
・x64: vc_redist.x64.exe
をインストールしたら解決することが出来ました。

##原因
windowsにはvcランタイムがインストールされていなかったので、
インストールしてあげる必要があったみたいです。
上記のvc_redi

元記事を表示

pyenv install 3.x.x で error: C compiler cannot create executables

## 忙しい人向け
細かいことはいいから結論が知りたい人向けに先に結論を記載します。
[解決法3 xcode-betaのインストールと適用](#解決法3-xcode-betaのインストールと適用) で筆者は解決しました。

## はじめに

久々にPythonで遊ぼうと思ってpyenvでPython3系をインストールしようと思ったらハマって1時間かかったのでメモとして残します。

## 開発環境

– OS: macOS Big Sur 11.2
– pyenv: 1.2.22

## 事象

“`zsh

$ brew install pyenv
“`

実行後にバージョンを指定してPythonをインストールしようとするとタイトルのエラーが発生
します。
筆者の場合は3.9.1をインストールしようとしてエラーになりました。

“`zsh

$ pyenv install 3.9.1

~中略~

BUILD FAILED (OS X 10.15.7 using python-build 20180424)

Inspect or clean up the working tre

元記事を表示

A – Favorite Sound, B – Bitter Alchemy, A – Simple Math 2

2021年2月9日のくじかつ
精進内容!

##[A – Favorite Sound](https://atcoder.jp/contests/abc120/tasks/abc120_a)

O(1)

“`python:python
A, B ,C = list(map(int, input().split()))
res = min(B // A, C)
print(res)
“`

##[B – Bitter Alchemy](https://atcoder.jp/contests/abc095/tasks/abc095_b)

O(N)
貪欲法、まず最初にN種類のドーナツを作成できるか。
その後、最も少ない材料で作成できるドーナツを可能な数だけ作成する。

“`python
N, X = list(map(int, input().split()))

m = [0] * N
min_m = 1001
res = 0

for i in range(0, N):
m[i] = int(input())
min_m = min(min_m, m[i])

元記事を表示

A – Biscuits

##[A – Biscuits](https://atcoder.jp/contests/agc017/tasks/agc017_a)
最初は2^50のbit全探索を考えました。
2^50は「1.1258999e+15」ですね。
どう見てもTLEです。

“`python:python
import math

N, P = list(map(int, input().split()))
A = list(map(int, input().split()))

res = 0
for bit in range(0, 2 ** N):
total = 0
for i in range(0, N):
if (bit >> i) & 1:
total += A[i]

if total % 2 == P:
res+=1

print(res)
“`

ここで奇数と偶数に注目しました。
###p=0の時、数列の偶数の要素をnとした時の組み合わせは、

“`math
V1 = 1 (n

元記事を表示

Python:画像中の物体をMatplotlibで描写したい

#はじめに
・画像中の物体を座標変換等でpltで表示できるようにしました。

参考:[Python:OpenCVのエッジ抽出を利用した手抜き物体検出](https://qiita.com/horiday_qiita/items/be82c8a4b31d9b17abf8)

##具体例
[1]材料
![target2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1065409/61b26a22-eafe-ba24-fc4d-881a6c914d75.jpeg)

[2]完成
![ダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1065409/f4f5c52b-46ce-e4b8-d647-38f8c2cb95cb.png)

#実装
##1.[前回](https://qiita.com/horiday_qiita/items/be82c8a4b31d9b17abf8)のまとめ
とりあえず、材料とす

元記事を表示

LINEリッチメニューの開発方法

#リッチメニューとは
>「LINE公式アカウントの機能の一つ「リッチメニュー」は、トーク画面の下部に大きく表示されるメニューです。画面を大きく占有するためユーザーの注意を引きやすいほか、クリエイティブとともにリンクを設定することで予約ページやECサイトなどにユーザーを誘導することができます。」
LINE for Business(https://www.linebiz.com/jp/column/technique/20180731-01/) より引用

ざっくり言うとユーザーができる行動をテキストでやりとりするのではなくリッチメニューで
表示されているボタンを押すことで簡単に利用することできるようになるということで、どうやらbotに
導入することでより便利になりそうな予感です。
この回では、個人的なメモと他に同じようにpythonでLINE messaging APIでリッチメニューを開発したい!と
考えている方の何かヒントになればという話を書きます。

#本編
まず初めに、今回この記事を参考にリッチメニューを作成しました。
[LINE Messaging APIのリッチメニューをP

元記事を表示

アプリ制作 herokuでのslug sizeについて

##この記事について
プログラミング初学者の私が初めてherokuにデプロイする際につまずいてしまったところを共有していけたらと思います。少しでも参考になれば幸いです。

##herokuでのデプロイ
今回私はFlaskを使ったアプリの開発を行いherokuへデプロイしようとしました。しかし最初から上手くいくはずもなくエラーがバンバン出てきました。
その中で一番出てきたエラーが
`Compiled slug size: 504.7M is too large (max is 500M).`
herokuにデプロイできる最大容量が500MB(無料版)に対して実際にデプロイしようとしたものが__504.7MBで容量オーバー__ですよというエラー。
あと4MBぐらいならrequirements.txtでモジュールを違うバージョンに書き換えて調整すれば500MBきるかなと思っていたんですが、デプロイしようとするたびに容量オーバーのエラーが出てしまっていました。
##原因
最初はモデルに読み込ませたデータ量が大きすぎたのかなと思いデータ量を少なくしてモデルを再構築しデプロイしてみましたが__結

元記事を表示

OTHERカテゴリの最新記事