見出し画像

退屈なことをPythonにやってもらうための演習の回答[3.11][4.10.1][4.10.2]

白地です。

最近「業務ハック」という言葉を知って、あ、やりたいことのひとつの解はこれだ!と思って、『退屈なことはPythonにやらせよう』でPythonの学習をはじめました。

だらだらと4章まで演習プロジェクトをやりながら進めたのですが、初めて詰まり、やっと解(のひとつ)にたどりついたので、いっそここに進捗報告がてら書いてしまおう!と思って投下します。

本来はQiitaとかの方がいいのかもしれないですけども。

なお、本職の方から見ると色々と誤りが含まれていると思いますので、優しくご指摘いただけると非常に嬉しいです!

3.11  コラッツ数列+入力の妥当性検証

#コラッツ数列を計算する関数
def collatz(number):
    x = number%2
    if x==1:
        return int(3*number+1)
    else:
        return int(number/2)

#整数値が入力されるまで入力待ち
while True:
    print('Input a nunber.(If you want to break, put "ctrl + c"')
    num = input()
    try:
        yournum = int(num)
    except ValueError:
        print('Input a integral number.')
        continue
    break

#コラッツ数列の計算
while True:
    yournum = collatz(yournum)
    print(yournum)
    if yournum==1:
        break

3章の演習プロジェクトである3.11.1と3.11.2までやったコードです。記事を書き出してから間違いに気付いて修正しました。変数名や表示させる文章は適当です(カッコつけて英語にしてますが間違っている可能性が高いです)。

3.11.2の文章の意図としては「整数値を入力させたい」のかなと思って、「整数値が入力するまでinputを表示させています。

4.11.1 カンマ付け

def add_comma (list):
    ref=""
    for rows in range(len(list)):
        ref += list[rows]
        if rows < len(list)-2 :
            ref += ', '
        if rows == len(list)-2 :
            ref += ', and '
    return ref

「関数を書け」というお題だったので、これが解答になるのかな、と。上げようとしたときに「カンマ」のスペルを間違っていたので修正しました。ものすごく恥ずかしいですね。

戻り値用の文字列を用意して、それに順次文字を入れつつ、最後から2番目より前ならカンマを追加する、最後から2番目ならカンマとandを追加する、それ以外なら何もしない、という関数です。else if と else があった方がわかりやすいのかもしれません。

4.10.2 文字絵グリッド

grid = [['.','.','.','.','.','.'],
        ['.','0','0','.','.','.'],
        ['0','0','0','0','.','.'],
        ['0','0','0','0','0','.'],
        ['.','0','0','0','0','0'],
        ['0','0','0','0','0','.'],
        ['0','0','0','0','.','.'],
        ['.','0','0','.','.','.'],
        ['.','.','.','.','.','.']]

xlen = len(grid)
ylen = len(grid[0])

line=[]

for y in range(ylen):
        line.append([])

for x in range(xlen):
        for y in range(ylen):
                line[y].append(grid[x][y])

for y in range(ylen):
        tmp = ""
        tmp = ''.join(line[y])
        print(tmp)

盛大に詰まりました。

というのも、キーワード引数という誘導に何故か乗りたくなくなったのと、「あれ、これリストでいけるのでは」という思い込みが悲劇の引き金でした。

やり方を試行錯誤して、結局以下のようになりました。
1. リストを用意して、行数分のリスト内リストを作る(これができてなかった)
2. XとYを逆転させつつ、各行のリスト入れ込む
3.カンマを排除して表示させる(ぐぐった)

多分問題の意図としては、リストになんぞ入れずにそのままprintすればいいのではないかと思い始めました。。。でもなんかそれ、カッコ悪くないですかね…

ということで、業務ハックにはまだまだ遠い白地でした。

はやく11章のWebスクレイピングと12章のExcelに行きたいー!

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