こんにちは!
はるさらと申します。
今回はPythonの練習がてら
ダーツの問題を作成してみました。
ゼロワンというルールがあるのですが
そちらの計算をコンソール上で実施していきます♪
開発環境
PyCharm を使用しております。
コピペしていただければ
同じ挙動が出来るように作成しております。
他のPythonの記事はこちらから参照できます♪
ゼロワンの仕様(問題)
ダーツのゼロワンのシステムを作成せよ。
【ルール】
・持ち点の301点を減らしていき、丁度0点になるまで投げ続ける。
・1ターンで3回投げることが出来る。
(1回投げた時の最大得点は60点とする。)
・0点を下回ってしまった場合は、ターン開始時の得点に戻る。
・数値以外の入力や3回投げなかった場合。
一回の得点が60点を超えている場合には
適切なエラーメッセージを記載し、
処理を終わらせないこと。
【コンソール例】
「0~60の中で3回数値を入力して下さい。」
23 23 22
「残り233点」
・・・(一部省略)
「残り21点」
9 9 8
「burst!!」
「残り21点」
9 9 3
「クリア!!」
今回の目標
実行することで、コンソールに数値の入力が出来るようになります。
数値を入れていくことで
保有点数からどんどん減算させていきます。
保有点数が0点になったら
「クリア!!」と表示させるところまで
実装していきたいと思います。
細かい仕様は、また次回に実装予定です。
コーディング
count = 301
while count >= 0:
try:
print("「0~60の中で3回数値を入力して下さい。」")
a, b, c = (int(x) for x in input().split())
count = count - (a + b + c)
# クリアチェック
if count == 0:
print('「クリア!!」')
break
except ValueError:
print("「数値を3回分入力して下さい」")
finally:
print('「残り' + str(count) + '点」')
※すみません、インデントの修正は後日行います。
処理の解説
【1行目】
countという変数に301の数値を格納しています。
こちらをゼロワンのルールに基づいて減らしていく形になります。
【3行目】
countが0点以上の間は、処理をループさせます。
【6~8行目】
下記の構文を記載することで
コンソール上で数値の入力を求めることが出来ます。
a, b, c = (int(x) for x in input().split())
変数の数だけ、入力を受け付けることが可能になります。
今回は1ターンに3回投げますので
a,b,cに入力した値をそれぞれ格納するように
記載しております。
その後、count変数から、
入力した値を減らす処理を記載しています。
この手順を、countが0点になるまで
ぐるぐるとループしていく動きとなります。
【11~13行目】
こちらの判定により、
countが0点になったら
「クリア!!」
の表示をした後、ループから抜け出しています。
【15行目】
6行目の
a, b, c = (int(x) for x in input().split())
を実行した際に、文字列をint型に変換しようとすると
例外が発生しますので
もし、入力された値が数値でなかった場合は
15行目でエラーに引っかかるようにしています。
【17行目】
残りの点数が分からないと、
ダーツで何点を狙ってよいのか分からなくなるため
finallyで、後何点で終了かを知らせています。
finallyに記載することで、エラーが出ても
しっかりと残り点数を知らせるように作成しています。
今日はここまで
一旦、クリアまでは表示できるようにはなりましたが
課題はまだたくさん残っています。
・1回投げた時の最大得点は60点とする。
・0点を下回ってしまった場合は、
ターン開始時の得点に戻る。(バースト)
などなど。
次回、実装を進めて行きたいと思います。
それではまたー!!