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

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

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

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

Q&A

解決済

2回答

907閲覧

Python 変数の扱い

new_lemonade

総合スコア6

Python

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

0グッド

0クリップ

投稿2020/10/22 02:29

編集2020/10/22 03:04

前提・実現したいこと

pythonの学習を始めたばかり者なのですが、最初の学習として様々な変換式を扱っています。
購入するものに消費税を掛けて、支払金額を表示するプログラムを作成したいのですが、入力する変数の値がマイナスの時に'入力金額が不適切な値です'と表示させ、入力金額が数字でない場合(例えば漢数字など)、'入力金額が不適切です'と表示させたいです。この二つを同時に満たし、なおかつこの両者の場合は税率計算をしないでそこでプログラムがおわるものを作りたいのでご助力お願いします。

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

不適切な数値の場合に不適切と表示させ、そうでない場合は計算結果を表示させたい。

該当のソースコード

import sys
try:
x = input('品物の価格を入力してください:')
x.isdecimal()
x = int(x)
if x <= 0:
print('正しい金額が入力されていません')
sys.exit()
except SystemExit:
pass
except:
print('整数以外が入力されました')
else:
print('支払金額は', round(x * (1.1)), '円です')

試したこと

try exceptでエラーを発生・回収するプログラム(不要なエラーを発生させてるため美しくない)

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

jupyter notebook

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

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

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

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

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

meg_

2020/10/22 02:42

コードを掲載してください。
new_lemonade

2020/10/22 03:05

失礼しました、編集します
meg_

2020/10/22 04:07

既に回答が付いているので、もし次回質問することがありましたら、コードは「コードの挿入」で記入してください。※インデントを表示するため
new_lemonade

2020/10/22 06:34

ご迷惑をおかけしました。今後は必ず気を付けます。
guest

回答2

0

関数を定義すると良いです。returnで脱出できます。

Python

1def main(tax_rate=1.1): 2 x = input('品物の価格を入力してください:') 3 try: 4 x = int(x) 5 except ValueError: 6 print('整数以外が入力されました') 7 return 8 9 if x < 0: 10 print('正しい金額が入力されていません') 11 return 12 13 print(f'支払金額は{round(x * tax_rate)}円です')

なお、数値の判定は正規表現を使っても簡潔でしょう。

Python

1import re 2 3def main(tax_rate=1.1): 4 x = input('品物の価格を入力してください:') 5 if not re.fullmatch(r'-?[1-9][0-9]*', x): 6 print('整数以外が入力されました') 7 return 8 9 x = int(x) 10 if x < 0: 11 print('正しい金額が入力されていません') 12 return 13 14 print(f'支払金額は{round(x * tax_rate)}円です')

コードの貼り方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
Python

特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。

投稿2020/10/22 09:56

編集2020/10/22 10:05
LouiS0616

総合スコア35668

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

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

new_lemonade

2020/10/22 12:31

解答及びコードの件ありがとうございます。関数定義でやるという方法もあるのですね...とても励みになりました。今後も学習を頑張りたいと思います!!
guest

0

ベストアンサー

try-exceptによる方法が美しくないという感性,よくわかります.

私なら,という方法ですが,

python

1import sys 2 3x = input("品物の価格を入力してください:") 4if not x.isdigit(): 5 print('整数以外が入力されました') 6 exit(1) 7print(f"支払金額は{round(int(x) * 1.1)}円です")

とします.isdigitはisdecimalと異なりハイフンも認めません.10進数数値で用いられる数字のみです.よって数値であることと同時に正の数であることを保証できると考えられます.

if文で除外条件を確認し,該当するなら終了.違うならば処理を継続する,というスタイルです.
プログラムの構造としてはelse節に税率計算処理を記述するほうが正しいのでしょうが,Pythonの場合,インデントを深くすると面倒なのでelseを使っていません.

投稿2020/10/22 03:56

ebal

総合スコア62

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

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

new_lemonade

2020/10/22 06:33

ご回答ありがとうございます!! 環境がJupyter notebookなのでそのせいなのもあるかもしれませんが、これを実行すると、  整数以外が入力されました  支払金額は-330円です と返ってきます。exitがifの操作を終わらせただけで、結果的に計算をしてしまうのですがこれはその他の環境であれば支払金額の計算をせずに終わりますか?できれば不適切な値の場合は金額計算をせずにコメントだけ表示するプログラムを作りたいです。
ebal

2020/10/22 06:38

それならばifで場外したあとelse節で金額表示,あるいはその逆ですね. exit(1)はpython インタプリタならば異常終了で制御を端末に戻しますがJupyterの場合は確かにそうなりますか…… 例: ```python import sys x = input("品物の価格を入力してください:") if x.isdigit(): print(f"支払金額は{round(int(x) * 1.1)}円です") else: print('整数以外が入力されました') ```
LouiS0616

2020/10/22 09:49 編集

str.isdigitもだいぶ癖があって、例えば '①'.isdigit() がTrueを返したりします。 (細かいところでアレですが)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問