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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

解決済

2回答

597閲覧

関数の扱い方、条件分岐の仕方、例外の置き方

kkashi89sk

総合スコア12

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

1グッド

0クリップ

投稿2020/10/10 02:05

前提・実現したいこと

60以上の値が入力された回数を記録し合計に足す。0〜100以外の値が入力されたら再入力を要求。10回中60以上の値が一つも入力されなかったらゼロ割と表示
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ

該当のソースコード

Python3 ソースコード

def check(n):
if n<0 or n>100 :
raise ValueError

sum = 0
a = 0
for i in range(10):
while True:
score = int(input('点数を入力してください。(0~100)'))
try:
check(score)
i += 1
sum += score
break

except ValueError: print('0~100点の間を入力してください。') except ZeroDivisionError: print('ゼロ割')

print('合格者は',a,'人で、合格者のテストの平均は',sum/a,'点です。')

試したこと

ここに問題に対して試したことを記載してください。
if文の追加、関数定義の書き換え、追加

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

ここにより詳細な情報を記載してください。

graduationtips👍を押しています

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

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

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

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

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

y_waiwai

2020/10/10 02:10

しつもんはなんでしょうか
meg_

2020/10/10 02:14

コードは「コードの挿入」で記入してください。
guest

回答2

0

ベストアンサー

こちらのコードのイメージですが如何でしょうか。

python

1# -*- Coding: utf-8 -*- 2def check(n): 3 if n < 0 or n > 100: 4 raise ValueError 5 6i = 0 7sum = 0 8a = 0 9for i in range(10): 10 score = int(input('点数を入力してください。(0~100)')) 11 try: 12 check(score) 13 except: 14 print('0~100点の間を入力してください。') 15 else: 16 if score > 59: 17 a += 1 18 i += 1 19 sum += score 20 21if a == 0: 22 print('ゼロ割') 23else: 24 print('合格者は',a,'人で、合格者のテストの平均は',sum/a,'点です。') 25

投稿2020/10/10 04:13

編集2020/10/10 08:39
yasutakatou

総合スコア446

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

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

toast-uz

2020/10/10 04:42

質問に対する質問は回答欄を使わずに、「質問への追記・修正、ベストアンサー選択の依頼」に記載ください。
yasutakatou

2020/10/10 04:57

修正したかったのですけど、この追記の欄にタブやスペースでインデントをつけても消えてしまうので回答で書いてしまいました。 この質問者さんもインデントつけれていないので困っているかと思ったので・・ ここで聴くのもヘンなのですが何かいい方法ありますでしょうか?
toast-uz

2020/10/10 05:05 編集

こういうことは頻出しています。その場合、「コードは「コードの挿入」で記載ください」と「質問への追記・修正、ベストアンサー選択の依頼」欄に書いてあげるがテンプレのようです。teratilの質問UIがよくないんですよね。### 該当のソースコード というタイトル欄が中途半端に回答テンプレートにあるため、みなさんそこにコードを記述するものだと思ってしまうようです。
kkashi89sk

2020/10/10 05:14

returnの知識がまだ浅いので、return 1 return 0のところはどうなっているのか知りたいです。 0〜100以外の値が入力されたら再入力を要求したいです。あとはtryとexcept?を使って書きたいです。
ForestSeo

2020/10/10 05:14

> yasutakatou 回答に対する質問の回答は、自分の回答を編集して、追記という形で書いてください。 > toast-uz yasutakatouさんは、コメント欄ではMarkdownが適用されないと言いたいのでは?
yasutakatou

2020/10/10 05:24

kkashi89skさん returnは関数から戻る時に任意の値なり文字列を返してあげるものです。 なので0 < n < 100の時にreturn 0なら戻る時に0を返すのでチェックOKみたいに使っています。 try使って書きたいのですね。ただForestSeoさんが追記頂いている通り、 コメントでMarkdownが適用できないので、toast-uzさんにご指摘いただいたように他の回答としてコードを書けないのですがどうすればいいのか分かりかねてます。。
toast-uz

2020/10/10 05:25

>> toast-uz > yasutakatouさんは、コメント欄ではMarkdownが適用されないと言いたいのでは? 正しいソースコードはこれですか?というコメントでMarkdownが必要になり、回答蘭を使われたので、質問者様に修正してもらうように伝えるのがテンプレです、と回答しました。また、他の目的であっても、回答という形式で書くので無い限り、Markdownが使えなくても、コメント欄で表現するのが原則です。
yasutakatou

2020/10/10 05:26

>コメント欄で表現するのが原則です。 はい。承知しました。私の使い方が良く無くてご迷惑おかけして申し訳ございませんでした。以後気を付けたいと思います。
toast-uz

2020/10/10 05:30

質問への質問を回答蘭に書かないほうがよい、と申し上げただけですので、ある程度質問意図を推測して、「回答」という体裁で回答欄に書くのは、よいと思います。質問者様の意図がわかったら、それにあわせて回答を修正すればよいかと思います。
kkashi89sk

