前提・実現したいこと
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'
と出てエラーになりました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/23 02:47