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

新しくプログラミング言語を覚えたい(ry -1

新しくプログラミング言語を覚えたいときに行うべき10の練習問題
今更ながら、Pythonでやってみました。

1.何らかのカウントアップメッセージをを1から100まで出すけど、3のときだけアホになる!

#! /usr/bin/python
#-*- coding:utf-8 -*-

def nabeatsu():
        """
        1から100までカウントアップして
        3の倍数と3がつく数字の時だけアホになる。
        """
        for i in range(1,101):
                strNum = str(i)
                if i % 3 == 0 or strNum.count("3"):
                        ahoCounter(i)
                else:
                        normalCounter(i)

def ahoCounter(i):
        """
        引数iをアホに変換して出力する関数
        """
        aho = {1 : "いぃちぃー",
               2 : "にゅいいい",
               3 : "しゃーー",
               4 : "よぉぉぉn",
               5 : "ぐぉぉぉ", 
               6 : "ろぉぉぉくぅぅ",
               7 : "にゃにゃー",
               8 : "ひゃちいい",
               9 : "きぃううううう",
               10 : "じいいいぃぃぃう"}

        if i <= 10:
                print aho[i]
        elif i > 10:
                #10の位
                t = i / 10
        #1の位
                o = i % 10
                if t == 1:
                        print aho[10] + aho[o]
                elif o == 0:
                        print aho[t] + aho[10]
                else:
                        print aho[t] + aho[10] + aho[o]

def normalCounter(i):
        """
        引数iを普通に変換して出力する
        """
        normal = {1 : "いち", 
                  2 : "に",
                  3 : "さん",
                  4 : "よん",
                  5 : "ご",
                  6 : "ろく",
                  7 : "なな",
                  8 : "はち",
                  9 : "きゅー",
                  10 : "じゅう"
         100 : "ひゃく!"}

        if i <= 10:
                print normal[i]
        elif i > 10:
                t = i/ 10
                o = i % 10
                if t == 1:
                        print normal[10] + normal[o]
                elif t == 10:
                        print normal[100]
                elif o == 0:
                        print normal[t] + normal[10]
                else:
                        print normal[t] + normal[10] + normal[o]

if __name__ == "__main__":
        nabeatsu()

一応、できました。
でも、ahoCounter()とnormalCounter()分ける必要がないような気もします。
で、書き直し。

#! /usr/bin/python
#-*- coding:utf-8 -*-

def nabeatsu():
        """
        1から100までカウントアップして
        3の倍数と3がつく数字の時だけアホになる。
        """
        aho = {1 : "いぃちぃー",
               2 : "にゅいいい",
               3 : "しゃーーん",
               4 : "よぉぉぉn",
               5 : "ぐぉぉぉ", 
               6 : "ろぉぉぉくぅぅ",
               7 : "にゃにゃー",
               8 : "ひゃちいい",
               9 : "きぃううううう",
               10 : "じいいいぃぃぃう"}

        normal = {1 : "いち", 
                  2 : "に",
                  3 : "さん",
                  4 : "よん",
                  5 : "ご",
                  6 : "ろく",
                  7 : "なな",
                  8 : "はち",
                  9 : "きゅー",
                  10 : "じゅう",
                  100 : "ひゃく"}

        for i in range(1,101):
                strNum = str(i)
                if i % 3 == 0 or strNum.count("3"):
                        print counter(i, aho)
                else:
                        print counter(i, normal)

def counter(i, lst):
        """
        引数iを変換する
        """
        if i <= 10 or i == 100:
                return lst[i]
        elif 11 <= i <= 99:
                t = i / 10
                o = i % 10
                if t == 1:
                        return lst[10] + lst[o]
                elif o == 0:
                        return lst[t] + lst[10]
                else:
                        return lst[t] + lst[10] + lst[o]

if __name__ == "__main__":
        nabeatsu()


実行結果

いち
に
しゃーーん
よん
ご
ろぉぉぉくぅぅ
なな
はち
きぃううううう
じゅう
じゅういち
じいいいぃぃぃうにゅいいい
じいいいぃぃぃうしゃーーん
じゅうよん
じいいいぃぃぃうぐぉぉぉ
じゅうろく
じゅうなな
じいいいぃぃぃうひゃちいい
じゅうきゅー
にじゅう
にゅいいいじいいいぃぃぃういぃちぃー
にじゅうに
にゅいいいじいいいぃぃぃうしゃーーん
にゅいいいじいいいぃぃぃうよぉぉぉn
にじゅうご
にじゅうろく
にゅいいいじいいいぃぃぃうにゃにゃー
にじゅうはち
にじゅうきゅー
しゃーーんじいいいぃぃぃう
しゃーーんじいいいぃぃぃういぃちぃー
しゃーーんじいいいぃぃぃうにゅいいい
しゃーーんじいいいぃぃぃうしゃーーん
しゃーーんじいいいぃぃぃうよぉぉぉn
しゃーーんじいいいぃぃぃうぐぉぉぉ
しゃーーんじいいいぃぃぃうろぉぉぉくぅぅ
しゃーーんじいいいぃぃぃうにゃにゃー
しゃーーんじいいいぃぃぃうひゃちいい
しゃーーんじいいいぃぃぃうきぃううううう
よんじゅう
よんじゅういち
よぉぉぉnじいいいぃぃぃうにゅいいい
よぉぉぉnじいいいぃぃぃうしゃーーん
よんじゅうよん
よぉぉぉnじいいいぃぃぃうぐぉぉぉ
よんじゅうろく
よんじゅうなな
よぉぉぉnじいいいぃぃぃうひゃちいい
よんじゅうきゅー
ごじゅう
ぐぉぉぉじいいいぃぃぃういぃちぃー
ごじゅうに
ぐぉぉぉじいいいぃぃぃうしゃーーん
ぐぉぉぉじいいいぃぃぃうよぉぉぉn
ごじゅうご
ごじゅうろく
ぐぉぉぉじいいいぃぃぃうにゃにゃー
ごじゅうはち
ごじゅうきゅー
ろぉぉぉくぅぅじいいいぃぃぃう
ろくじゅういち
ろくじゅうに
ろぉぉぉくぅぅじいいいぃぃぃうしゃーーん
ろくじゅうよん
ろくじゅうご
ろぉぉぉくぅぅじいいいぃぃぃうろぉぉぉくぅぅ
ろくじゅうなな
ろくじゅうはち
ろぉぉぉくぅぅじいいいぃぃぃうきぃううううう
ななじゅう
ななじゅういち
にゃにゃーじいいいぃぃぃうにゅいいい
にゃにゃーじいいいぃぃぃうしゃーーん
ななじゅうよん
にゃにゃーじいいいぃぃぃうぐぉぉぉ
ななじゅうろく
ななじゅうなな
にゃにゃーじいいいぃぃぃうひゃちいい
ななじゅうきゅー
はちじゅう
ひゃちいいじいいいぃぃぃういぃちぃー
はちじゅうに
ひゃちいいじいいいぃぃぃうしゃーーん
ひゃちいいじいいいぃぃぃうよぉぉぉn
はちじゅうご
はちじゅうろく
ひゃちいいじいいいぃぃぃうにゃにゃー
はちじゅうはち
はちじゅうきゅー
きぃうううううじいいいぃぃぃう
きゅーじゅういち
きゅーじゅうに
きぃうううううじいいいぃぃぃうしゃーーん
きゅーじゅうよん
きゅーじゅうご
きぃうううううじいいいぃぃぃうろぉぉぉくぅぅ
きゅーじゅうなな
きゅーじゅうはち
きぃうううううじいいいぃぃぃうきぃううううう
ひゃく