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

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

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

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

Q&A

解決済

2回答

301閲覧

Python3でinput()関数で入力した値が、数値か数値ではないかで処理を場合分けしたい

nsmt

総合スコア17

Python 3.x

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

0グッド

0クリップ

投稿2019/05/22 11:23

前提・実現したいこと

from random import sample characters = ['戦士', '黒魔導士', '白魔導士', 'ダークナイト', 'シーフ'] while True: howmany_players = input('プレイヤーは何名ですか?') try: for i, character in enumerate(sample(characters, int(howmany_players)), start=1): print(i, character) break except ValueError: print('プレイ人数オーバーです。人数を減らしてください。')

上記のプログラムを実行すると、
「プレイヤーは何名ですか?」と聞かれます。
例えばここで「100」「four」「4」などを入力すると次のように出力されます。

プレイヤーは何名ですか?100 プレイ人数オーバーです。人数を減らしてください。 プレイヤーは何名ですか?four プレイ人数オーバーです。人数を減らしてください。 プレイヤーは何名ですか?4 1 黒魔導士 2 ダークナイト 3 シーフ 4 戦士

「four」と入力した時に、
「100」と入力した時と同じように出力するのではなく、
「数値を入力してください。」と出力したいのですが、
どのように手直しすれば上手く動くでしょうか?

試したこと

from random import sample import re characters = ['戦士', '黒魔導士', '白魔導士', 'ダークナイト', 'シーフ'] while True: howmany_players = input('プレイヤーは何名ですか?') try: for i, character in enumerate(sample(characters, int(howmany_players)), start=1): print(i, character) break except ValueError: if re.compile(r'\d+').search(int(howmany_players)) == True: print('プレイ人数オーバーです。人数を減らしてください。') else: print('数値を入力してください。')

except ValueError内でhowmany_playersに格納される値を正規表現を用いて、
数値オーバーの場合と数値を入力しなかった場合とに場合分けしようとしましたが、うまくいきませんでした。。。
このコードの場合、実行して、
「100」と入力すると、
TypeError: expected string or bytes-like object
「four」と入力すると、
ValueError: invalid literal for int() with base 10: 'four'
と出てエラーになりました。

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

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

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

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

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

guest

回答2

0

参考情報

  • [Python] 文字列が数字であることを判別する(isdigit, isdecimal, isnumeric)

https://hibiki-press.tech/learn_prog/python/isdigit/899

...

文字列が数値であるかどうかを判別する方法は、
int()を使って確認する方法
文字列のメソッド(isdigit, isdecimal, isnumeric)を使う方法
の2つが考えられます。

...

  • Pythonで正規表現を使って数値/英字チェックを実装する (コピペ用)

https://www.sukerou.com/2018/12/python.html

投稿2019/05/22 15:05

katoy

総合スコア22324

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

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

nsmt

2019/05/23 02:47

isdigitなどのメソッドの存在を忘れていました。汗 正規表現が文字列からでないとサーチできないということも忘れてました。汗汗 教えていただきありがとうございます!
guest

0

ベストアンサー

詳細動作は把握していませんが、以下のような感じでしょうか。

Python

1from random import sample 2import re 3 4characters = ['戦士', '黒魔導士', '白魔導士', 'ダークナイト', 'シーフ'] 5 6while True: 7 howmany_players = input('プレイヤーは何名ですか?') 8 9 try: 10 howmany_players = int(howmany_players) 11 except ValueError: 12 print('数値を入力してください。') 13 continue 14 15 try: 16 characters = sample(characters, howmany_players) 17 except ValueError: 18 print('プレイ人数オーバーです。人数を減らしてください。') 19 continue 20 21 for i, character in enumerate(characters, start=1): 22 print(i, character) 23 break

投稿2019/05/22 11:35

can110

総合スコア38262

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

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

nsmt

2019/05/22 11:54

howmany_players = int(howmany_players)で数値かどうか判別するんですね!そのような方法を使うとは目から鱗です。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問