MySQLのこと。

MySQLのことについてまとめているブログ。他人に見せる用でもなく、自分の勉強備忘録。検索インデックスも外してるので、辿りついた方・・・ようこそ。そんな大した情報ないですよ?!たまにアルゴリズムの練習も

総和を求めるループの繰り返し過程を出力したい。

問題

正の整数のリストが渡されたときに、そのリストの総和を計算し、その計算過程を出力させるというもの。

input: [1,2,3,4,5]

output: 1+2+3+4+5=15

実装

まずは総和を計算するコードを書いてみる。


numbers = [1,2,3,4,5]

sum = 0
for i in range(len(numbers)):
    sum += numbers[i]

print(sum)
15

難しいことはない。ここからどうやって、計算過程を出力するのか考える。+だけならまだしも、=も出力するの必要がある。試しに=を考えずにやってみると、最後の4のあとの+=に変えて、その後は総和を表示すれば目的を達成できそう。今回は非負の整数が対象なので、これで良さそう。


numbers = [1,2,3,4,5]
sum = 0

for i in range(len(numbers)):
    sum += numbers[i]
    print('{} +'.format(i), end=' ')

0 + 1 + 2 + 3 + 4 + 

イメージはこんな感じ。 f:id:AZUMINO:20210124142630j:plain


import random

def sum_process_v1(numbers):
    len_numbers = len(numbers)
    sum = 0

    for i in range(len_numbers):
        if i < len_numbers-1:
            print('{} +'.format(numbers[i]), end=' ')
            sum += numbers[i]
        else:
            print('{} ='.format(numbers[i]), end=' ')
            sum += numbers[i]
    else:
        print('{}'.format(sum), end=' ')


if __name__ == '__main__':
    nums = [1,2,3,4,5]
    sum_process_v1(nums)
    print()
    nums = [random.randint(1,10) for _ in range(5)]
    sum_process_v1(nums)

1 + 2 + 3 + 4 + 5 = 15 
7 + 10 + 1 + 7 + 9 = 34 

なんか面倒な感じである。いっそのこと、こうしたほうが、ifの判定回数も減るので良いかも。


import random

def sum_process_v2(numbers):
    sum = 0
    len_numbers = len(numbers)
    
    for i in range(0, len_numbers-1):
        print('{} +'.format(numbers[i]), end=' ')
        sum += numbers[i]

    print('{} ='.format(numbers[len_numbers-1]), end=' ')
    sum += numbers[len_numbers-1]

    print('{}'.format(sum), end=' ')


if __name__ == '__main__':
    nums = [1,2,3,4,5]
    sum_process_v2(nums)
    print()
    nums = [random.randint(1,10) for _ in range(5)]
    sum_process_v2(nums)


1 + 2 + 3 + 4 + 5 = 15 
3 + 9 + 8 + 4 + 9 = 33