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

Psycho-Logic

Psychology, Programming, and occasional Rat.

Python3 DAY2:paizaスキルチェック「初詣で」

Python3 paiza
今回挑戦した問題は「参拝時の礼と拍手を前の人の真似をして礼をA、拍手をBとして回数分だけ連続させた文字列を出力」というものでした。
回答時間は21分22秒
 
それでは今回も、間違いの宝石箱や〜!なコードを見ていきます。
 

最初に考えたコード

 
input_lines = input()
a = input_lines.split(" ")
for i in range(len(input_lines)):
    print("A" * a[0]), "B" * a[1], "A" * a[2])

 

 1行目は元からあるので割愛します。
2行目の a = input_lines.split(" “) ですが、最初に標準入力として渡される L M N をどうやって分割するかを考えました。
(L=1回目の礼の回数、M=拍手の回数、N=2回めの礼の回数)
それぞれの数の間には半角スペースがあるので、それを用いてsplit()メソッドを用いるべきだということは早い段階で気づきました。
 

今回のハイライト  for i in range(len(input_lines)):

これは考えがまとまらないうちに、
 
「とにかく3回出力しなくちゃいけないんだから、for文で繰り返しておこう」
 
と思って書きました。
わざわざ range(3) ではなく range(len(input_lines) と書いているあたり、無茶をしたヤムチャ感がただよっています。
 

f:id:Mantra:20170210190011j:plain

 ( それ(挑むこと)自体は間違いではないのだけども)
 
しばらくこのfor文の呪縛にはまっていましたが、結局は素直に3回 print() で解決しました。

 

2つ目の問題点 print("A" * a[0]), "B" * a[1], "A" * a[2])

これもユニークな間違いです。
発想としては、
 
「リストaの中にある L M N の各値をAとBに掛けて期待する出力を得よう」
 
というもの。
これは、
 
「リストの要素はint型になる」
 
という勘違いによる間違いで、実際にリストaの中にあるものはint型ではなくstr型です。
input()で入力されたものはstr型、リストは要素の型に関係しません。
また、split()メソッドを用いた場合にも型は変わりません。
このあたりの理解が曖昧であることが伺える1行です。
 
更に、期待される出力が「間に空白のない連続した文字列」であることをすっかり忘れています。
実際には end = を用いて空白をなくす必要がありますが、それに気づいたのはfor文のおかげで各文字列が3回分出力された後です。
 

参考サイト

Python Tips:改行なしで文字列を出力したい:http://www.lifewithpython.com/2013/12/python-print-without-.html
PerlRubyPythonにおける文字列のたし算およびかけ算:http://d.hatena.ne.jp/takehikoMultiply/20120603/1338674855
・文字列の分割・結合 split, join,rsplit:http://python.civic-apps.com/string-split-join/

Python3 DAY1:paizaスキルチェック「N倍の文字列」

Python3 paiza
本記事では問題の解説などは行わず、初学者が「何を考えてどのような間違いをおかすのか」を見ていきます。

また、Python3を使ってプログラミングをするのはpaizaの動画講座以外では初めてでした。

それを前提に読んでいただけるとよろしいかと。

プログラミング経験について

Programming
本ブログでは私の個人的なプログラミング学習の記録を残していこうと考えています。
それが誰にとって何の役に立つのかは私にもわかりませんが、少なくとも私の復習の機会にはなります。
需要がなければそれはそれとして、誰も困らないだろうということです。
そこで、一応私のプログラミング経験についての情報を載せておきます。