2020/10/10 08:15

なるほどですね。
yasutakatou

2020/10/10 08:41 編集

わかりました!ありがとうございます! コードも直してみました。 sum/aのaは必ず一度は入力がある(入力が無いとループが終わらない)のでゼロ除算は発生しないのでその点はご認識ください。
kkashi89sk

2020/10/10 10:05

すいません。このコードで0〜100以外の値が入力されたら再入力を要求(ループ)させたい場合はどうすればいいですか。iを記録しないようにすればいいのか。while Trueを使えばいいのか。。。
yasutakatou

2020/10/10 10:08

できなくは無いですけど、except:の中にほぼ同じ0〜100を入力してチェックするコードが入るので今のコードに2重で同じようなコードが動くことになるのであまり良い書き方じゃないと思いますよ。 今の注意書きを出して再入力させるのがベターな気がします。
takutakuya

2020/10/10 10:49

int(input('点数を入力してください。(0~100)')) これがエラーになったら。。。
yasutakatou

2020/10/10 10:55

>これがエラーになったら。。。 stringとか入って来たらオチますね。 なのでエラーチェックとかコード足すならこの部分でしょうね
takutakuya

2020/10/10 11:03

入力値チェックなら try を使わないほうが良いかもですね。
yasutakatou

2020/10/10 11:23

まあ、質問者の方がどういうものを参照して、どういう意図で最初のコードを 書かれたのかまでは分からないので素直にやりたかったであろう実装に近づけるようにしました。なので最初にあげてたtry,except無しで誰が見ても追いやすい方がよかったのかな、とも思ってます。
kkashi89sk

2020/10/10 14:05

そうなんですね。このような実行例に近づけたかったんですが。もう少し考えてみます 実行例1 10 人分のテストの点数を入力して下さい。 テストの点数を入力して下さい(0~100 点)10 テストの点数を入力して下さい(0~100 点)20 テストの点数を入力して下さい(0~100 点)30 テストの点数を入力して下さい(0~100 点)40 テストの点数を入力して下さい(0~100 点)50 テストの点数を入力して下さい(0~100 点)-10 0~100 の間の数値を入力して下さい テストの点数を入力して下さい(0~100 点)10 テストの点数を入力して下さい(0~100 点)20 テストの点数を入力して下さい(0~100 点)30 テストの点数を入力して下さい(0~100 点)40 テストの点数を入力して下さい(0~100 点)50 全体の平均点は 30.0 ゼロ割!合格者はいない模様 実行例2 10 人分のテストの点数を入力して下さい。 テストの点数を入力して下さい(0~100 点)10 テストの点数を入力して下さい(0~100 点)20 テストの点数を入力して下さい(0~100 点)30 テストの点数を入力して下さい(0~100 点)40 テストの点数を入力して下さい(0~100 点)50 テストの点数を入力して下さい(0~100 点)60 テストの点数を入力して下さい(0~100 点)70 テストの点数を入力して下さい(0~100 点)80 テストの点数を入力して下さい(0~100 点)90 テストの点数を入力して下さい(0~100 点)100 合格者は 5 人で,合格者平均点は 80.0 です
yasutakatou

2020/10/10 14:23

なるほど。それに近づけるとなると入力とチェックを関数にして 繰り返し使えるようなコードにした方が良いですね。 ただ、入力ミスっぽいのチェックするのが目的ならあんま変わらないですよ。 コードにおいては何を達成すべきかが重要になってきます。 コードを使う側の人が一番やりやすい方法で実装できるようお手数ですがご再考ください。使う側のリクエストで何が最適か決まってきますので
guest

0

どこまで試したか書いてもらえないでしょうか。
このコードだと、少なくともpythonのインデントのエラーにひっかかると思います。

投稿2020/10/10 03:20

yasutakatou

総合スコア446

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

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

kkashi89sk

2020/10/10 03:38

点数を入力してください。(0~100)59 点数を入力してください。(0~100)67 点数を入力してください。(0~100)78 点数を入力してください。(0~100)89 点数を入力してください。(0~100)90 点数を入力してください。(0~100)89 点数を入力してください。(0~100)90 点数を入力してください。(0~100)4 点数を入力してください。(0~100)78 点数を入力してください。(0~100)90 --------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-1-729f02e13c7e> in <module> 16 print('ゼロ割') 17 ---> 18 print('合格者は',a,'人で、合格者のテストの平均は',sum/a,'点です。') 19 ZeroDivisionError: division by zero でいいでしょうか
yasutakatou

2020/10/10 04:13 編集

インデントが崩れているのに実行できるのが分からないです・・ たぶんこのサイトに張り付けたときにタブが消えたのですね
toast-uz

2020/10/10 04:41

質問に対する質問は回答欄を使わずに、「質問への追記・修正、ベストアンサー選択の依頼」に記載ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問