質問するログイン新規登録

回答編集履歴

3

別解の追加

2021/07/25 04:48

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -44,4 +44,20 @@
44
44
 
45
45
  print(sum13([1, 2, 13, 2, 1, 13]))
46
46
  ```
47
- とにかく、書き方はいくつもあります。
47
+ とにかく、書き方はいくつもあります。
48
+
49
+ **追記3**
50
+ range も len も [i] による要素アクセスも全部なくせます。
51
+ ```Python
52
+ def sum13(nums):
53
+ if not nums:
54
+ return 0
55
+ prev = total = 0
56
+ for val in nums:
57
+ if val != 13 and prev != 13:
58
+ total += val
59
+ prev = val
60
+ return total
61
+
62
+ print(sum13([1, 2, 13, 2, 1, 13]))
63
+ ```

2

別解の追加

2021/07/25 04:48

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -26,4 +26,22 @@
26
26
  ```
27
27
 
28
28
  条件は、「13ではない、かつ 13の次ではない」であり、
29
- 「13の次ではない」は「先頭であるか、または 1つ前が 13ではない」。
29
+ 「13の次ではない」は「先頭であるか、または 1つ前が 13ではない」。
30
+
31
+ **追記2**
32
+ 条件は、「13ではない、かつ 1つ前が 13ではない」ですから、
33
+ 1つ前の値(previous value) を憶えておく変数を用意すると、
34
+ ```Python
35
+ def sum13(nums):
36
+ if not nums:
37
+ return 0
38
+ prev = total = 0
39
+ for i in range(len(nums)):
40
+ if nums[i] != 13 and prev != 13:
41
+ total += nums[i]
42
+ prev = nums[i]
43
+ return total
44
+
45
+ print(sum13([1, 2, 13, 2, 1, 13]))
46
+ ```
47
+ とにかく、書き方はいくつもあります。

1

コードの追加

2021/07/25 02:34

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -8,4 +8,22 @@
8
8
  nums[2] は 13 で else に行き、total は 2 のまま。
9
9
  nums[3] は 2 で 13 ではなく、nums[2] が 13 だから total は 2 のまま。
10
10
  nums[4] は 1 で 13 ではなく、nums[3] が 13 ではないから total は 3。
11
- nums[5] は 13 で else に行き、total は 3 のまま。
11
+ nums[5] は 13 で else に行き、total は 3 のまま。
12
+
13
+ **追記**
14
+ なぜ、3 となるかは説明しましたが、条件通りのコードとするには、
15
+ ```Python
16
+ def sum13(nums):
17
+ if not nums:
18
+ return 0
19
+ total = 0
20
+ for i in range(len(nums)):
21
+ if nums[i] != 13 and (i == 0 or nums[i-1] != 13):
22
+ total += nums[i]
23
+ return total
24
+
25
+ print(sum13([1, 2, 13, 2, 1, 13]))
26
+ ```
27
+
28
+ 条件は、「13ではない、かつ 13の次ではない」であり、
29
+ 「13の次ではない」は「先頭であるか、または 1つ前が 13ではない」。