みろりHP


緑色さんの多目的ブログ
みろりえいちぴー
ごゆるりとおくつろぎあさーせ。
| カテゴリ:プログラミング |
シンタックスハイライトを導入する



プログラミングのブログとかでさー、スクリプトに色がついてるやつ(シンタックスハイライトっていうらしい)がよくあるじゃん。あれに憧れてみろりhpも少し装飾してみた。ただこのブログサービスの仕様による条件がひとつ。このjugemブログ、新たにCSSファイルとかJSファイルをアップロードできないんだよ。それを踏まえて今回の変更をノートしておく。



シンタックスハイライト。 code-prettifyなるライブラリを使う。Javascriptではあるのだが、ネットにスクリプトが上がっているのでそれをインポートするだけでOK。jugemブログでもそれは可能。こういうの助かるなー。
<!-- コードの装飾 -->
<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>

背景色とかフォントの装飾。 CSSを自作した。新たにCSSファイルを追加することはできないのだけど、CSSを追記することは可能なので。
pre.mycode {
    padding: 0.5em, 1em;
    overflow: auto;
    white-space: pre-wrap;
    word-wrap: break-word;
}

pre.mycode code {
    font-family: Menlo, "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, Consolas, monospace;
    font-size: 15px; /* ろりhpのデフォルトが15.2なので気持ち小さめに。 */
}

pre.mycode code:first-line {
    line-height: 0px;
}

pre.beige {
    background: #f3e9dd;
}

pre.lightgreen {
    background: #ebf9cb;
}

使い方。
<pre class="mycode lightgreen"><code class="prettyprint">
# ここにスクリプトを書く。
</code></pre>



さらにガッツリ装飾したり、行番号をつけたり背景色ごと変更するのも主流みたいだったけれど、この程度のあっさり具合がろりhpに合うと思ったんでこのくらいで。


| 緑色 | プログラミング | comments(0) |
| カテゴリ:プログラミング |
Python プログラミング問題をやってみた2 後半戦



先回の続き。



4. ボックスサイズ
単位がセンチメートルの3つの引数をとり、体積を計算しリットルとして返す関数をかけ。
def problem4(cm1, cm2, cm3):

    # 値チェックします。
    cm = [cm1, cm2, cm3]
    for c in cm:
        if not (isinstance(c, int) or isinstance(c, float)):
            print(f'引数はintかfloatにしてよー: {c}')

    # Decimal化します。
    import decimal
    cm = map(lambda c: decimal.Decimal(str(c)), cm)

    # 立方センチメートル出します。reduceってのはなんか配列を片っ端から処理してくれるやつ。
    import functools
    cubic_cm = functools.reduce(lambda x, y: x * y, cm)

    # リットルに変換します。1000立方cm = 1.0リットル。
    return cubic_cm / 1000

実行結果。
print(problem4(2.0, 2.0, 2.0), end='\n')
print(problem4(10.0, 10.0, 10.0), end='\n')
print(problem4(123.4, 123.4, 123.4), end='\n')
print(problem4(2, 2, 2), end='\n')
----------
0.008
1.000
1879.080904
0.008

先回知った Decimal を早速使っちゃったぜ。モジュールを使用しちゃうのはちとずっこい感じがしたんだけれど、問題2があまりに面倒だったからさ……。で、1個インポートしたら2個も3個も一緒でしょと functools も使っちゃったぜ。map関数も使っているし lambda にも慣れてきたぜ。



5. 最悪のFizzBuzz
最悪の - しかし動作する - FizzBuzzプログラムをかけ。

こういうの大喜利みたいで楽しいね。ふたとおり作ってみた。

def problem5(start, end):

    # ■ 最悪POINT 1: 変数名が日本語。ぞわっとするー!
    結果リスト = []

    # ■ 最悪POINT 2: 一回しか使わない変数をわざわざ作成してる。意味ねー!
    end2 = end + 1
    for i in range(start, end2):

        # ■ 最悪POINT 3: 真偽用の変数を作るにしてもboolじゃなく文字列を使用してる。Falseにしとけー!
        iは3の倍数です = 'いいえ'
        iは5の倍数です = 'いいえ'

        # ■ 最悪POINT 4: 3の倍数の求め方が「ずっと3を足していって該当したら」。頭わるそー!
        three = 3
        while True:
            # ■ 最悪POINT 5: コードを見れば分かることをわざわざ説明するコメントを書いてる。意味ねー!
            # threeがiと同じときiは3の倍数ですを'はい'にする。threeがiより大きくなっちゃったらwhileを終了。
            if three == i:
                iは3の倍数です = 'はい'
            elif three > i:
                break
            # ■ 最悪POINT 6: three += 3 という書き方を知らない。知っとけー!
            three = three + 3

        # ■ 最悪POINT 7: 上と同じような処理なのに関数化してない。しとけー!
        five = 5
        while True:
            if five == i:
                iは5の倍数です = 'はい'
            elif five > i:
                break
            # ■ 最悪POINT 8: って、+=知ってんのかよ! だったら上のも += 3 にしろよ!
            five += 5

        # ■ 最悪POINT 9: 無駄に ! を使ってる。この場合 == 'はい' にするべき。
        if iは3の倍数です != 'いいえ':
            if iは5の倍数です != 'いいえ':
                結果リスト.append('FizzBuzz')
                continue

        # ■ 最悪POINT 10: このあたりは if elif でまとめればいいのにばらばらにifしてる。
        if iは3の倍数です != 'いいえ':
            結果リスト.append('Fizz')
            continue

        if iは5の倍数です != 'いいえ':
            結果リスト.append('Buzz')
            continue

        # ■ 最悪POINT 11: ここまで処理が進むってことは絶対両方 'いいえ' なのにわざわざifに入れてる。意味ねー!
        if iは5の倍数です == 'いいえ':
            if iは3の倍数です == 'いいえ':
                結果リスト.append(str(i))

    # ■ 最悪POINT 12: for部が長すぎる!

    結果の文字列 = ''
    # ■ 最悪POINT 13: すごくダメな例外処理の使い方してる。で、出た〜〜w except pass 奴〜〜ww
    try:
        i = 0
        while True:
            結果の文字列 = 結果の文字列 + 結果リスト[i] + ','
            i += 1
    except:
        pass

    return 結果の文字列
