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

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

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

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

Q&A

解決済

2回答

498閲覧

関数内で判定機能を作成し、渡される引数が足りない場合の判定をさせたい。

kaodnso82392749

総合スコア6

Python 3.x

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

0グッド

0クリップ

投稿2022/07/25 05:09

前提

関数grandingで、引数に3つの整数を持っていて、それによって、平均が60.0以上なら「合格」、60.0未満なら「不合格」、渡される引数が足りなかったり、引数のどれかに0未満の数が入っていた際にはー1と「測定不能」となる文字列が返される関数を作成したいです。

実現したいこと

関数grandingという引数である3つの整数を使い、平均点が60以上であれば「合格」、60.0未満であれば「不合格」、渡される引数が足りない場合と引数のどれかに0未満が入っている場合はー1と「測定不能」となるように関数の内部を改善したいです。

[具体例1]
一つ目10
二つ目20
三つ目30
平均点は20.000、不合格です。

[具体例2]
一つ目60
二つ目70
三つ目80
平均点は70.000、合格です。

[具体例3]
一つ目-100
二つ目200
三つ目300
平均点はー1.000、測定不能です。

[具体例4]
一つ目500
二つ目1000
平均点はー1.000、測定不能です。

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

渡される引数が二つの場合のエラー

~\AppData\Local\Temp/ipykernel_5984/4291754440.py in <module> 1 num1 = int(input('一つ目')) 2 num2 = int(input('二つ目')) ----> 3 num3 = int(input('三つ目')) 4 avg,msg = granding(num1,num2,num3) 5 print('平均点は{:.3f}、{}'.format(avg,msg)) ValueError: invalid literal for int() with base 10: ''

該当のソースコード

Python

1def granding(num1,num2,num3): 2 avg = (num1 + num2 + num3) / 3 3 if( avg >=60.0 and num1>=0 and num2>=0 and num3>=0): 4 msg = '合格' 5 return(avg,msg) 6 elif( avg >= 0 and num1>=0 and num2>=0 and num3>=0): 7 msg1 = '不合格' 8 return(avg,msg1) 9 else: 10 msg2 = '測定不能' 11 avg = -1.000 12 return(avg,msg2)

Python

1num1 = int(input('一つ目')) 2num2 = int(input('二つ目')) 3num3 = int(input('三つ目')) 4avg,msg = granding(num1,num2,num3) 5print('平均点は{:.3f}、{}'.format(avg,msg))

試したこと

論理積を追加した。例外処理にavg = -1.000を追加した。前回の指摘通りにピリオドに変更した。

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

Jupter Notebook

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

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

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

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

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

guest

回答2

0

これは、関数に問題があるのではなく、プログラムとしての仕様の問題ですよ。

このプログラム、値が3つ揃っていない場合、どのように入力する仕様ですか?
そして、その仕様に合った入力の受け取り処理をしていますか?
また、何も値が無い場合に、関数にどのような値を渡すことにしていますか?

入力の仕様を「値が無い場合は何も入れずにリターンする」なのであれば、入力に何も入っていない場合に対応できるような処理にしなければなりません。
しかし、現状の処理

python

1num1 = int(input('一つ目'))

では、何も入れないとエラーになります。(質問のエラー)
値の入力で「値が無い場合は何も入れずにリターンする」のが仕様であれば、この入力受付部分に値が空白だった時の処理を追加しなければなりません。

python

1input_str = input('xxx') 2if input_str == '': 3 numx = XXX 4else: 5 numx = int(input_str)

のような感じでしょうか。 そして、空白だったときに、numxに何を入れるかも決めなければなりません。

そして、空白だったときにnumxに入れた値に対応するように、grading関数の処理を検討して、必要であれば作りなおす必要もあります。

投稿2022/07/25 09:41

TakaiY

総合スコア12799

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

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

0

ベストアンサー

ValueError: invalid literal for int() with base 10: ''

空文字列を入力したいなら、チェックせずにint()しちゃ駄目です。
どんな入力を許すのか不明なので、あくまで例ですが、

Python

1def in_num(s): 2 num = input(s) 3 if num.isdecimal(): 4 return int(num) 5 else: 6 return -1 7 8num1 = in_num('一つ目') 9num2 = in_num('二つ目') 10num3 = in_num('三つ目') 11~~~

投稿2022/07/25 09:41

otn

総合スコア84702

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問