- 1. JOI 2011 予選 4 – 1 年生
- 1.0.1. 【JAVA→Python】JAVAで書いた特定の文字をカウントするコードをPythonに書き換えてもらう【新人教育】
- 1.0.2. dataclassesの使い方
- 1.0.3. Djangoで作成したWebアプリケーションを無料で公開する(PythonAnywhere)
- 1.0.4. 備忘録:matplotlibでベクトル描画(2D / 3D)
- 1.0.5. matplotlibを使ってグラフの面積を可視化する|備忘録
- 1.0.6. 【Python】Tkinterを使ったコメントを投稿してみた
- 1.0.7. Flaskでユーザー認証を行う方法
- 1.0.8. 【Python】英語学習のために英作文を翻訳するプログラムを作成してみた
- 1.0.9. PyTorch の dataloader の shuffle 機能に再現性をもたせる方法
- 1.0.10. Django 管理画面でのカスタムフィルター admin.SimpleListFilter
- 1.0.11. PythonとSQLiteを使ってみた
- 1.0.12. 2022年のPythonの組み込みvenvツールについて
- 1.0.13. Hello Python3
- 1.0.14. 無自覚に rm /* した話(pathlib)
- 1.0.15. Python 学習ノート #3【自動PDF変換】
- 1.0.16. Python 学習ノート #2【自動フォルダ作成】
- 1.0.17. Python 学習ノート #1【自動ファイル名変換】
- 1.0.18. IPアドレスからおおよその場所(緯度経度)を取得する
SeleniumでGoogleアカウントにログインした状態を保持する
# はじめに
GoogleではSeleniumを利用したアカウントへの自動ログインは拒否するよう設定されています。
そのため、SeleniumでGoogleアカウントを利用するようなコードを実行したい場合は、Googleアカウントにログインした状態のブラウザを使う必要があります。
実際に私はSeleniumでGoogleアカウントを利用する自動テストの開発案件で、Googleアカウントにログインした状態のブラウザを使うようにしました。
そこで本記事では、Python + Selenium + Chrome環境でGoogleアカウントにログインした状態のプロファイルを指定してコードを実行する方法を紹介します。# 事前準備
まずChromeを起動し、手動でGoogleにログインします。
次に、現在使用しているプロファイルを確認するため、URL欄に`chrome://version`と入れます。
「プロフィールパス」から使用中のプロファイルの場所と名前を確認することができます。![コメント 2022-07-05 080528.png](https://qiita-image-store.
超初心者がe869120さんの【分野別 初中級者が解くべき過去問精選 100 問】をpythonで解いてみた!Part3
https://qiita.com/K-suke99/items/d61684fabc881cf695ea
の続きです。
JOI 2011 予選 4 – 1 年生
https://atcoder.jp/contests/joi2011yo/tasks/joi2011yo_d
“`python:practice.py
N = int(input())
Alist = list(map(int, input().split()))
dp = [[0]*(21) for _ in range(N-1)]
dp[0][Alist[0]] = 1
Alist = Alist[1:]
for n in range(1,N-1):
for m in range(21):
if m-Alist[n-1] >= 0:
dp[n][m] += dp[n-1][m-Alist[n-1]]
if m+Alist[n-1] <= 20: dp[n][m] += dp[n-1][m+Alist[n-1
【JAVA→Python】JAVAで書いた特定の文字をカウントするコードをPythonに書き換えてもらう【新人教育】
# JAVA研修を終えた新卒の子にPythonを教える
入社後研修が終わった新卒の子にとりあえず会社としてはわんぱくにもDjangoの本を渡して学習してもらおうという感じだったので(私の入社時もそうだった)Python自体を学んでもらってDjangoに取り組んでもらおうと思い独断で新人教育の機会をいただきました。
私自身が学習で文章題を解いた時にJAVAでコードを作成したので、せっかくなら新卒の子にPythonに変換してみてもらおうと思いコードを渡してみました。# 目次
[1.実際に渡したコード(JAVA)](#1-実際に渡したコード(JAVA))
[2.そう、それはDjango](#2-そう、それはDjango)
[3.あれこれ話しがあとに返ってきた解答](#3-あれこれ話しがあとに返ってきた解答)
[4.おわりに](#4-おわりに)# 1.実際に渡したコード(JAVA)
“`java:JAVA
import java.util.*;public class Main {
public static void main(String[] args) {
dataclassesの使い方
公式サイトはこちら
[dataclasses – Data Classes – Python 3.10.5 documentation](https://docs.python.org/ja/3.10/library/dataclasses.html)# 使用するメリット
– ①可読性が高い
– ②型指定いないとエラーがでる
– ③特殊メソッドが定義される## ①可読性が高い
通常のコンストラクタを使うと
“`python
class InventoryItem:
“””Class for keeping track of an item in inventory.”””
def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0):
self.name = name
self.unit_price = unit_price
self.quantity_on_hand = quantity_on_handd
Djangoで作成したWebアプリケーションを無料で公開する(PythonAnywhere)
# 1. はじめに
前回の「[DjangoでHello Worldを表示する](https://qiita.com/t-shirayama/items/bc18d924dc672c7215cd)」で作成したWebアプリケーションをPythonAnywhereというサービスを使用して無料で公開します。# 2. PythonAnywhereとは
PythonAnywhereはDjangoやFlaskなどのPythonのWebフレームワークに特化したホスティングサービスです。無料プランがあるため勉強用やお試しで利用することができます。無料プランだと制限は多いですが、有料プランに切り替えることで実運用も可能になります。# 3. デプロイ
GitHubとPythonAnywhereを連携してデプロイします。# 3.1 GitHubにソースコードをプッシュ
まず、GitHubにリポジトリを作成し、下記のコマンドでソースコードをプッシュします。
コマンドは前回作業していた一番上のmysiteフォルダに移動して実行します。“`
$ git init
$ git config –gl
備忘録:matplotlibでベクトル描画(2D / 3D)
# とりあえず2次元描画
( x, y ) 座標で平面ベクトルを表示してみた# ソースコード
“`python3:python3
import numpy as np
import matplotlib.pyplot as plt# 座標設定関数
def coordinate(axes, range_x, range_y, grid = True,
xyline = True, xlabel = “x”, ylabel = “y”):
axes.set_xlabel(xlabel, fontsize = 16)
axes.set_ylabel(ylabel, fontsize = 16)
axes.set_xlim(range_x[0], range_x[1])
axes.set_ylim(range_y[0], range_y[1])
if grid == True:
axes.grid()
if xyline == True:
axes.axhline(0, co
matplotlibを使ってグラフの面積を可視化する|備忘録
# きっかけと概要
数学を教えるときに、
“`math
S =\int_{0}^{3}\{f(x)-g(x)\}dx
“`
とか積分して面積を求めることがありますが、
***これをなんとか可視化できんかいな?***
って思ってやってみました。備忘録です。# ソースコード
“`python3:python3
import numpy as np
import matplotlib.pyplot as plt# y = x**2
def mkdata(n):
np.random.seed(0)
px = []
py = []
for i in range(n):
x = np.random.random()
y = np.random.random()# y = x**2 未満の時プロット
if y < x**2: px.append(x) py.append(y) return px, py ### 散布図を描く ### # 発生させる乱数の個数:10000 # 点の大きさ:1 plt.sc
【Python】Tkinterを使ったコメントを投稿してみた
# はじめに
Pythonは未だ初心者ですが、Tkinterを使ってコメントを投稿してみました。## Tkinterをインポートする
まず初めにTkinterをインポートします。“`
>>>import tkinter
“`
## コードを実行する
下記はコードの実行結果です。
“`python
import tkinter
“”” 投稿ボタンの生成 “””
def click_btn():
x = text_x.get(‘1.0’, ‘end -1c’)
text_y.insert(tkinter.END, x)
“”” 消去ボタンの生成 “””
def delete_btn():
text_y.delete(‘1.0’, tkinter.END)root = tkinter.Tk()
root.title(‘コメント出力’)
root.geometry(‘600×600’)
“””コメント書き込み欄の生成 “””
text_x = tkinter.Text(width = 50, height = 6, font = (‘Times Ne
Flaskでユーザー認証を行う方法
まで、編集途中です。
これをFlaskで実装したときに調べた内容メモです。
https://developers.google.com/identity/protocols/oauth2/openid-connect## 全体の手順
こちらに詳細が書かれています。
https://developers.google.com/identity/protocols/oauth2ウェブサーバーアプリケーションに書かれているように
1. ユーザー認証して認証コード取得
2. 認証コードをアクセストークンへ変更
3. アクセストークンを使ってAPI![2022-07-03_21h57_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428239/6ca6820d-2fd6-b572-941d-76fdbb231c9f.png)
アクセストークンは、認証済みユーザーを識別するためのもので、
アクセストークンがあれば、指定しているAPIが使えるらしい。久しぶりに[一番分かりやすいOAuth
【Python】英語学習のために英作文を翻訳するプログラムを作成してみた
最近、英語学習をはじめました。
その際に英作文の添削をしてもらっているため、後で日本語のみで英作文をしたいと思い至りました。そこで、添削がかかった文章のPDFを翻訳し、日本語のみのスクリプトを作成するプログラムがあったら便利なのではと思い、実際に作ってみました。
その際にPDF関連のライブラリなど学びが多かったのでシェアいたします。
# 実装
“`python:trans.py
from googletrans import Translatorfrom pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParamsimport pathlib
import re
# PDFファイルのパスを取得
p_temp = pathlib.Path(‘./files’).gl
PyTorch の dataloader の shuffle 機能に再現性をもたせる方法
# はじめに
複数の実験条件で比較検証を行う場合、比較したい条件以外は同じ条件で実験しなければなりませんが、dataloader の shuffle 機能を使うと実行ごとに毎度変わったデータの読み込み順になってしまいます。これでは学習モデルの再現性を保つことができません。
今回は、データの読み込み順にランダム性をもたせつつ、shuffle機能の再現性をseedで担保する解決策を残しておきます。# 解決方法
**torch.manual_seed(seed)を加えます。**“`train.py
seed = 20220703”’
追加コード: shuffle の再現性を担保する
”’
torch.manual_seed(seed)train_set = mydataset.MyDatasets(input_dir)
train_loader = torch.utils.data.DataLoader(train_set,batch_size=n_batch,shuffle=True,num_workers=4,pin_memory=True,drop_last=
Django 管理画面でのカスタムフィルター admin.SimpleListFilter
—
## 環境
Windows 11 Home
Python 3.10.2
Django 4.0.2
venv利用あり## 背景
管理画面において、フィルターの名称を変えたりカスタマイズしたフィルターを使用したかった。
例えばBool値のフィルタにおいて、「はい」「いいえ」だけでなく、データ登録されていないものを抽出するために
「はい か いいえ=登録あり」「はいでもいいえでもない=登録なし」といったものを用意したかった。## models.py
“`python:mysite\models.py
from django.db import modelsclass TestModel(models.Model):
class Meta:
verbose_name = ‘テストモデル’
verbose_name_plural = ‘テストモデル’columnA = models.CharField(max_length=30, unique=False, primary_key=True)
columnB =
PythonとSQLiteを使ってみた
仕事ではJavaやJavaScriptが多いですが、個人的にはpythonが好きです。
pythonの現場に行く機会があった時にできるようになっていたいなあとなるべく毎日勉強しています。今回はpythonに標準であるSQLiteを使って基本的なことをやってみました。
まず、DB作成からテーブル、データのinsertまで。“`Python
import sqlite3#データベースファイルを作る
dbfile = sqlite3.connect(‘fruit.db’)
c = dbfile.cursor()createSql = ‘create table FruitName(id,name);’
c.execute(createSql)insertSql = “insert into FruitName(1,’Apple’);”
c.execute(insertSql)dbfile.commit()
dbfile.close()
“`
作成したテーブル内のデータを表示するためのソースがこちら
“`Python
import sqlite3connect
2022年のPythonの組み込みvenvツールについて
・Pyenv:プロジェクトごとの仮想環境のコンテキスト外で、コマンドラインでさまざまなPythonエディションを使用する場合に便利です。
・Pipenv:Pipenvは、仮想環境とプロジェクトの依存関係管理ツールとして使えます。ただし、Pipenvはどのような形式のパッケージ化についても対応している訳ではないです。そのため、最終的にPyPIにアップロードしたり、他の人と共有したりするプロジェクトには理想的ではありません。
Poetry:Pipenvのツールセットを拡張したPoetryは、プロジェクトと要件を管理するだけでなく、プロジェクトをPyPIに簡単にデプロイする事が可能です。
PDM:最も最先端のプロジェクトです。PoetryやPipenvと同様に、PDMは、プロジェクトをセットアップし、その依存関係を管理し、そこから配布アーティファクトを構築するための単一のインターフェースを提供します。
Hello Python3
Code: sample
`
print(‘hello world’)
`
無自覚に rm /* した話(pathlib)
# 結論
`pathlib`の`joinpath()`に誤って**絶対パス**を入れてしまった
結果,`rm ./temp/hoge/*`のつもりが`rm /*`が走った`sudo`や`-rf`は付けてなかったので,実害はなし :innocent:
# 経緯
諸事情により,Python & subprocess経由で`rm ./temp/hoge/*`を実行したかった.
スクリプトをノリノリで書いて実行した瞬間,エラーメッセージが山のように流れた.“`bash
rm: cannot remove ‘/bin’: Permission denied
rm: cannot remove ‘/boot’: Is a directory
rm: cannot remove ‘/dev’: Is a directory
rm: cannot remove ‘/etc’: Is a directory
…
“`# 実行したスクリプト
下のコードを実行すると`rm /*`が実行される.:::note alert
下のコードを実行しないでください
:::
“`python:
Python 学習ノート #3【自動PDF変換】
#1.きっかけ
昨日作成した自動ファイル名変換プログラムで図に命名することができた。
さらにそれぞれの図を連番フォルダに分けていくことができた。
しかし、それぞれの画像を参照しながら問題を解いていくと、どこを読んでいるかわからなくなってしまうことが多々あった。
なので、すべての図をPDFに変換して描画ツールの定規などを置いたり、マーカーで線を引くなどして対応したい。そのため、この大量の図をPDFに変換する必要がある。
#2.作成
盛り込みたい機能
– それぞれのフォルダに分かれてしまっているのでフォルダ指定ができるようにする。
– 画像のタイプも指定できるようにしたい
– 生成するPDFの名称も指定したい。以上の条件を満たすプログラムを作成していく。
##2-1.Pathを通す
まずは図が格納されているフォルダまでの経路をimg_pathに格納する。
“`Auto_Make_PDF.py
print(r”例)C:\Users\Owner\Downloads”)
img_path=input(“PDFに変換したい画像が存在するパスを入力してください==>”)
“
Python 学習ノート #2【自動フォルダ作成】
#1.きっかけ
昨日作成した自動ファイル名変換プログラムで図に命名することができた。
さらに、それぞれの模擬試験をフォルダに連番で分けていきたい。なので、連番のフォルダを自動で作成するプログラムを作成しようと考えた。
#2.作成
では、さっそく自動フォルダ作成機能をさっと作っておこうと思います。
##2-1.フォルダ数選択
まずは作成する量を入力値から読み込みます。
“`Auto_Make_Folder.py
#フォルダ数選択
print(“いくつのフォルダを作成しますか==>”,end=””)
folder_maker=int(input())
print(“{}件のフォルダが作成されます。”.format(folder_maker))
“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502107/246d8089-3b1e-d679-4157-1a3a1afa98d2.png)これで作成する量をユーザー入力から任意で設定することができました。
##2-
Python 学習ノート #1【自動ファイル名変換】
#1.きっかけ
Wordの本を読みながらPCで実際の操作を学習していた。
しかし、キーボードを両手で打つと手が離れてしまい、本がめくれるなど不便なことばかり。
よって非破壊自炊法により、本をイメージ化することに成功した。([参考](https://follow-myheart.com/archives/990))実際の画像はこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502107/6f23e716-eacf-393a-3933-bf166ae20dfc.png)それらを用いた実際の学習環境は以下のようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502107/5cd89c8f-dc00-6a74-17d7-cd715dd3a9d1.png)今は6画面を用いて作業しているのでとても楽に作業ができる。
モニターリソースとしては以下のように使用している。
IPアドレスからおおよその場所(緯度経度)を取得する
# gecoderを使う方法
## install
“`bash
pip install geocoder
“`中を見るとWebサービスを利用しているから、オンラインアクセスが出来ないと駄目だったり、Webサービスがなんらかで中断してたら使えない。
## code
codeはこんな感じ
“`python
import geocoderdef ip2geocode(ip):
g = geocoder.ip(ip)
if len(g.latlng) == 0:
print(‘IPから位置情報が取れない IP={0}’.format(ip))
else:
print(‘latlng = {0},{1}’.format(g.latlng[0], g.latlng[1]))
print(‘https://www.google.com/maps?q={0},{1}’.format(g.latlng[0], g.latlng[1]))
“`# **GeoLite2を使う場合**
## DBのダウン