目標)
ボードゲームをつくりたい
二人用のゲームで、財産 0 からスタートとして、ゴール時点の財産を比較する
それぞれプレイヤー1、2と呼び、彼らの財産にコンピュータの指示通りに
数を代入、増加、減少、させる。
指示の出し方は、コンピューターが、N回分 以下の3種類あるうちの一つずつ出す。
プレイヤー1: a = 0
プレイヤー2: b = 0
三種類の指示の説明
① IN i A : プレイヤー i に値 A を代入する (i = 1, 2)
② Add A :「プレイヤー 1 の値 + A」を計算し、計算結果をプレイヤー 2 に代入する
③ Sub A :「プレイヤー 1 の値 - A」を計算し、計算結果をプレイヤー 2 に代入する
入力例1
3
IN 1 10
IN 2 20
Add 40
出力例1
10 50
入力例2
3
IN 1 -23
Sub 77
IN 1 0
出力例2
0 -100
考え方)
N回分の異なる指示をdataにまとめ、リストに入れる。
リストの第一項indexをもとに、条件分岐を行う
最後に、a,bの数をもとめる
期待値を取得できたが、以下の問題を処理したい。
問題)
N回分の異なる指示をdataにまとめ、リストに入れる。
入力例のように、文字列、数字が混在するため、文字列としてリスト作成。
入力例
IN 1 10
条件分岐の中身で、リストの中身の一部を数字として扱いたい。
その都度、int()を利用するため面倒。
コード N = int(input()) data = [input().split() for x in range(N)] a=0 b=0 for x in range(N): if (data[x][0] == 'IN'): if (data[x][1] == '1'): a = int(data[x][-1]) elif (data[x][1] == '2'): b = int(data[x][-1]) else: pass elif (str(data[x][0]) == 'Add'): b = int(a) + int(data[x][-1]) else: b = int(a) - int(data[x][-1]) print(a,b)
また、ループの部分を関数でまとめて、map()で実行したいが、結果が異なってしまう。
コード N = int(input()) data = [input().split() for x in range(N)] a = 0 b = 0 def computer(): for x in range(N): if (data[x][0] == 'SET'): if (data[x][1] == '1'): a = int(data[x][-1]) elif (data[x][1] == '2'): b = int(data[x][-1]) else: pass elif (str(data[x][0]) == 'ADD'): b = int(a) + int(data[x][-1]) else: b = int(a) - int(data[x][-1]) print(a,b) result = map(computer,data)
よりスマートな書き方があればアドバイスお願い致します。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/09 14:51