- 1. Python導入
- 2. 数式の計算 (paizaランク C 相当)
- 3. 数式の計算( 1 桁) Python3編
- 4. 表記の訂正 (paizaランク C 相当)
- 5. pygameをいじっていて、早めに理解したかったこと
- 6. 【Python/Git】pycacheをgit ignoreする
- 7. じゃんけんゲーム python
- 8. 【Python】Gmail API を使ってメールを送信する
- 9. 【GitHub Actions/Python】自動pytestの際に、testsディレクトリ内のモジュールをimportする
- 10. 【Python】モジュール構成規則を考えてみる
- 11. pythonでMeCabを使う
- 12. 【Django】DBから取得したデータ&必ず任意のデータを一つ加えたリストからランダムに取り出す
- 13. 特定のディレクトリ下のファイルを4桁の連番に名前を変更する
- 14. POSCARからneighbors listの作成(ログ)
- 15. パスワード作成 (paizaランク C 相当)
- 16. 重複の削除 (paizaランク C 相当)
- 17. Python boto3を使ってS3からオブジェクトの一覧を取得する
- 18. 【Python】dictionaryを使う前に、超便利メソッドを知ってくれ!エラーハンドリングはもうしなくていい!
- 19. [Python3 / caffe] python3でcaffeを動かすためのdocker imageをbuildする
- 20. Python イテラブル・イテレーター・ジェネレータ式を簡潔に
Python導入
**はじめに**
WEBスクレイピングの為Pythonを導入する手順をまとめていきます。
・目次
1.Pythonのインストール
2.pip(非公式パッケージ管理ツール)の更新
3.パッケージインストール
3.1.Seleniumのインストール
3.2.pandasのインストール
3.3.ChromeDriverのインストール4.VSCodeインストール
4.1.VSCodeの拡張機能(Python)
4.2.VSCodeの拡張機能(Python Indent)
4.3.VSCodeの拡張機能(Python Docstring Generator)5.コマンド一覧
etcスクレイピングの注意点
・スクレイピングを行うWebサイトの利用規約、著作権を事前に確認すること
・robots.txtを確認すること
数式の計算 (paizaランク C 相当)
https://paiza.jp/works/mondai/string_primer/advance_step9
複数桁の計算。
`eval()`を使えば一発だけど、
意図的に考えるとそうではないので、
下記のように実装
でもだめだった。
そもそも、+と-を覚える順番が間違っていた。
最初の数値をそのままansにいれればいいのだが、
そうではなく数式も入れてしまってたので数値が代わってしまった。“`py
s = input()
ans = 0
add = True
tmp = “”
for i in range(len(s)):
if s[i] == ‘+’:
add = True
ans += int(tmp)
tmp = “”
elif s[i] == ‘-‘:
add = False
ans -= int(tmp)
tmp = “”
else:
#+でもーでもなければ数値として登録
tmp += s[i]
if
数式の計算( 1 桁) Python3編
https://paiza.jp/works/mondai/string_primer/advance_step8
文字列で書かれている数式を確定させて出力させる問題
前回学んだことを活かして下記のように
はじめ、+かーかそうでなければ数値として、答え変数に代入し、
その後、+かーかでフラグを立てて
その次の数値をフラグ通りに計算するという方法。“`py
s = input()
ans = 0
flag = 0
for i in s:
if i == ‘+’:
flag = 1
elif i == ‘-‘:
flag = 2
else:
if flag == 0:
ans = int(i)
elif flag == 1:
ans += int(i)
elif flag == 2:
ans -= int(i)
print(ans)“`
答えを見てみるともっと簡単になってた。
奇数が数
表記の訂正 (paizaランク C 相当)
https://paiza.jp/works/mondai/string_primer/advance_step7
>・ ミス 1
先頭に必要のない 0 がいくつかついてしまう
・ 本来 1 である数値が 0001 と表記されてしまう
・ 本来 0.001 である数値が 00.001 と表記されてしまう
>
>・ ミス 2
小数である数値の末尾に必要のない 0 がいくつかついてしまう
・ 本来 0.1 である数値が 0.10 と表記されてしまう
>
>・ ミス 3
小数である数値に小数点が複数個ついてしまう
ただし、 1 つめの小数点の位置が正しい小数点の位置であるものとします
・ 本来 0.123 である数値が 0.1.2.3 と表記されてしまう。
>
>表記が正しくない可能性のある数値を表す文字列 S が与えられるので、その数値を正しい表記にしてください。
>S を数値として扱うと上手く処理が行えないので気をつけてください。はい。すっげえ難しく30分過ぎてもできなかったのでギブアップ。
ひとまず考えとして
・小数か整数かで場合分け
・整数なら、正規表現で先頭の000だけ消
pygameをいじっていて、早めに理解したかったこと
chat GPTとかの回答をそのまま貼り付けることがあります。
作りながら気づいたことを随時追加していきます。
認識違いや追記などございましたら、ご指摘いただけると嬉しいです。## surfaceとdisplay surfaceの違い
>pygameにおいて、’surface’と ‘display surface’は異なるものですか?はい、Pygameにおいて「surface」と「display surface」は異なる概念ですが、両者は関連しています。
Surface: Pygameでは、Surfaceは画像や図形を描画するための基本的なオブジェクトです。これは基本的にピクセルの2次元配列で、いかなるグラフィカルコンテンツもこのSurfaceに描画されます。あなたは多くのSurfaceオブジェクトを作成し、それらに異なるグラフィック(スプライト、テキスト、図形など)を描画することができます。
Display Surface: display surfaceは特別なSurfaceで、これはPygameウィンドウまたはスクリーン上に表示されるメインの画面です。pygame.
【Python/Git】pycacheをgit ignoreする
Pythonのパッケージを実行すると、各パッケージに`__pycache__`フォルダーが自動生成されますよね。
ソース管理上邪魔ですよね。
こうすればいいです。
“`:.gitignore
**/__pycache__/**
“`
こうすることにより、全ディレクトリにある`__pycache__`ディレクトリが全てignoreされます。:::note
この記事を読んでいる方は、次の記事も読んでいるのかもしれません
* [とりあえず周りと仕事ができるGitHub入門](https://qiita.com/konbraphat51/items/8d4907bf02cfff518462)
:::
じゃんけんゲーム python
# Python初心者が最初に作るゲーム
python を学習してモチベーションが上がらなくなった人向けにコードをかいてみました
ちょっとpythonを学んだけど次何つくっていいかわからない人向けですエラー処理もfor文も使っていません
最低限の命令文と条件分岐だけで書いたのでツッコミどころ満載ですが逆に初学者がこれより立派なコードが書けたら熟達者は褒めてあげてください。
今回、極力シンプルに関数も使わず書きました最後の end=input(‘お疲れ様でした’) の一文はプロンプトのクローズ防止対策です
“`python:janken.py
import random
bot_data = random.randint(1,3)
print (“じゃんけんをしましょう”)
print (“1が’ぐー’、2が’チョキ’、3が’パー’”)
watasi = input (‘何を出しますか?’)
watasi_data = int(watasi)
kekka = bot_data*10+watasi_data
print(‘結果’)
if kekka ==
【Python】Gmail API を使ってメールを送信する
# Gmail API を使ってみる
[Gmail API のガイド](https://developers.google.com/gmail/api/guides?hl=ja)を参考に Gmail アカウントからメール送信を試した際に、躓いた点について備忘録としてまとめておこうと思います。### サンプルコードをとりあえず実行してみる
[Gmail API ガイドのメール送信](https://developers.google.com/gmail/api/guides/sending?hl=ja)に記載されている「send_message.py」のコードを参考にメール送信を試してみました。
が、ガイドに記載されている以下のコードをコピペして実行してみても、そのままでは動きません。“`python:send_message.py
import base64
from email.message import EmailMessageimport google.auth
from googleapiclient.discovery import build
from go
【GitHub Actions/Python】自動pytestの際に、testsディレクトリ内のモジュールをimportする
## 状況
このようなコードでGitHub Actionで自動テストを運用しておりました。
“`yml:python-tester.ymlname: unit-teston:
push:
branches: [“dev”, “main”]
pull_request:
branches: [“dev”, “main”]jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: [“3.8”, “3.9”, “3.10”, “3.11”]steps:
– uses: actions/checkout@v3
– name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-vers
【Python】モジュール構成規則を考えてみる
## はじめに
`Python`のモジュール設計、難しいですよね。* 何を`__init__.py`でまとめるのか(まとめないと、`import`文がすごく多くなる)
* どのようにモジュールの階層を形成するのか
* `circular import`は避けなければならないという中で、モジュールを上手にディレクトリに配置しなければなりません。
モジュール設計の指針も有名なものはなさそうなので(あればゴメンナサイ)、自分が考えた設計規則を紹介してみたいと思います。## 紹介
:::note
そのまま使い回せる英語表記`markdown`:[GitHubレポジトリへ飛ぶ](https://github.com/konbraphat51/module_rule/blob/main/RULE.md)
:::### 条文(和訳)
詳細は後述です。1. 基本的に下位モジュールに依存してください。メインモジュールをディレクトリ名と同じにして、メインモジュールの下位モジュールはそのディレクトリに入れてください。
1. モジュールAの下位モジュールがある場合は、それらを全て(モジュ
pythonでMeCabを使う
# MeCabのインストール
## pythonでのインストール
“`:install
pip install mecab-python3
“`
## PC本体のインストール
http://taku910.github.io/mecab/#downloadここからダウンロードしてインストールするとwindowsの人は初期設定だと
`C:\Program Files (x86)\MeCab\bin`に`mecab.exe`があるとおもいます# 使ってみる
## 情報を出力
“`python:nomal.py
import MeCabtagger = MeCab.Tagger(“”)
input = “記事を書く”
output = tagger.parse(input)print(output)
“`
“`:出力
記事 名詞,一般,*,*,*,*,記事,キジ,キジ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
書く 動詞,自立,*,*,五段・カ行イ音便,基本形,書く,カク,カク
EOS
“`
## わかち書き
>わかち書き(わかちがき)
【Django】DBから取得したデータ&必ず任意のデータを一つ加えたリストからランダムに取り出す
# 概要
Djangoにて、ORMにより特定の条件に一致するデータをDBテーブルから取得し、任意のデータを必ず一つ加えた上で、その中からランダムに一つの要素を取り出すコードを実装しました。モデル定義は以下。
“`py
class Country(models.Model):
area_id = models.IntegerField(null=True, blank=True)
name = models.CharField(max_length=100, null=True, blank=True)
capital = models.CharField(max_length=100, null=True, blank=True)class Meta:
db_table = ‘country’
“`DBテーブルは以下のように登録してある前提です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/bdcc77
特定のディレクトリ下のファイルを4桁の連番に名前を変更する
# 名前を4桁の連番に変更する
“`python:main.py
import os
import globabs_path = os.path.dirname(__file__)
# ディレクトリのパスを指定する
dir_path = str(abs_path) + “/moto_kopikopi”# 画像ファイルの拡張子を指定する
extensions = [“jpg”, “png”, “gif”]# 連番の初期値を指定する
num = 1# 指定したディレクトリにある画像ファイルを検索する
for ext in extensions:
files = glob.glob(os.path.join(dir_path, “*.” + ext))
for file in files:
# ファイル名と拡張子を分割する
base, ext = os.path.splitext(file)
# 4桁の連番にフォーマットする
new_name = “{:04d}”.format(num) +
POSCARからneighbors listの作成(ログ)
# 目標設定
各原子について,ある距離以内の隣接原子がリスト化されたテキストファイルPOSCAR.nnlistを作成する.## 流れ
1. poscar2nnlistをビルドする.
2. neighbors listを作成したいPOSCARファイル一覧のパスを取得する.
3. 2. のPOSCARファイルからPOSCAR.nnlistファイルを作成する.## スクリプトの説明
* setup_poscar2nnlist.sh
:poscar2nnlistを環境に合わせてビルドするシェルスクリプト.
* get_C_O_existed_poscar_path_list.sh
:元素種C, Oを含むPOSCARファイル(フォルダ)のリストを得るスクリプト.
入力:
出力:
* mk_nnlist_by_poscar2nnlist.py
:poscar2nnlistとPOSCARファイルからPOSCAR.nnlistを作成するスクリプト.
* 準備:poscar2nnlist
* 入力:POSCARのパスのリスト,(Neighobrsとして設定する
パスワード作成 (paizaランク C 相当)
https://paiza.jp/works/mondai/string_primer/advance_step6
>K さんは paiza のアカウントを作成することにしました。そのためには、パスワードの設定が必要>なことがわかりました。
>そこで K さんは忘れないように、次のようなルールにのっとって N 文字のパスワードを設定するこ>とにしました。
>
>・ ルール
>K さんは N 文字のうち、 Q 文字だけ覚えておく文字を決めておく。
>具体的には n_i 文字目を c_i とだけ決めて、残りの全ての文字を C にする。
>
>K さんの設定したパスワードを当ててください。という問題。
“`py
N = int(input())
Q = int(input())
for i in range(Q):
A =[list(map(str,input().split()))]
C = input()
for i in range(1,N):
if i == A[i-1][0]:
print(A[i-1][1])
else
重複の削除 (paizaランク C 相当)
https://paiza.jp/works/mondai/string_primer/advance_step5
入力したものから重複を削除して出力せよという問題。
集合を使えばいけるってのは知ってたけど、ちょっとpythonでのやり方があやふやだったので
調べながら復習
知識として知っておくべきところは下記
・集合をつくるには`set()`
・集合の中の要素に同じものがあるかどうかを調べるには`not in`か`in`
・集合に追加するときは`add(element)`
(以下参考。詳しくは使う時に)
・要素を削除: `discard()`, `remove()`, `pop()`, `clear()`
・和集合: `|`演算子, `union()`
・積集合: `&`演算子, `intersection()`
・差集合: `-`演算子, `difference()`
・対称差集合: `^`演算子, `symmetric_difference()`・ちなみに集合をつくってそれをソートすればいいやんと考えたけど、その場合、問題と意図が違う結果になる。つまり今の文字の順番のまま
Python boto3を使ってS3からオブジェクトの一覧を取得する
今回はboto3でAWSを操作する最初の1歩ということでs3からオブジェクトの一覧を取得するまでやっていこうと思います。
前提としてPythonはインストール済みということで解説していきます。# boto3の使い方
他のライブラリと同じくインストールが必要です。コマンドプロンプトでインストールします。
“`python3:ライブラリインストール
pip3 install boto3
“`
AWSリソースへアクセスするためにアクセスキー、シークレットアクセスキーが必要になります。
今回はAWSCLIがインストールされているため aws configureコマンドで設定しています。これでインストールができたので、boto3を呼び出して記述していくだけです。
## boto3の記述方法
boto3の呼び出し方は以下の通りです。基本は以下の3つのステップになります。
1インポート
2クライアント、リソースオブジェクトの作成
3利用したいファンクションの呼び出し### インポート
インポートは以下の様に記述します。
“`python:boto3インポート
impo
【Python】dictionaryを使う前に、超便利メソッドを知ってくれ!エラーハンドリングはもうしなくていい!
どうも。ちょっぴり便利なコードを1000年集め続ける、おたくの[フリーレン](https://frieren-anime.jp/)です。
[東大GDSC](https://twitter.com/GDSCut)アドベントカレンダーへの寄稿です## よくないね
辞書型でデータを管理しているとき、こんなコード書いていませんか?
“`python: よくないね.py
try:
#keyが存在しなかったらエラーが出る!!!
nanka_tsukau(dictio[key])
except KeyError:
#key無し???(nanka_tsukau()のエラーの可能性も)
nanka_tsukau(0)
“`要するに、`key`が`dictio`に登録されているかもしれないし、登録されていないかもしれない。だから`key`がないときのエラーをハンドリングして、0を明示的に記述した方のコードを書く。
こんな面倒なこと、もうやめませんか?
## いいね
### 良いメソッドを紹介しましょう
#### 取得
`get(キー)`メソッドが便利です。
[Python3 / caffe] python3でcaffeを動かすためのdocker imageをbuildする
# 1. 環境
“`bash:bash
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04 LTS
Release: 20.04
Codename: focal
$ docker –version
Docker version 20.10.17, build 100c701
$ docker compose version
Docker Compose version v2.6.0
“`
||version|
|:-|:-|
|Host machine|Ubuntu 20.04|
|Docker|20.10.17|
|docker compose|v2.6.0|です。
# 2. 頼りにした記事
このあたりのDockerfileを元にimageを作成してみる。
https://github.com/ashokponkumar/caffe-py3/blob/master/Dockerfile
htt
Python イテラブル・イテレーター・ジェネレータ式を簡潔に
Pythonを学ぶなかで、`イテラブル`、`イテレーター`、`ジェネレータ式`という存在に直面しました、、
これらはデータの処理やアルゴリズムの実装において非常に重要なものだそう。
本記事では、これらの概念をなるべく簡潔にまとめてみました。# イテラブル (Iterable)
イテラブルは、メンバーを一つずつ返すことができるオブジェクトです。
リスト、タプル、文字列、辞書など、Pythonの多くの組み込みデータ型がイテラブルです。### 特徴
– forループで繰り返し処理が可能
– イテレーターに変換できる(`iter()`関数を使用)。### 例
“`py:python
my_list = [1, 2, 3]
for item in my_list:
print(item)
#->1
#->2
#->3
“`
### イテラブルではないもの
イテラブルでないとは、forループなどを使い、その要素を一つずつ取り出すことができないことを意味します。#### 整数 (int)
整数は単一の数値を表すため、イテラブルではありません。例えば、for i in 5