見出し画像

AtCoder:PlacingMarbles by Python

i = input()
dx = [i[0],i[1],i[2]]
count = 0
for i in dx:
   if i == '1':
       count+=1
print(count)

今回の全体のコードはこんな感じです。

今回の問題はこちらからどうぞ!

https://atcoder.jp/contests/abs/tasks/abc081_a

簡単に問題の説明をすると、3つ”0”、”1”の入力を行ってもらい1の数を出力を行うという問題です。

では、一文づつ分けて考えて行きましょう!
まず一つ目"input"関数で入力をしてもらいます。これが無ければ始まらないですね^^
ココからがちょっと変化球ですけど、最初の入力をリストに入れて行きます!(前回の問題で使えそうなやり方なのでその辺もコラムに書きますね!)
リストに入れることで、インデックス値を使って処理することも出来ます!
"count"の変数は"1"の数を入れて行くので最初は0を入れておきます!

その後の、"for"からは"i"が"dx"の間という事になります。今回は"i"を使って書いていますが、この"i"は別に他の文字でも大丈夫です。
これは、"dx"の中をある文字(今回は"i")が順に当てはめていくという考え方が良いと思います!
ココでは、if文の中で if i=='1' というコードを使っていますがココの"i"はforで使った"i"です。つまり"dx"の値が順に入っていきます。
それからもう一つ注意点ですが、if文で使った"1"ですがシングルクオーテーションを使って挟みます。これは、dxのリストの中に入っている数は数字としてではなく文字列として入力されているためです。
その条件下の時に"count"をプラス1して、最後にprint関数で"count"を出力します。
今回はこんな感じです!!
最後まで読んでいただきありがとうございます!!

コラム
前回の問題で入力の仕方を今回使った問題のようにできるのかと思いやってみました!!
まずは、前回のコードです。

x = input().split()
a = int(x[0])
b = int(x[1])
ans = a*b
if ans%2==0:
   print("Even")

else:
   print("Odd")

こんな感じのコードでした。これを今回の入力の仕方を使って書いてみました。それが

x = int(input())
dx = [x[0],x[1]]
ans = x[0]*x[1]
if ans%2==0:
   print("Even")

else:
   print("odd")

こちらです。ですがこれで実行すると

TypeError 'int' object is not subscriptable

こんなエラーが出てきました^^??
なので今回の問題のコードで"int"で宣言をしてみました、それが

x = 0
i = int(input())
dx = [i[0],i[1],i[2]]   
count = 0
for i in dx:
   if i == '1':
       count+=1
print(count)

こちらです。これを実行すると なんと

TypeError 'int' object is not subscriptable

同じエラーなんですね!!面白くなってきましたね!
このエラーをネットで調べると案外簡単に原因がわかりました。というよりも、後ろの文('int' object is not subscriptable)を読むと'int'オブジェクトは下付き文字になれないとなるので、すぐに原因がわかりました。因みに下付き文字というのは"dx[0]"などのような物です。
なので"int"としたい場合はリストは使えないんですかね?この辺はもう少し調べてみないと分からないんですけど

結局前回の物には使えませんでしたけど新しいことも分かったので良い収穫かなと思います!

長々と最後まで読んでいただきありがとうございます!!
では、また今度書きたいと思います!!!

この記事が気に入ったらサポートをしてみませんか?