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

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

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

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

Q&A

解決済

3回答

4889閲覧

While文を抜けるには・・・

nagaryu000

総合スコア13

Python 3.x

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

0グッド

0クリップ

投稿2015/12/06 14:29

編集2015/12/07 11:19

Python(というかプログラミング)初心者です。よろしくお願いします。

FizzBuzzのコードなのですが、int以外が入力されたら、whileを抜けて
'Please enter number you like again!'を表示させて、int(input())で再度入力待ちにしたいのですが・・・

Python

1print('enter any number you like!') 2nums = int(input()) 3while nums != int: 4 if nums % 15 == 0: 5 print('FizzBuzz') 6 elif nums % 5 == 0: 7 print('Buzz') 8 elif nums % 3 == 0: 9 print('Fizz') 10 else: 11 print(nums) 12 nums = int(input()) 13print('Please enter number you like again!') 14nums = int(input()) 15

文字(str)を入力するとValueErrorが返ってしまいます・・・

Python

16666 2Fizz 314 414 515 6FizzBuzz 7d 8Traceback (most recent call last): 9 File "FizzBuzz.py", line 12, in <module> 10 nums = int(input()) 11ValueError: invalid literal for int() with base 10: 'd'

どこを修正したら良いか教えて下さい!

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

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

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

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

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

guest

回答3

0

ベストアンサー

例外処理を使って書いてみました。
0 以下の数字をいれたらループを抜けるようにしました。

python

1prev_error = False 2nums = 0 3 4while True: 5 try: 6 if prev_error: 7 print('Please enter number you like again! (0: quit)') 8 else: 9 print('enter any number you like! (0: quit)') 10 nums = int(input()) 11 prev_error = False 12 except: 13 prev_error = True 14 continue 15 16 if nums <= 0: 17 break; 18 if nums % 15 == 0: 19 print('FizzBuzz') 20 elif nums % 5 == 0: 21 print('Buzz') 22 elif nums % 3 == 0: 23 print('Fizz') 24 else: 25 print(nums)

実行例:

$ python3 1.py enter any number you like! (0: quit) 1 1 enter any number you like! (0: quit) 3 Fizz enter any number you like! (0: quit) 5 Buzz enter any number you like! (0: quit) 15 FizzBuzz enter any number you like! (0: quit) x Please enter number you like again! (0: quit) 0

投稿2015/12/06 22:23

katoy

総合スコア22324

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

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

nagaryu000

2015/12/07 04:41

ありがとうがざいます!想定通りの挙動となりました! もちろんですが、例外処理がガッツリ抜けてますもんね。 私が最初に記載したcode・・・例外処理大切ですね・・・
guest

0

解決したい問題は2つあります。
1.再度入力待ちにしたい
2.エラーが出る

1つ目は、入力をwhile文の中で処理することで解決できます。
2つ目を回避する方法は2つあります。1つは例外処理を行うこと、2つは入力が数字かどうか判断することです。

これは例外処理した例です。
「例外」とはざっくりいうとエラーのことです。
今回のエラーはinput()が入力を数値に変換できないために発生します。
try-except文はtryからexceptまでの間でエラーが発生した場合、以降の処理をスキップし、exceptに処理を移します。

python

1print('enter any number you like!') 2 3while True: 4 try: 5 nums = int(input()) 6 if nums % 15 == 0: 7 print('FizzBuzz') 8 elif nums % 5 == 0: 9 print('Buzz') 10 elif nums % 3 == 0: 11 print('Fizz') 12 except: 13 print('Please enter number you like again!')

本来であればexcept節は、except TypeError:などとするべきなのですが,
私にはこのエラーがなにエラーに該当するのかわかりませんでした…。

続いて入力が数値かどうか判断する例です。

Python

1print('enter any number you like!') 2 3while True: 4 string = raw_input() 5 if string.isdigit(): 6 nums = int(string) 7 if nums % 15 == 0: 8 print('FizzBuzz') 9 elif nums % 5 == 0: 10 print('Buzz') 11 elif nums % 3 == 0: 12 print('Fizz') 13 else: 14 print('Please enter number you like again!')

input()関数が入力を数値として返すのに対してraw_input()関数は入力された文字列をそのまま文字列として返します。
続いて.isdigit()関数を使い、その文字列が数字の文字列かどうかを調べます。
そうであればint型にキャスト(型変換)し、否であれば数値には変換できないとみなし再入力を要求します。

いずれの例でも無限ループとなっているため終了するときはCtrl+c‘あるいはCtrl+z`などで終了させてください。

投稿2015/12/06 15:43

nage

総合スコア144

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

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

0

知らない言語ですが、

if numes == int print('Please enter number you like again!') nums = int(input())

が必要だと思います。

投稿2015/12/06 15:02

編集2015/12/06 15:10
y-neon

総合スコア106

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問