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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

5回答

1063閲覧

python 計算処理について小数が実行できません

no_way

総合スコア13

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/11/08 12:27

前提・実現したいこと

pythonにおいて,数字を次第に減らしていくプログラムを実行したいのですが,整数ではうまくいくところが小数にするとnone表示となってしまいます。なぜでしょうか。

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

none

該当のソースコード

python

1def pay_with_coins( amount ): 2 payment = int(amount) 3 list = [0,0,0,0,0,0,0,0] 4 while(payment != 0): 5 if payment >= 2: 6 list[0] = payment // 2 7 payment -= (payment//2)*2 8 continue 9 elif payment >= 1: 10 list[1] = 1 11 payment -= 1 12 elif payment >= 0.5: 13 list[2] = 1 14 payment -= 0.5 15 return list 16 17print(pay_with_coins(3.5))

試したこと

def pay_with_coins( amount ):
payment = int(amount)
list = [0,0,0,0,0,0,0,0]
while(payment != 0):
if payment >= 5:
list[0] = payment // 5
payment -= (payment//5)*5
continue
elif payment >= 2:
list[1] = 1
payment -= 2
elif payment >= 1:
list[2] = 1
payment -= 1
return list

print(pay_with_coins(8))

このように整数で実行してみると可能となるので小数部分に問題があるのではと考えたのですがわかりません。

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

python3.7使用

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

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

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

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

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

guest

回答5

0

このページでコードの動きをよく確認ください。
Forward>ボタンで進み、<Backボタンで戻ります。

投稿2018/11/08 13:01

can110

総合スコア38266

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

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

no_way

2018/11/08 14:16

とても参考になるサイトを教えていただきありがとうございます。 細かく分析してみたいと思います。
guest

0

elif payment >= 0.5: list[2] = 1 payment -= 0.5 return list

elif payment >= 0.5: list[2] = 1 payment -= 0.5 return list

が正しいのでは?

投稿2018/11/08 12:56

katoy

総合スコア22324

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

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

no_way

2018/11/08 14:15

return の位置を変更しても答えが変わりませんでした。
guest

0

return文があるところが読みこまれるときのpaymentは何になりますか?

投稿2018/11/08 12:44

編集2018/11/08 12:46
mkgrei

総合スコア8560

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

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

no_way

2018/11/08 14:15

申し訳ありません。 当方初心者のため,どのような結果を表示することを求められているのか理解しきることができませんでした。
guest

0

ベストアンサー

payment = int(amount)

この文の後ろに
print(payment)
いれて、いくらになるのか見てみなさい

投稿2018/11/08 12:43

y_waiwai

総合スコア87774

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

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

no_way

2018/11/08 14:12

intでは整数にのみ処理が可能ということなんですね。 勉強になりましたありがとうございます。
y_waiwai

2018/11/08 14:15

他の回答も見ておいてください # みごとにそれぞれ別の問題のところを指摘してます
guest

0

これは自分で書いたプログラムではなく、自分ではプログラムの意味がわかっていないということでしょうか?

1.整数でない値を与えても、整数に切り捨ててから実行されます
2.そのため、elif payment >= 0.5:の条件が真になることはないので、return listが実行されることはありません。関数の戻り値は常に`None`になります
3.動作がおかしいことの原因ではありませんが、構造が変です

投稿2018/11/08 12:43

otn

総合スコア84538

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

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

no_way

2018/11/08 14:13

自分で書いたのですが,始めて間もないため変な構造になっていると自覚しています。 整数と小数の扱いが混同していました,ご指摘ありがとうございます。
otn

2018/11/08 14:21

そうですか。 何を思って payment = amount でなく payment = int(amount) と小数点以下を切り捨てることにしたのでしょうか? payment = amount に書き直して、 return list のインデントレベルをwhileに揃えれば動きます。 構造がおかしいのは取りあえずそのままでも良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問