問題
正の整数のリストが渡されたときに、そのリストの総和を計算し、その計算過程を出力させるというもの。
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 +
イメージはこんな感じ。
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