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

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

ModuleNotFoundError でつまづいた話

# ModuleNotFoundErrorでつまづいた話

## ModuleNotFoundError

python3のパッケージ,pytrendsをimportして使用したところModuleNotFoundErrorが発生して動けなくなった。

最終的に問題は解決したが、単純にpytrends.pyという名前のファイルで実行していたため、参照先がおかしくなってるだけだった。
pythonのパッケージと同じ名前のファイルをつけるのはやめた方が良い。
“`python
from pytrends.request import TrendReq
“`

エラーメッセージ
“`shell
Traceback (most recent call last):
File “[WORKDIR]/pytrends.py”, line 1, in
from pytrends.request import TrendReq
File “[WORKDIR]/pytrends.py”, line 1, in
from pytrends.

元記事を表示

具象クラスのインスタンスを返す抽象メソッドの型ヒント

### 概要
抽象クラスのメソッドが具象クラスのインスタンスを返す場合、その抽象基底クラスはジェネリック型にする必要がある。また、その型変数は抽象規定クラスを上界に指定する必要がある。

### 具体例
足し算と符号反転を定義すれば、引き算を自動で定義してくれる抽象クラスを考える。

“`py
from abc import ABC, abstractmethod

class AdditiveGroup(ABC):
@abstractmethod
def __add__(self, _):
pass

def __sub__(self, other):
return self.__add__(other.__neg__())

@abstractmethod
def __neg__(self):
pass
“`

これを使って、整数を3で割った余りで分類する次のようなクラスを定義するとmod 3の世界で足し算、引き算、符号の反転が行える。

“`py
class FG3(Addi

元記事を表示

Python ループ処理させたい関数が複数あるときのテクニック

以下のように第一引数にループさせたい関数を、第二引数に前処理したい関数を指定するwrapper関数を作成して、マルチスレッドでtargetを指定する前にwrapして使ったりしています。

# 無限ループさせる例

“`python
import time

def wrap_loop_func(main_func: any, preprocessing_func: any = None):
“””関数をループさせる関数を返す”””
def loop_func():
if preprocessing_func:
preprocessing_func()
while True:
main_func()
return loop_func

def 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になっていることを想定しています.
tama.png

(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 Image

engine = pyocr.get_available_tools()[0]
img = Image.open(‘test.png’)
t

元記事を表示

玉手箱の空欄推測問題をPythonで解いてみた 〜GUI編(Tkinter)〜

# はじめに
玉手箱の空欄推測問題を解いてみたのGUI編です.問題の値を入力し,結果を表示するためのインターフェースを作っていきます.

# 概観
完成予想図としては下のような感じになります.

実装にあたってPythonだとTkinterというライブラリがよさげだったので,それを使うことにしました.

# 前準備
まず,はじめにウインドウを作ります.これはほぼおまじないなので,定型文通りに作っています.
“`Python3
import tkinter as tk

root = tk.Tk()
root.title(‘solver’) # ウインドウのタイトル
root.geometry(‘550×260’) # ウィンドウの大きさ
root.resizable(width=False, height=False) # ウ

元記事を表示

玉手箱の空欄推測問題をPythonで解いてみた

# はじめに
就活を始めると大体の人が適性検査を受けることになりますが,Web上で受ける知能に関する検査は大きくSPIと玉手箱の2種類があると思います.そのうちの玉手箱には下の図のような表を読み取って,空欄に当てはまる値を予測させるという問題が出ます.

tama.png

(https://jyosiki.com/spi/tama31_a.html より引用)

この問題であれば,答えの選択肢として
① 495 ② 510 ③ 525 ④ 540 ⑤ 555
の5つがあります.ちなみに模範解答は②らしいです.

私はそこまで頭が良くないので,これらの知能テストがすこぶる苦手です.特にこの類推問題関連は難しすぎて「絶対に答えが一意に定まらないだろ」と発狂しながら解いていました.なので,面倒くさいことはPythonに

元記事を表示

Python 関数名を取得する

“`python
def my_func():
return

print(my_func.__name__)
“`

“`実行結果
‘my_func’
“`

# 使用例

## マルチスレッドの実行時にタスク名(関数名)をスレッド名にする

“`python
from threading import Thread

def task1():
while True:
break

def task2():
while True:
break

task_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”;
List list = 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を有効化する。
![Hyper-V.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/17b39a25-c096-7199-415d-86bc71568cbd.png)
## Dockerインストール
Docker for windowsを公式サイトからダウンロード、インストールする。

https://hub.docker.com/editions/community/docker-ce-desktop-windows/

![docker.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18

元記事を表示

FastAPI: MariaDB に接続

こちらのサンプルのデータベースを Redis から MariaDB に変えました。
[FastAPI: 簡単な WebAPI を作成](https://qiita.com/ekzemplaro/items/6df0d64d5eab5632dd24)

“`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
from threading import Lock, Thread
import time
from typing import Dict, List

# ユーザーIDごとに排他処理をするのに使うLockオブジェクトを保持する
locks: Dict[str, Lock] = {}

start:float

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(f”{s}

元記事を表示

OTHERカテゴリの最新記事