【Python】プラスとマイナスを反転させる
前回行った時間から、1日経過していたら実行する…
のような完全自分用アプリを作っていて、
それを改良している時に
この数字をそのまま簡単にマイナスに出来ないかな…!!!!
となることがあった。
一週間以上前のことで、なぜそうしたかったのかは忘れてしまったのだけど
簡単反転方法だけここに記しておく。
文系でも数字が苦手でも簡単
私はそもそも算数から苦手なのです。
そんな私でも簡単。一行。覚える必要なし。
プラスをマイナスにする
skinAge = 15 skinAgeDream = -skinAge print( 'あなたの肌年齢は' + skinAgeDream + '歳です' ) # 出力結果 # あなたの肌年齢は-15歳です
このメモ分かりにくい。
つまり、
a = 30 b = -a print( b ) # 出力結果 # -30
ということです。
JSON形式とはなんなのか無視してたけど向き合った
拡張子.jsonっていうのがよく出てくる。
「なんか設定とか書いてるやつでなんかやるときに付いてくるややこしい大人のファイル」という認識で
私なんかに理解できるわけない、と思い
ほぼ無視してました。
理解せぬまま見よう見まねでちょろっといじったりしてて、
ずーっと気になったまま放置してた。
やっと向き合う気になったので、
ここに記しておく。
JSONとは
「JavaScript Object Notation」の略でデータ定義言語らしいです。
……えーっと、ちょっとよく分からないんですが
XMLとかありますよね。
私はこれも無視し続けてたんですが、
これもデータ定義言語。
最近ではJSONが使われるケースが増えてるってことです。
「JavaScript」と名前に付くくらいなので、
JavaScriptに深い関連がありそう。
JSに触れたことがある人は中身を見たらすぐにどういうものか分かるはず。
JSON記述方法
JavaScriptと変わりなく書けます。
Pythonで言うところの辞書型。
{ “title”: "プログラミングに足を突っ込む30女", “writer": “satsukiin”, “age”: “30s” }
こんな感じでオブジェクトは全体を{}で囲んで
“キー名”:”値” と表記する。
要素同士は「 , 」で区切る。
例えば…
{ “user1”: { “name”: “団長”, “age”: 45, “gender”: “男” }, “user2”: { “name”: “クロ”, “age”: 42, “gender”: “男” }, “user3”: { “name”: “ヒロ”, “age”: 42, “gender”: “男” } }
某大サーカス団とは一切関係ありません、偶然です
としておけば、
団長とクロとあともう1人誰だっけ?
となっても、
user3のnameを指定すればちゃんともう1人の名前が出てくるわけです。
我ながら分かりにくい例え。
ちなみに配列も
[]で囲んで「 , 」で区切れば入れ込めます。
JSONをPythonに読み込んで使う
JSONデータの読み込み
まず最初にJSONを使うライブラリをインポート。
import json
他のライブラリもだけど、
importは最初に書いておく。
そして、
a = open( ‘yasuda.json’ ) b = json.load( a ) print( b ) #実行結果▼ #{“user1”: {“name”: “団長”,“age”: 45,“gender”: “男”},“user2”: {“name”: “クロ”,“age”: 42,“gender”: “男”},“user3”: {“name”: “ヒロ”,“age”: 42,“gender”: “男”}}
yasuda.jsonに深い意味はありません。
最初のopenでファイルを開いてaに代入。
次でaに入ったJSONをロードします。
プリントすると、ちゃんとyasudaが出てきます。
【Python】リストに関する注意点とメモ
新しく知ったこと。(たぶん超初心者用)
リストを複製する際の注意点
リストを通常方法でコピーしたら、別物として扱われず、変更内容もコピーされてしまう。
colors = ["red", "blue", "green"] colors_copy = colors colors_copy[0] = "pink" print( colors_copy ) print( colors ) # 出力結果 ▼ # ["pink", "blue", "green"] # ["pink", "blue", "green"]
colors_copyしか変更していないのに、
コピー元のcolorsの方も変更されている。
これを、変更が適用されないようにするには、
リストを代入する時にcolors_copy = colors[:]とすれば良い。
[:]を付けると別物として扱ってくれるみたい。
colors = ["red", "blue", "green"] colors_copy = colors [:] colors_copy[0] = "pink" print( colors_copy ) print( colors ) # 出力結果 ▼ # ["pink", "blue", "green"] # ["red", "blue", "green"]
for文でリストのインデックスも取り出す
今までの私はfor文で何度目のループかカウントしたかった時は全て
ループ内でcnt += 1として、カウント用の変数を作っていた。
だけどもインデックスを取り出せる、
enumerate()関数というものがあったらしい。
インデックス取り出せたらこの変数必要ないね…!!
使い方も簡単だった。
for 変数1, 変数2 in enumerate(リスト名) :
これだけ。
変数1にはインデックス番号(リストの添え字番号)が入り、
変数2には値が入る。
実際の使用例▼
colors = ["red", "blue"] for index, value in enumerate( colors ) : print( index, value ) # 出力結果 ▼ # 0 red # 1 blue
二次元リストをforで取り出す
二次元っていう考え方が苦手で、辞書に逃げがちなんだけど
他の言語でも開発現場でも二次元リストはよく使われているらしい。
でもPythonの二次元リストはforで回せば取り出すの簡単そう…!
これに慣れてすぐに理解できる癖をつけてから進めると楽かもしれない。
numbers = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] for a, b, c in numbers : print( a, b, c ) # 出力結果 ▼ # 1 2 3 # 4 5 6
【はてなブログ】ソースコードを色付け−−はてな記法
他の人のブログを見ると、みんなソースコードがソースコードっぽくなっている。
print ("憧れのやつ")
どうやるのこれ??
と思って調べたらこれが出てきた。
はてな記法というやつを使えば、簡単に出来るらしい!
ヘルプ内にも書いてるし、このまま書けばいいだけじゃん
と思うかもしれない。
私もそう思っていた。
だけど、
全然できない!!!!
多分他の人の倍、時間がかかった…
私みたいな人がいたら、参考にしてください…
いないと思うけど…
はてな記法を使う
記述方法をはてな記法に設定する方法は、検索したらいっぱい出てくるので簡単に済ませる。
記事を書く編集ページで左上の『プレビュー』の横の『編集』のところから
『はてな記法』を選ぶ。
以上。
ソースコードを色付けする
>|python| print('憧れのやつ') ||<
これをそのまま書くと、実際の記事では
print('憧れのやつ')
↑こうなる。
pythonの部分は、違う言語を使うのなら変える必要がある。
ここで対応ファイルライプ一覧が見れる↓
ソースコードを色付けして記述する(シンタックス・ハイライト) - はてなダイアリーのヘルプ
↑こうなる。
こうなってどうにも出来ない場合は、前後に無駄なスペースが入ってしまっていないかチェックしてみて。
私はこれだった。
時間をすごく無駄にした気がする…
【Python】ランダムな数字を生成する — random
何かとちょいちょい使う機会のあるrandomについてメモがてら書いておく。
random関数とは?
random関数は乱数を生成してくれる。
ランダムで何かをしたいって時に使う関数。
例えば…
- サイコロを1から6までの数字の間で表示させたい。
- 毎回ランダムに違う言葉を表示させたい。
- じゃんけんゲーム
という時に使う。
Pythonでrandom関数を使う
簡単なので使ってみる。
randomモジュールをimportする
まずは最初にインポートしておく必要がある。
importは一番上に書いておく。
import random
これでインポートはオッケー。random関数が使えるようになっている。
print(ramdom.random())
これを実行したら、1.0未満の小数点数が表示されていると思う。
random()だと、0.0以上1.0未満の浮動小数点数の乱数を生成することになっている。
最初のrandomがrandomモジュール
後のrandom()がrandom関数になる。
randomモジュール内の他の関数を使う
randomモジュールには他にも関数があるので、
それを利用して色んなランダムをやってみる。
範囲内の数値をランダムに出力
randint()関数
randint(開始数, 終了数)という風に使う。
引数(aとb)で範囲を設定する。
randintのintは整数値ということなので、
この結果は整数値のみが出力されることになる。
print(random.randint(1,6))
PythonとHerokuで寂しさを埋めるLINE Botを作った
急にLINE Botが作りたい!と思い立ち、ググりまくって作りました。
どうせ作るのなら使えるものがいい!と思ったものの、
何が使えるのか自分でも分かりません。
ただ一つ、私の話を聞いてほしい…と思ったので、
私の話にただただ相槌を打って聞いてくれる私
を作ることにしました。
そうなんだ とか なるほどね! とか言ってくれるやつです。
LINE Developers登録
普段のLINEアカウントで登録する → LINE Developers
- 開発者名:ニックネームでもOK
- 新規プロバイダーを作成:プロバイダーとは、サービス提供者(企業・個人)のこと。開発者名と同じでOK
- チャネル作成:1つのチャネルが1つのBotを表す。新規チャネルを作成する。
LINE Messaging APIを選択する。
LINE Messaging APIの登録
登録作成すると、チャネル一覧に新しく追加されているので、選択して設定画面に進む。
※ググっていると、この登録時にプランの選択があるとよく書かれているが、2019年4月からプランが統合されて、フ リープランでプッシュ通知が使えるようになっている。なので、そのままでOK。
LINE Messaging APIの設定
- 自動応答メッセージ
- 友達追加時の挨拶
利用するかしないか選択できるので選んでおく。 自動応答メッセージは勝手に返信をしてしまう機能なのでオフ、あいさつもオフにしたが、Botの説明のためにオンにし ておいても良いかなと思った。
Webhook送信
必ず、利用するに設定しておく。
Webhook送信でイベントを受け取るので、利用していないとBotとして働かない。
Webhook URL
HerokuのURLを入力するので、今のところは空欄でOK。
こちらも設定しないと動かないので、あとあと出てくるところで必ず設定すること。
Herokuの登録と設定
まずHerokuに登録 or ログインする。
英語だけど、なんとなくで進められる。
ログインしたら、「New」を押すとドロップダウンするので、 「Create new app」で新規アプリを作成。
- App name : 被ってはいけないなので、オリジナルの名前で登録する。
- Choose a region : 「United States」でOK
作成したら、Settingのタブから設定画面へ。
Domains and certificatesの箇所にあるURLに/callbackを最後につけたURLを
LINE Messaging APIのWebhook URLに入力しておく。
https://○○○.herokuapp.com/callback となる。○○○の中には、先ほど設定した「App name」が入る。
ローカルでgitにpushするために
ターミナルで操作するため、
Herokuコマンドとgitコマンドがインストールされていない場合はインストールから始める。
インストールできているかどうかは、バージョンを確認するコマンドで。
$ heroku -v $ git --version
インストールのコマンドは
$ brew install heroku $ brew install git
インストールしたら初期設定が必要。
ユーザ名とメールアドレスを設定しておく。
ユーザ名は自由に設定する。
$ git config --global user.name "ユーザー名" $ git config --global user.email "メールアドレス"
次に、作業を行うディレクトリ(フォルダ)をローカルに作成する。
ターミナルから行わなくてもOK。
$ mkdir line_bot
作成できたら、ターミナルでこのディレクトリの中に入る。
$ cd line_bot
ローカルでHerokuにログイン
$ Heroku login --interactive
で登録メールアドレスとパスワードを聞かれるので、入力する。
--interactiveオプションをつけることによって、ターミナルでログインができる。
つけないと、ブラウザからWebサイトに接続される。
Enter your Heroku credentials: Email: ○○@○○○○ Password: *********
二回目からはEmailアドレスは自動で入るので、enterキーを押すだけで良い。
以下の文字が出てきたらログイン成功。
Logged in as ○○@○○○○
git initとリモートリポジトリ設定
まずはgitの初期ファイルを作る。
$ git init
リモートの設定をする。
$ heroic git:remote -a アプリ名
必要なファイルの作成
必要なファイルを先ほど作成したline_botディレクトリ下に作成する。
設定ファイルの作成
runtime.txt
Pythonのバージョンを記載する▼
python-3.6.8
HerokuでサポートされているPythonバージョンを使う。
サポート情報は → Heroku Python Support
requirements.txt
importするライブラリを記載。
ここへ書いておけば、自動的にHerokuへインストールしてくれる。
Flask==0.12.2 line-bot-sdk==1.8.0
Pythonファイルの作成
main.py
# ライブラリ from flask import Flask, request, abort from linebot import ( LineBotApi, WebhookHandler ) from linebot.exceptions import ( InvalidSignatureError ) from linebot.models import ( FollowEvent, MessageEvent, TextMessage, TextSendMessage, ImageMessage, ImageSendMessage, TemplateSendMessage, ButtonsTemplate, PostbackTemplateAction, MessageTemplateAction, URITemplateAction ) import os import random # フレームワーク(Flask) app = Flask(__name__) #LINE Access Token YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"] #LINE Channel Secret YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"] line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN) handler = WebhookHandler(YOUR_CHANNEL_SECRET) @app.route("/callback", methods=['POST']) def callback(): # get X-Line-Signature header value signature = request.headers['X-Line-Signature'] # get request body as text body = request.get_data(as_text=True) app.logger.info("Request body: " + body) # handle webhook body try: handler.handle(body, signature) except InvalidSignatureError: abort(400) return 'OK' # ここからメッセージイベント @handler.add(MessageEvent, message=TextMessage) def handle_message(event): kyoukans = ["わかるー!", "確かにそうだね", "それめっちゃわかるわ…", "いいと思う!!", "それでそれで!?", "まじかー", "さすが!", "絶対そう", "うん、君が正しい", "うんうん", "やば", "面白い", "草生えるわ","爆笑", "なるほどなー"] kyoukan = random.choice(kyoukans) line_bot_api.reply_message( event.reply_token,TextSendMessage(text= kyoukan) )
kyoukansリストの中から、ランダムに返すだけのBot。
リストの中には、自分が言われたい言葉を山ほど入れよう。
git push
ファイルを作成したら、いよいよファイルをアップロードする。
再びターミナルを操作する。
$ git add . $ git commit -m “コメント” $ git push heroku master
コメントの中は自由。
分かりやすいコメントを入れておく。
これで動くはず。
動かない場合(既読スルーになる)
疑うところ。
- Channel Secretとアクセストークンは正しいか。
- Webhook URLは正しいか。接続確認もしてみる。
- gitのユーザ名とメールアドレスは設定しているか。
- 設定ファイルに記述ミスはないか。
- requirements.txtに必要のないライブラリが記載されていないか。
作ってみた感想
自分が欲しい言葉をくれるから嬉しい。
が、余計に寂しい。
リストの中に"草生えるわ","爆笑"を入れたせいで、
「人生しんどいよねー」と送った時に
「爆笑」と返ってきたのでイラっとした。
次はプッシュ通知も使って何か作ってみたい。
参考にさせていただきました▼
【初心者向け】PythonによるHeroku環境で簡単LINEBot開発 | 技術ブログ | MIYABI Lab
というか複雑なBotを作れる人以外は、
プログラミングが出来なくてもLINE Botを作れるサービスもあるようなので、それで作ってもいいかも。
これとか → LINE@運用ツール【Poster】