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

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

Pythonのクラスの中身は関数である

この記事は人間でもわかるPythonバイトコードシリーズ第2回目の記事ですが、この記事から見始めても大丈夫です。
前回の記事は[こちら](https://qiita.com/MtShiba/items/6734fe97f4c4fc658936)です。

前回の記事で、次は.pycファイルのフォーマットについて説明すると書きました。が、Pythonバイトコードの仕様について調べているうちにクラスと関数の__興味深い関係__を発見しましたので、予定を変更し、タイトルも独立したものとして記事を書くこととしました。

# 環境

CPython 3.9.0

# Pythonは関数をどう定義しているか?

まずPythonインタープリタ内での関数の扱われ方について見ていきましょう。
次のスクリプトのバイトコードを逆アセンブルします。逆アセンブルとはなんぞという人は[前回の記事](https://qiita.com/MtShiba/items/6734fe97f4c4fc658936)を参照してください。

“`python
def f(x, y):
return x + y
“`

元記事を表示

ユーザー情報を調べるコマンドを作る

ユーザーに関して調べるBotをつくってみよう
#環境
Ubuntu 20.10
Raspbery PI 4 RAM8GB
Python3.8.6 64bit
Visual Studio Code
#コードを書く
“`Python3
@bot.command()
async def userab(ctx, member : discord.Member):
usab = discord.Embed(title=f'{member}の詳細’, description=’詳細だよ’, color=discord.Color.orange())
usab.set_author(name=ctx.author, icon_url=ctx.author.avatar_url)
usab.set_thumbnail(url=member.avatar_url)
usab.add_field(name=’名前’, value=f’**{member.display_name}#{member.discriminator}**’)
usab.add_field

元記事を表示

Ubuntu16.04上でのpython3.7環境をdockerで構築する

# はじめに
ちょっと手こずったのでメモとして残しておきます。

#Docker file
以下のDocker fileで構築。

“`dockerfile:
FROM ubuntu:16.04
RUN apt-get update
RUN apt update
RUN apt install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt update
RUN apt install -y python3.7
RUN apt-get install -y python3-pip
RUN apt install git -y
RUN python3.7 -m pip install –upgrade pip
RUN python3.7 -m pip install numpy
“`

# 参考

元記事を表示

pillow で画像に図形を挿入

入力画像
![fujisan01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/989d527f-399e-b561-2e21-36819a9ae574.jpeg)

出力画像
![out01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/945c233b-98de-b943-5426-b77c135fae59.jpeg)

“`py:draw_img_rect.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
# draw_img_rect.py
#
# Feb/12/2021
#
# ——————————————————————
import sys

import PIL.Image
import PIL.ImageDraw

# ——

元記事を表示

写真をEmbedで表示してみる

写真をEmbedで作るとなんだかいい感じなのでとりあえず作ってみた
#環境
言語: Python 3.8.6 64bit
入れてるやつ: discord discord.extのcommands
OS: Ubuntu Linux 20.10 Raspberry Pi4で動作
#作っていく
“`Python3
import discord
from discord.ext import commands

bot = commands.Bot(command_prefix=’ts2:’)

@bot.event
async def on_ready():
print(“Bot is ready”)

@bot.command()
async def picture(ctx, url):
embed = discord.Embed(title=’写真’ color=discord.Color.blue())
embed.set_author(name=ctx.author, icon_url=ctx.author.mention)
embed.set_t

元記事を表示

scrapyとbeautifulsoup4を用いたクローリングアプリ作成#1

# 背景
クローリングアプリを作成したいと調べていたところ
scrapyを使うと楽だと聞いたのでscrapyとスクレイピングの勉強がてら実装していこうと思いました。

## やりたいこと
・複数のフリーランス案件から案件情報を取得
・取得したデータをcsv or DB に格納していく(ここは検討中)
・どの言語需要が高いかを調べるためにヒストグラム化する

## 本記事内容
1. scrapyをインストール
2. scrapyを用いてプロジェクト作成
3. spider作成
4. 実装(途中まで)

## 前提
今回は下記サイトを参考にscrapyをインストールしました。
https://qiita.com/Chanmoro/items/f4df85eb73b18d902739
### 動作環境
* Windows10 Home バージョン:20H2
* python 3.7.8

## 1.scrapyをインストール
まずはpipコマンドでscrapyをインストール

“`
py -m pip install scrapy
“`
インストールしたのちにバージョンを確認して結果が

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事