回答編集履歴

3

追記

2018/02/19 12:37

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -56,4 +56,20 @@
56
56
  print(row)
57
57
  ```
58
58
 
59
- 慣れるまでは前者を使った方が分かりやすいかもしれませんね。
59
+ 慣れるまでは前者を使った方が分かりやすいかもしれませんね。
60
+
61
+ ---
62
+ 忘れてた。
63
+ **真の意味で、文字列を返す関数**
64
+ ```Python
65
+ def multi_number(num):
66
+ ret = ''
67
+ for i in range(num):
68
+ ret += str(num) * (num-i) + '\n'
69
+ return ret[:-1]
70
+
71
+ print(multi_number(3))
72
+ ```
73
+
74
+ ret[:-1]したのは最後に改行が重複するのを防ぐためです。
75
+ retのまま返して、print関数の引数endに空文字列を指定するのもアリです。

2

追記

2018/02/19 12:36

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -26,4 +26,34 @@
26
26
 
27
27
  この場合行数は関係ないです。
28
28
 
29
- ※ Pythonでは、『戻り値なしの関数の戻り値』はNoneになります。ややこしい。
29
+ ※ Pythonでは、『戻り値なしの関数の戻り値』はNoneになります。ややこしい。
30
+
31
+ コメントを受けて
32
+ ---
33
+ multi_numberを文字列を返す関数にしてみましょう。
34
+
35
+ **リストを返す場合**
36
+ ```Python
37
+ def multi_number(num):
38
+ ret = []
39
+ for i in range(num):
40
+ ret.append(str(num) * (num-i))
41
+ return ret
42
+
43
+ print(*multi_number(3), sep='\n')
44
+ # 普通にfor文でぶん回しても良い
45
+ # for row in multi_number(3):
46
+ # print(row)
47
+ ```
48
+
49
+ **ジェネレータ関数にする場合**
50
+ ```Python
51
+ def multi_number(num):
52
+ for i in range(num):
53
+ yield str(num) * (num-i)
54
+
55
+ for row in multi_number(3):
56
+ print(row)
57
+ ```
58
+
59
+ 慣れるまでは前者を使った方が分かりやすいかもしれませんね。

1

追記

2018/02/19 12:17

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  nums_4は文字列ですが、mult_number(4)はNoneです。※
2
- 同じように表示されるからと言って同値だとは全く言えないです。
2
+ 対話環境で同じように表示されるからと言って同値だとは全く言えないです。
3
3
  ```Python
4
4
  >>> "aaa"
5
5
  'aaa'
@@ -11,6 +11,19 @@
11
11
  >>> type(print("aaa"))
12
12
  aaa
13
13
  <class 'NoneType'>
14
+ >>>
15
+ >>> "aaa" == print("aaa")
16
+ aaa
17
+ False
18
+ >>> assert "aaa" == print("aaa")
19
+ aaa
20
+ Traceback (most recent call last):
21
+ File "<stdin>", line 1, in <module>
22
+ AssertionError
14
23
  ```
15
24
 
25
+ > 複数行の入出力をassertさせる方法がわかりません。
26
+
27
+ この場合行数は関係ないです。
28
+
16
29
  ※ Pythonでは、『戻り値なしの関数の戻り値』はNoneになります。ややこしい。