あなたの習慣について教えてください!!

プログラミングの問題について質問です。
Pythonで解きました。

[問題]
変数1、変数2が用意されていて、入力された命令に対して以下の動作を行います。
・SET i a : 変数 i に値 a を代入する (i = 1, 2)
・ADD a :「変数 1 の値 + a」を計算し、計算結果を変数 2 に代入する
・SUB a :「変数 1 の値 - a」を計算し、計算結果を変数 2 に代入する

入力例
3 (命令の個数 n が与えられます)
SET 1 10
SET 2 20
ADD 40

出力例
10 50(変数1、変数2を半角スペース区切りで表示)

[私の回答]
n = int(input()) # nは入力回数
str_list = []
for i in range(n):
str_list.append(list(input().split()))
print(str_list)

a=0
b=0

if "SET" and 1==str_list[0] and int(str_list[1]):
a+=int(str_list[2])
elif "SET" and 2==str_list[0] and int(str_list[1]):
b+=int(str_list[2])
elif "ADD"==str_list[0]:

ここまで書いていて途中でよく分からなくなってしまい止めてしまいました。

Pythonに詳しい方、どのように解いたら良いか教えて頂けると助かります。
宜しくお願い致します。

A 回答 (2件)

インデントがどうなっているのかわからないので、どこからどこまでがブロックなのか不明だが(だからpythonは嫌い)


for が if-elif文までカバーしているのなら、わざわざstr_listにアペンドして全命令の大きなリストを作る合理的な理由はありません。

ちゃんと動作するかどうか確認はしていないけど、こんな感じ?

a=0
b=0
n = int(input()) # nは入力回数
for i in range(n):
str_list = list(input().split())
print(str_list)

if "SET"==str_list[0] and str_list[1]=="1":
a = int(str_list[2])
print(a, b)
elif "SET"==str_list[0] and str_list[1]=="2":
b = int(str_list[2])
print(a, b)
elif "ADD"==str_list[0]:
b = a + int(str_list[1])
print(a, b)
elif "SUB"==str_list[0]:
b = a - int(str_list[1])
print(a, b)

print()
print(a, b)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
しっかりと動きました!

質問なのですが、SUBの所はb=int(str_list[1])-aだと問題文から、書きながら思ったのですが、逆である理由を教えて欲しいです。

お礼日時:2020/07/01 18:44

> 質問なのですが、SUBの所はb=int(str_list[1])-aだと問題文から、書きながら思ったのですが、逆である理由を教えて欲しいです



変数aを問題文中とプログラム中の両方で使っているから混乱しているのだと思います。

プログラムの中のa,bは問題中の変数1,2に対応します。
問題文中のaは、ある任意の値をaと表現しているだけで、プログラムの中のa,bとは無関係です。

問題をこう書き換えれば混乱しないでしょう。以下の問題文は本質的にはもとの問題文と同じです。

変数1、変数2が用意されていて、入力された命令に対して以下の動作を行います。
・SET i X : 変数 i に値 X を代入する (i = 1, 2)
・ADD Y :「変数 1 の値 + Y」を計算し、計算結果を変数 2 に代入する
・SUB Z :「変数 1 の値 - Z」を計算し、計算結果を変数 2 に代入する
    • good
    • 0
この回答へのお礼

納得できました。
本当にありがとうございます。

変数を置くときに、名前付けには注意します。
この度は回答して頂きありがとうございました。

お礼日時:2020/07/02 12:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!