雨のち晴れ

北海道在住。緑色のハムスターだハム

pythonの勉強-自動販売機システムの作成

個人でプログラミングの勉強をする際にいつも困ることがある。


なにを作ったらいいかわからない…。


とりあえず書籍やネットを参考にコードを真似て書いてみても、横着なせいかコピペや解答を見たりしてしまう。そのため一つ一つの理解が低いまま、次から次へと進めてしまい、結局自分の理解の範疇を超えてしまうとあきらめてしまいなかなか長続きしない。

素人がプログラミングの勉強をしてみて一番大事に感じたことは目標を設定することだと感じた。

目標を設定する際に注意することは

  • 実現可能な目標にすること
  • 深く意味を求めないこと(とりあえずなにか作りアウトプットする、作ったものが役に立つとか立たないとかは重要ではない)
  • 100%完璧を求めないこと

今回の場合、自動販売機システムの作成を目標とした。


僕は昔から独創性がなく人の真似ばかりして生きてきたのでなかなか作りたいものが浮かばなかった。そこで既存のシステムを選び、それをどうプログラミングで実現するかというプロセスで学習を進めると上手くいく気がする。

実際に作成した自動販売機システムの仕様?(あまりにチープなものなので仕様と言っていいか疑問だけど…)



  • 自動販売機のメニューをテキストファイルから読み込む(一品目一行で記述、品目と金額をapple:110の形で書いておく)
  • 購入したメニューと金額を入力(品目:金額の形で入力する。例 apple:500等)
  • 購入品、入れた金額、お釣りを出力する。

以下が実際に書いたコード

# coding: utf-8
r = open("menulist.txt","r") #自販機のメニューが書いてあるテキストファイルの読み込み
menu = r.read()	#自販機のメニュー
menu_line = menu.split("\n")	#自販機のメニューを行ごとに分割し代入
print(menu_line)

while(True):
	
	print("""please input bevarage menu and insert money!
	
	bevarage menu:money
	
	if you want to close application, please input exit!""")
	
	
	
	input_info = raw_input()
	if(input_info == "exit"):
		break
	purchase_info = input_info.split(":")	#入力情報をコロンで分割しそれぞれpurchase_infoに代入
		 
	if(len(purchase_info)) != 2 or purchase_info[1].isdigit() != True:	#purchse_infoの長さが2じゃない場合、数字が入力されていない場合のエラー処理
		print("error! input is incorrect")
		continue
	
	for menu_info in menu_line:	#メニューの情報をmenu_infoに代入
		word = menu_info.split(":")	#メニューの情報をコロンで分割しwordに代入
		
		if int(word[1]) > int(purchase_info[1]):#入力した金額が購入金額より少ない場合のエラー処理
			print("error! money is not enough!")
			break
		if word[0] == purchase_info[0]:#入力した情報がメニュー内にある場合の処理(購入)
			change = int(purchase_info[1]) - int(word[1])
			print("order:"+ purchase_info[0])
			print("insert_money:"+ purchase_info[1])
			print("change:"+ str(change))
			break

変数名とか英文は適当なのでたぶんめちゃくちゃです。

今回の勉強で感じたこと

  • 変数に値を代入したら型を確認すること、お釣りを計算する時文字型のまま計算しようとして上手くいかなかった。

次回の目標

  • メニューにランダムを追加しランダムを選択した場合はメニュー内からランダムに商品を選ぶ
  • コードをきれいに書く、ただ処理を書いていくのではなくてオブジェクト指向?とやらを意識する