質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

4828閲覧

python3 での簡単な自動販売機ツールについて(初心者です)

sakku777

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/05/28 13:12

編集2018/05/30 04:55

**### 前提・実現したいこと
簡単な自動販売機ツールを作ろうと思ってますが、エラーが出てしまい、困っています
**
ここに質問の内容を詳しく書いてください。
1、残金(数値)を入力し、残金を表示
2、リスト内の商品を入力
3、ディレクトリの金額を反映し、残金-商品代金とする
4、while文を使い、2の作業から残金が0になるまで繰り返す。

これを行おうと思っています。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "C:\Users※※※伏せてます※※※\python勉強\練習場.py", line 18, in <module> syouhin_kingaku = int(menu_list.get(syouhin))#購入商品の金額をsyouhin_kingakuに代入 TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType' ### 該当のソースコード menu_list = {"コーヒー(300円)":"300","牛乳(200円)":"200","水(100円)":"100"} nyuukin = input("お金を入れて下さい>>") zankin = int(nyuukin)#入金した金額の値を数値に直す while (zankin) > 0:#残金が0になるまで繰り返す print("残金は{}円です".format(zankin))#入力した残金を表示 print("以下のメニューから商品を選択してください\n------------------") print("\n".join(menu_list))#メニューリストを表示 syouhin = input("------------------\n>>")#購入商品を入力 print("{}を購入しました".format(syouhin)) syouhin_kingaku = int(menu_list.get(syouhin))#購入商品の金額をsyouhin_kingakuに代入 zankin = (int(syouhin_kingaku) - int(zankin))#残金を(残金-商品金額)の値にする if zankin < 1: print("お金が無くなりました")

試したこと

int関数~~と出ているように思って、いろいろと文字列と数値を足し算していないか、
int関数が抜けていないかなどを気にしているのですが、改善されません。

補足情報(FW/ツールのバージョンなど)

python3を使っています。

python勉強し始めたばっかの初心者で、的外れな質問かもしれないですが、
お助けいただければ幸いです。
ネットで自動販売機ツールを作っているサイトをいくつか見たのですが、
どうにもわからなく.....
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2018/05/28 13:34 編集

shouhinにどのように値を与えているのか、その部分のコードを追記してください。理想的にはコード全体を載せるのが良いです。(追記:ちょっと勘違いしていた... shouhinがNoneなわけじゃないですね。)
sakku777

2018/05/30 04:56

ご回答、アドバイスいただきありがとうございました。更新いたしました。
guest

回答2

0

ベストアンサー

menu_listって変数名なのに、dictですか・・・。

dict.get()は存在しないキーを引数にしたときNoneを返します。出ているエラーは、翻訳しますと

int()の引数は文字列かバイトか数字の必要があるよ、あなたが渡したのはNoneだよ」

というものです。

よって存在しないキーを引数に渡したときに外側のint()にNoneが渡らないように工夫するか、そもそも存在しないキーを引数にしてget()を呼ばないように工夫するなどの処置が必要になりますね。

投稿2018/05/28 13:26

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakku777

2018/05/30 05:01

ご回答いただきありがとうございます。 変数名の付け方も勉強中なのですが、ご指摘に関して自分でも『確かに』と思いました。 エラー内容についてわかりやすくご説明いただきありがとうございます。 『よって存在しないキーを引数に渡したときに外側のint()にNoneが渡らないように工夫』 この点について少し勉強しようと思います。
guest

0

以下のコードに書き換えて解決しました。

元々自分がdictに 「水100:100」としていたのに
購入商品の入力の際に『水』としか入力してませんでした(冷静に考えると酷い間違えかたですね....)

hayataka2049さんの『dict.get()は存在しないキーを引数にしたときNoneを返します』と
ご教示いただいたことをよく考えて気づきました。

皆様ありがとうございました。

#自動販売機ツール

menu_dict = {"コーヒー":"300","牛乳":"200","水":"100"}

nyuukin = input("お金を入れて下さい>>")

zankin = int(nyuukin)#入金した金額の値を数値に直す

while (zankin) > 0:#残金が0になるまで繰り返す
print("残金は{}円です".format(zankin))#入力した残金を表示
print("以下のメニューから商品を選択してください\n------------------")
print("\n".join(menu_dict))#メニューリストを表示
syouhin = input("------------------\n>>")#購入商品を入力
print("{}を購入しました".format(syouhin))

syouhin_kingaku = (menu_dict.get(syouhin))#購入商品の金額をsyouhin_kingakuに代入 zankin = zankin - int(syouhin_kingaku) if zankin < 1: print("お金が無くなりました")

投稿2018/05/30 23:28

sakku777

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問