読者です 読者をやめる 読者になる 読者になる

Psycho-Logic

Psychology, Programming, and occasional Rat.

Python3 DAY3:paizaスキルチェック「トランプ占い」

今回の問題は「J,Q,Kのうち2つがランダムに入力として渡され、J,Jの組み合わせのときだけ2つめのJをQとして出力しなさい」というもの。
回答までにかかった時間は10分22秒で、少しだけ感覚がつかめてきた気がします(気がします)。
しかし、今回もミスをしては訂正の繰り返しだったので、パンドラ(理解不足)の箱を開けていきたいと思います。

 

最初に考えたコード

 
input_lines = input()
if c_1 == J and c_2 == J:
    c_2 = "Q"
print(c_1,end ="")
print(c_2)

 

1行目はいつものように無視します。
 

1つ目の問題点

 

 if c_1 == J and c_2 == J:

 

if文を使うという発想は真っ先に浮かびました。

このあたり、プログラミングの感覚が少し身についた気がます。
と、浮かれているのもつかの間。
コードを見れば一目瞭然ですが、ここで用いている c_1 と c_2 という変数、どこにも定義されていないんですね。
問題文に
 
「標準入力として『c_1 c_2』というフォーマットで入力されます」
 
と書いてあったので、それをそのまま用いた形です。
あくまで問題文のいう『c_1 c_2』というのは J,Q,K のいずれかが入力されるフォーマットであって、標準入力を受け取る「変数」ではありません。
そこを完全に勘違いしていました。
その後、エラーで not defined と言われ
 
「標準入力を受け取っている変数は input_lines か!」
 
と気づきました。
 
が。
その後に訂正を加えたコードがさらなる問題を生み出しました。
 

今回のハイライト

 
#(訂正後のコード)
input_lines = input()
c1 = input_lines[0]
c2 = input_lines[1]
if c1 == J and c2 == J:
・・・

 

f:id:Mantra:20170212114145j:plain

 
いや、全くふざけてはいないんです、大真面目です。
これは
 
「input_lines で受け取った2つの標準入力は別々の要素として格納されている。だからインデックス参照してc1とc2を定義すればいいんだ!」
 
という発想です。
input()メソッドで受け取ったものは、そのままでは(空白を挟んだ)ただの文字列であることが十分に理解できていませんでした。
リストとして扱うにはsplit()メソッドを用いる必要がありますね。
 
3行目の c_2 = “Q" は合ってますね(if文が正しければ)。
4行目の print(c_1,end =“") については、今までの問題が「つなげた文字列を出力」だったのでこうしてしまいました。
今回は2つの出力の間には空白が必要ということで、不正解になりました。
問題文はちゃんと読まなくてはいけませんね。
 
今回はこんなものでしょうか。
 

参考サイト