毎日、本のコードをpythonのして備忘録書き綴っていこうと
思っていたら早速3日坊主になってしまった。
本の演習問題を解くことが最初の目的だったけど、たどり着くまでに
僕の頭では理解が時間がかかるので解答あり(C++)でも
自分なりにpythonにして更新してみます。(もっと理解早い頭が欲しい。。)
まあ、でも書くしか理解できないから続けてみます。
(是非とも壮大なツッコミとともにコードへのご意見お待ちしてます)
コピペってとこも情けないですけど書いてみます
2.3入力の処理/問題:「ルーンチェックサムの検証」
>ルーン式は、識別番号の検証によく使われる方式だ。元の数字の各桁に対して、1桁おきにその数字を2倍する。そのあとで、各桁の数字を足していく(2倍した結果が2桁になる数字があれば、十の位と一の位をそれぞれ個別に足していく)。その合計が10で割り切れる場合に、識別番号は妥当なものであると見なす。 任意の長さの識別番号を受け取り、その値がルーン式で妥当かどうかを調べるプログラムを書こう。このプログラムでは、1つの桁を読み込んだら次の桁に進む前に、その桁の処理をすませなければいけない。 問題に出てくる識別番号は:176248いきなり大きな問題の答えが導けないので
・・・昨日1日ここでストップ。。。最後のコードが大きすぎて(自分には)
とりあえず本にも記載がある通り対処すべき4つの課題を1個づつ進める
- どの桁を2倍にすればいいのかを知る
- 2倍した結果が2桁になったときに、それぞれの桁を個別に扱う
- 数値を最後まで読み終えたことを知る
- 各桁を個別に読み込む
小問題:2倍した結果が2桁になったときに、それぞれの桁を個別に扱う
C++の解答(本より)
int doubleDigitValue(int digit){
int doubledDigit = digit * 2
int sum;
if (doubledDigit >= 10) sum = 1 + doubledDigit % 10;
else sum = dubledDigit;
return sum;
僕のPythonなら
:test.py
#!/usr/bin/env python
#coding:utf-8
def doubleDigitValue(digit):
doubledDigit = digit * 2
if (doubledDigit >= 10):
sum = 1 + doubledDigit % 10 //間違えていたので訂正しました(汗(さらに修正4/15
else:
sum = doubledDigit
return sum
・・・
>>> from test import doubleDigitValue
>>> doubleDigitValue(7)
5
なんの工夫もできませんでしたが、とりあえず予定通り動いた。