回答編集履歴

3

追記

2018/10/01 14:17

投稿

katoy
katoy

スコア22324

test CHANGED
@@ -79,3 +79,55 @@
79
79
 
80
80
 
81
81
  計算と print を行うことを1つのメソッドにまとめてしまえば、確実に数列の値は確実に表示されます。
82
+
83
+
84
+
85
+ 追記:
86
+
87
+ ループのなかで 数列の計算と print をするから、いろいろと混乱するのです。
88
+
89
+ 数列の生成を generator にして、 ループ本体を print だけにするとスッキリします。
90
+
91
+ c_gen.py
92
+
93
+ ```python3
94
+
95
+ def collatz(number):
96
+
97
+ while True:
98
+
99
+ yield number
100
+
101
+ if number == 1:
102
+
103
+ return None
104
+
105
+
106
+
107
+ if number % 2 == 0:
108
+
109
+ number = int(number / 2)
110
+
111
+ else:
112
+
113
+ number = int(3 * number + 1)
114
+
115
+
116
+
117
+ for i in collatz(int(input("整数を入力してください。:"))):
118
+
119
+ print(i)
120
+
121
+
122
+
123
+ # for i in range(1, 100):
124
+
125
+ # nums = [x for x in collatz(i)]
126
+
127
+ # print(i, ":", nums)
128
+
129
+ ```
130
+
131
+ 実行例
132
+
133
+ ![イメージ説明](1ed288b0b6c9d250f75fc9a511d85c95.png)

2

追記

2018/10/01 14:17

投稿

katoy
katoy

スコア22324

test CHANGED
@@ -35,3 +35,47 @@
35
35
  while のなかでは、 1 度だけ collatz メソッドを呼ぶようになっているべきです。
36
36
 
37
37
  また、number を print した後に ==1 か? を判定するようにしないと1 は print されません。
38
+
39
+
40
+
41
+ while True をつかうのが嫌なら、こんなふうにする案もあります。
42
+
43
+ ```python3
44
+
45
+ def collatz(number):
46
+
47
+ if number % 2 == 0:
48
+
49
+ return int(number / 2)
50
+
51
+ else:
52
+
53
+ return int(3 * number + 1)
54
+
55
+
56
+
57
+ def calc_and_print(number):
58
+
59
+ ret = collatz(number)
60
+
61
+ print(ret)
62
+
63
+ return ret
64
+
65
+
66
+
67
+ print('整数を入力してください。')
68
+
69
+ number = int(input())
70
+
71
+
72
+
73
+ while number != 1:
74
+
75
+ number = calc_and_print(number)
76
+
77
+ ```
78
+
79
+
80
+
81
+ 計算と print を行うことを1つのメソッドにまとめてしまえば、確実に数列の値は確実に表示されます。

1

脱字

2018/09/30 16:44

投稿

katoy
katoy

スコア22324

test CHANGED
@@ -32,6 +32,6 @@
32
32
 
33
33
 
34
34
 
35
- while のなかでは、 1 度だけ collatz メソッドを呼ぶようになっていべきです。
35
+ while のなかでは、 1 度だけ collatz メソッドを呼ぶようになっていべきです。
36
36
 
37
37
  また、number を print した後に ==1 か? を判定するようにしないと1 は print されません。