昔の俺が書いてたようなpython」がテーマだ。初心者あるあるを詰め込んだようなFizzbuzz。
もう片方は逆に、いまの俺じゃないと書けないpython
def problem5(start, end):
    # ■ 最悪POINT: ワンラインで読みづらい(横長になりすぎないよう改行はしてる)。
    return list(
        map(
            lambda i:
                str(i)
                if (i % 3 and i % 5)
                else ('' if i % 3 else 'Fizz') + ('' if i % 5 else 'Buzz'),
            range(start, end + 1))
    )
最近覚えた高階関数や三項演算子をバリバリ使って一行Fizzbuzzを作ってみた。上のより高度ではあるけど、クッソ読みづらいから逆に最悪と言っていいんじゃね?

実行結果。
print(problem5(1, 10), end='\n')
print(problem5(100, 110), end='\n')
print(problem5(1500, 1510), end='\n')
----------
1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,
Buzz,101,Fizz,103,104,FizzBuzz,106,107,Fizz,109,Buzz,
FizzBuzz,1501,1502,Fizz,1504,Buzz,Fizz,1507,1508,Fizz,Buzz,


| 緑色 | プログラミング | comments(0) |
   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 2017 >>
+ みろりHP内検索
+ 閲覧記事
+ 過去記事アーカイブ
+ カテゴリ
+ 年月選択
  • 2017年 11月 (7)
  • 2017年 10月 (4)
  • 2017年 09月 (6)
  • 2017年 08月 (6)
  • 2017年 07月 (8)
  • 2017年 06月 (4)
  • 2017年 05月 (7)
  • 2017年 04月 (8)
  • 2017年 03月 (7)
  • 2017年 02月 (10)
  • 2017年 01月 (6)
  • 2016年 12月 (8)
  • 2016年 11月 (8)
  • 2016年 10月 (5)
  • 2016年 09月 (5)
  • 2016年 08月 (7)
  • 2016年 07月 (9)
  • 2016年 06月 (6)
  • 2016年 05月 (8)
  • 2016年 04月 (10)
  • 2016年 03月 (10)
  • 2016年 02月 (8)
  • 2016年 01月 (9)
  • 2015年 12月 (9)
  • 2015年 11月 (6)
  • 2015年 10月 (5)
  • 2015年 09月 (4)
  • 2015年 08月 (8)
  • 2015年 07月 (5)
  • 2015年 06月 (3)
  • 2015年 05月 (7)
  • 2015年 04月 (8)
  • 2015年 03月 (12)
  • 2015年 02月 (8)
  • 2015年 01月 (4)
  • 2014年 12月 (5)
  • 2014年 11月 (5)
  • 2014年 10月 (7)
  • 2014年 09月 (4)
  • 2014年 08月 (7)
  • 2014年 07月 (6)
  • 2014年 06月 (4)
  • 2014年 05月 (12)
  • 2014年 04月 (9)
  • 2014年 03月 (6)
  • 2014年 02月 (6)
  • 2014年 01月 (8)
  • 2013年 12月 (7)
  • 2013年 11月 (10)
  • 2013年 10月 (10)
  • 2013年 09月 (9)
  • 2013年 08月 (11)
  • 2013年 07月 (10)
  • 2013年 06月 (9)
  • 2013年 05月 (15)
  • 2013年 04月 (11)
  • 2013年 03月 (5)
  • 2013年 02月 (7)
  • 2013年 01月 (6)
  • 2012年 12月 (9)
  • 2012年 11月 (10)
  • 2012年 10月 (10)
  • 2012年 09月 (4)
  • 2012年 08月 (2)
  • 2012年 07月 (7)
  • 2012年 06月 (13)
  • 2012年 05月 (13)
  • 2012年 04月 (15)
  • 2012年 03月 (4)
  • 2012年 02月 (12)
  • 2012年 01月 (9)
  • 2011年 12月 (5)
  • 2011年 11月 (13)
  • 2011年 10月 (2)
  • 2011年 09月 (2)
  • 2011年 08月 (1)
  • 2011年 06月 (1)
  • 2011年 05月 (4)
  • 2011年 04月 (10)
  • 2011年 03月 (8)
  • 2011年 02月 (11)
  • 2011年 01月 (14)
  • 2010年 12月 (14)
  • 2010年 11月 (17)
  • 2010年 10月 (17)
  • 2010年 09月 (19)
  • 2010年 08月 (22)
  • 2010年 07月 (18)
  • 2010年 06月 (16)
  • 2010年 05月 (19)
  • 2010年 04月 (15)
  • 2010年 03月 (22)
  • 2010年 02月 (18)
  • 2010年 01月 (18)
  • 2009年 06月 (2)
  • 2009年 04月 (1)
  • 2007年 12月 (10)
  • 2007年 11月 (7)
  • 2007年 10月 (9)
  • 2007年 09月 (4)
  • 2007年 07月 (5)
  • 2007年 06月 (11)
  • 2007年 05月 (6)
  • 2007年 04月 (4)
  • 2006年 01月 (20)
  • + ブックマーク
    + 最近のコメント
    + アクセスカウンター
    全体(since 2010.02.03.)
    今日… 昨日…