Python

プログラマの考えが・・身につく本より:2倍した結果が2桁になったら各桁を合算する

More than 3 years have passed since last update.

毎日、本のコードをpythonのして備忘録書き綴っていこうと

思っていたら早速3日坊主になってしまった。

本の演習問題を解くことが最初の目的だったけど、たどり着くまでに

僕の頭では理解が時間がかかるので解答あり(C++)でも

自分なりにpythonにして更新してみます。(もっと理解早い頭が欲しい。。)

まあ、でも書くしか理解できないから続けてみます。

(是非とも壮大なツッコミとともにコードへのご意見お待ちしてます)

コピペってとこも情けないですけど書いてみます

2.3入力の処理/問題:「ルーンチェックサムの検証」


ルーン式は、識別番号の検証によく使われる方式だ。元の数字の各桁に対して、1桁おきにその数字を2倍する。そのあとで、各桁の数字を足していく(2倍した結果が2桁になる数字があれば、十の位と一の位をそれぞれ個別に足していく)。その合計が10で割り切れる場合に、識別番号は妥当なものであると見なす。

任意の長さの識別番号を受け取り、その値がルーン式で妥当かどうかを調べるプログラムを書こう。このプログラムでは、1つの桁を読み込んだら次の桁に進む前に、その桁の処理をすませなければいけない。

問題に出てくる識別番号は:176248


いきなり大きな問題の答えが導けないので

・・・昨日1日ここでストップ。。。最後のコードが大きすぎて(自分には)

とりあえず本にも記載がある通り対処すべき4つの課題を1個づつ進める



  1. どの桁を2倍にすればいいのかを知る

  2. 2倍した結果が2桁になったときに、それぞれの桁を個別に扱う

  3. 数値を最後まで読み終えたことを知る

  4. 各桁を個別に読み込む


小問題: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

なんの工夫もできませんでしたが、とりあえず予定通り動いた。