フローチャート
沖縄旅行にオズビジョンの一員として行ってきた。
とりあえず、団体で行ってあんなに楽しい旅行は初めてだった。
初日から、テンションFull-Maxで飲みすぎたのも初めて、旅行先での二日酔いも初めて、タンクトップでのサプライズ内定式も初めて(新卒としては、最初で最後...)、あんなに大勢の前でのカラオケも初めて、アクティブな旅行も初めてだった。
そんなに色々なことをすでに沢山経験させてもらっているし、いい人に囲まれている。ここまで頑張ってきてよかったと思う反面、内定式で宣言した通り、みんなをリードしていけるようなエンジニア(英語の話せるマッスルエンジニア)になるためにこれからのバイトや研究、遊び以外の空いた日は最低でも10時間程度は、エンジニアになるための勉強やビジネスの勉強に充てようと思う。
英語習得には1000時間かかるといわれていて、プログラミングの習得には300時間かかるといわれている。なので、この通りに進めることが出来れば、入社までにPythonを完璧に仕上げることが出来る!!!
また、それ以外にもアルゴリズムの勉強や、何かサービスもしくはアプリの開発などやり方は全然わからないけれど、成功するか完成できるかは置いておいて、やってみようと思う。しかし、目標は、どんなヘンテコなアプリでも完成させること。
それこそ、電卓で計算したら結果が全てランボーで返ってくる必ず受けて速攻飽きられてしまうアプリなんかでもいい。とりあえず、やろう!!!
オズビジョンに出会えて、心底良かったと思っています。
橋本さんには、ありがとう。と何度でも言いたいです!!!
またすぐに会えると思いますが、入社まで、入社後も、それより後でも、一緒に高めあっていける仲間でいようという言葉しっかり大切に刻んでおきます。
そのためには、越えていける勢いでこれからも前のめりで、ぶっとんで行こうと思います!!! 何事にも全力で!!!
本題ですが、今まであまりフローチャートを描いたことが無かったので意識して書くようにしています。なんか、プログラムの動きが分かりやすい。あ、そのためにあるのか。。。 以上です
これはたぶん題名を変えた方がよかったと思うが、エンジニアブログであり、勉強の軌跡を残すためなので、ご了承下さい。。。
基本の応用
AIとのチャットのプログラム作成で行き詰ってしまったので、初心に戻るために偶々見つけた無料でプログラミング学習教材を読むことが出来るサイトで、基本からの見直し。英語学習や筋トレと同じで、高いレベルに挑戦したら必ず壁や難題にぶち当たる。そこでそのレベルに挑み続けるというのも一つの手段だけれども、決して後ろを振り返るのではなく今まで手にしてきた地図に見落としはないのか再度確認しに戻る方が力になると思う。人間は、良い意味でも悪い意味でも欲深い生き物であるから、先へ急ごうとするけれども、そうするといずれガタが来る。そうならないためにも手にした地図を参考に行き来し、最強装備を手に入れて、先に進む。最強装備を手に入れる冒険に出かけている間にレベルアップするから、レベルは気にせずに、ひたすら自分を高めることに全力を尽くすのみ。
今回の作成プログラムの内容は、名前とパスワードが一致したらアクセスを許可したという一文を表示するというシンプルなものであったが、少し教材の内容を個人的に変更し正確に名前とパスワードを入力するまで、何度も確認し続けるものに変更して、フローチャートを作成した。
# This is just a program in order to check who you are.
print('Hello!')
print('What is your name?')
myName=input()
if myName=='Takuya':
print('Hi ' + myName + ' What\'s up?')
print('What is your password?:')
while myName!="Takuya":
print("Try again.")
myName=input()
if myName=="Takuya":
print('Hi ' + myName + ' What\'s up?')
print('What is your password?:')
myPassword=input()
if myPassword=="12345"':
print('Access Granted.')
while myPassword!='12345':
print('Wrong password.Try Again.')
myPassword=input()
if myPassword=='12345'
print('Access Granted.')
これで想像したものができあがった。これをさらに応用して、名前とパスワードを登録するプログラムを作成し、そのデータをデータベースに保存。そして、今回作成したようなプログラムとの関連付けを行い、データベースにアクセスし、登録内容との照合を行えばよくあるサインアップとログインのシステムが出来上がりそうだ。
人工知能(2)
<program>
class Dictionary:
def __init__(self):
self.random=
rfile=open('dics/random.txt','r',encoding='Shift-JIS')
r_lines=rfile.readlines()
rfile.close()
self.random=
for line in r_lines:
str=line.rstrip("\n")
if(str!=""):
self.random.append(str)
pfile=open('dics/pattern.txt','r',encoding='Shift-JIS')
p_lines=pfile.readlines()
pfile.close()
self.new_lines=
for line in p_lines:
str=line.rstrip("\n")
if(str!=""):
self.new_lines.append(str)
self.pattern={}
for line in self.new_lines:
ptn,prs=line.split("\t")
self.pattern.setdefault("pattern",).append(ptn)
self.pattern.setdefault("phrases",[]).append(prs)
<result>
ValueError: not enough values to unpack (expected 2, got 1)
前回の人工知能の記事での疑問点は解消し、かなり頭の悪い人工知能とのチャットを完成させることが出来た。その人工知能に感情を盛り込む勉強をしているが、エラーが出てきてしまい、解決が難しい。恐らく、プログラムの中にreturnか何かが1つ足りないことが原因だと思う。
前回の投稿からかなり期間が空いたが、その中で一つ気づいたことが。プログラムの問題は期間を空けて取り組むと解決することが多いなと思った。
人工知能
from ptna import *
"""対話ログをリストボックスに追加する関数
@str 入力文字列または応答メッセージ
"""
lb.insert(tk.END, str)
"""ピティナのプロンプトを作る関数
"""
p=ptna.name
if(action.get())==0:
p += ":" + ptna.responder.name
return p + "> "
"""対話を行う関数
・Ptnaクラスのdialogue()を実行して応答メッセージを取得
・入力文字列および応答メッセージをログに出力
"""
value = entry.get()
#入力エリアが未入力の場合
if not value:
response_area.configure(text="なに?")
#入力されていたら対話オブジェクトを実行
else:
#入力文字列を引数にしてdialogue()の結果を取得
response = ptna.dialogue(value)
#応答メッセージを表示
response_area.configure(text=response)
#入力文字列引数にしてputlog()を呼ぶ
potlog("> " + value)
#応答メッセージを引数にしてputlog()を呼ぶ
putlog(prompt() + response)
#入力エリアをクリア
entry.delete(0, tk.END)
# 画面を描写する関数
#==============================================================================
root = tk.Tk()
#ウィンドウのサイズを設定
root.geometry("880x560")
#ウィンドウのタイトルを設定
root.title("Intelligent Agent : ")
#フォントの用意
font = ("Helevetica", 14)
font_log = ("Helevetica", 11)
menubar = tk.Menu(root)
root.config(menu = menubar)
#「ファイル」メニュー
filemenu = tk.Menu(menubar)
menubar.add_cascade(label = "ファイル", menu = filemenu)
filemenu.add_command(label = "閉じる", command = root.destroy)
#「オプション」メニュー
action = tk.IntVar()
optionmenu = tk.Menu(menubar)
menubar.add_cascade(label = "オプション", menu = optionmenu)
optionmenu.add_radiobutton(
label = "Responderを表示",
variable = action,
value = 0
)
optionmenu.add_radiobutton(
label = "Responderを表示しない",
variable = action,
value = 1
)
canvas = tk.Canvas(
root,
width = 500,
height = 300,
relief = tk.RIDGE,
bd = 2
)
canvas.place(x=370, y=0)
response_area = tk.Label(
root,
width = 500,
height = 10,
bg = "yellow",
font = font,
relief = tk.RIDGE,
bd = 2
)
response_area.place(x=370, y=305)
frame = tk.Frame(
root,
relief = tk.RIDGE,
borderwidth = 4
)
entry = tk.Entry(
frame,
width = 70,
font = font
)
entry.pack(side = tk.LEFT)
entry.focus_set()
#ボタンの作成
button = tk.Button(
frame,
width = 15,
text = "話す",
command = talk
)
button.pack(side = tk.LEFT)
frame.place(x=30, y=520)
lb = tk.Listbox(
root,
width = 42,
height = 30,
font = font_log
)
sb1 = tk.Scrollbar(
root,
orient = tk.VERTICAL,
command = lb.yview
)
#横のスクロールバーを作成
sb2 = tk.Scrollbar(
root,
orient = tk.VERTICAL,
command = lb.xview
)
lb.configure(yscrollcommand = sb1.set)
lb.configure(xscrollcommand = sb2.set)
lb.grid(row = 0, column = 0)
sb1.grid(row = 0, column = 1, sticky = tk.NS)
sb2.grid(row = 1, column = 0, sticky = tk.EW)
root.mainloop()
# プログラムの起点
#==============================================================================
if _name_ == "_main_":
run()
File "ptnaForm.py", line 179, in <module>
if _name_ == "_main_":
NameError: name '_name_' is not defined
人工知能開発へ
Pythonを一通り勉強し終わったので、人工知能を開発するために、参考書の写経を始め、プロトタイプの作成を短時間で終わらせることが出来た。
<prototype.py>
"""
"""Ptnaオブジェクトの名前をnameに格納
Responderオブジェクトを生成してresponderに格納
@param name Ptnaオブジェクトの名前
"""
self.name=name
self.responder=Responder("What")
"""応答オブジェクトのresponse()を呼び出して
応答文字列を取得する
戻り値 応答文字列
"""
return self.responder.response(input)
"""応答オブジェクトの名前を返す
"""
return self.responder.name
"""Ptnaオブジェクトの名前を返す
"""
return self.name
"""応答クラス
"""
def __init__(self, name):
"""Responderオブジェクトの名前をnameに格納
"""
self.name=name
"""応答文字列を作って返す
"""
return "{}ってなに?".format(input)
#実行ブロック
#########################################################################################################################
"""ピティナのプロンプトを作る関数
戻り値 "Ptnaオブジェクト名:応答オブジェクト名 > "
"""
return obj.get_name() + ":" + obj.get_responder_name() + "> "
ptna = Ptna("ptna")
inputs = input(" > ")
if not inputs:
print("バイバイ")
break
response = ptna.dialogue(inputs) # 応答文字列を取得
print(prompt(ptna), response) # プロンプトと応答文字列をつなげて表示
"""
"""Ptnaオブジェクトの名前をnameに格納
Responderオブジェクトを生成してresponderに格納
@param name Ptnaオブジェクトの名前
"""
self.name=name
self.responder=RandomResponder("Random")
"""応答オブジェクトのresponse()を呼び出して
応答文字列を取得する
戻り値 応答文字列
"""
return self.responder.response(input)
"""応答オブジェクトの名前を返す
"""
return self.responder.name
"""Ptnaオブジェクトの名前を返す
"""
return self.name
"""
self.name=name
""" オーバーライドを前提としてresponse()メソッド
戻り値 空の文字列
"""
return " "
"""応答オブジェクトの名前を返す
"""
return self.name
"""オウム返しのための行うサブクラス
"""
def response(self, input):
""" 応答文字列を作って返す
"""
return "{}ってなに?".format(input)
""" ランダムな応答のための行うサブクラス
"""
def __init__(self, name):
""" Responderオブジェクトの名前を引数にして
スーパークラスの__init__()を呼び出す
ランダムに抽出するメッセージを格納したリストを作成
"""
super().__init__(name)
self.responses=["いい天気だね","君はパーリーピーポー","10円拾った"]
""" 応答文字列を作って返す
戻り値 リストからランダムに抽出した文字列
"""
return (random.choice(self.responses))
> こんにちは
ptna:Random> いい天気だね
> そうだね
ptna:Random> 君はパーリーピーポー
> まじで
ptna:Random> 10円拾った
> 良かったね
ptna:Random> いい天気だね
> 夜だよ
ptna:Random> いい天気だね
> そうだね
ptna:Random> 10円拾った
> 良かったね
ptna:Random> 10円拾った
>
バイバイ
ライフガード Becoming a lifesaver
東京へ引っ越し後の資金を調達するため。また、欲しかったモノを買うために、プールの監視員+トレーニングジムのトレーナーのアルバイトを始めた。
まだ、始めて3日目だけれど、プールの仕事は、ほぼほぼ覚えてしまってスムーズに仕事が出来るようになった。スタッフなので、トレーニングジムとプールがタダで使えるから、もう至れり尽くせり。
本題は、ここでは無くて、プールの監視員として働いている以上、事故を目撃する可能性がある。その為、溺者の救助、傷病者への手当て、心肺蘇生や人工呼吸、AEDなど。普通に生活していたら、経験出来ずに、身につくこともない。
しかし、僕はアルバイトと言う形ではあるが、人命救助の指導を受けている。
本当にここで仕事を始めてよかったと思う。何か起きた時に傍観者でいる自分は想像出来ないし、何か起きた時には即座に行動に移せる男になりたい。
ここまで自分は、色々な人に支えられて生きてきた。確かに、酷い事をしている人もいる。人を傷つける人もいる。
自分は、空が飛べるようなヒーローにはなれないけれども、ヒーローと呼ばれたい訳でもないけれども、ただ人を救える立場でありたい。ただそれだけ。人を傷つける事しか出来ない人間たちには出来ない、人を救うと言う事。これは、自分の使命だと肝に命じて。今ここに五体満足で生きていられる事に感謝をして、これからも全力で人命救助の指導を受けて行きます。
そして、どんな形であろうと、人を救える人を増やしていきたいです。しっかり覚えて、家族、大切な人たちをしっかり護れるように。体づくりも!
さて、プログラミング勉強しますか!!!
人は感謝を忘れてしまった途端、人ではなくなる。