LouiS0616 score 30281
2018/02/19 21:36 投稿
nums_4は文字列ですが、mult_number(4)はNoneです。※ |
対話環境で同じように表示されるからと言って同値だとは全く言えないです。 |
```Python |
>>> "aaa" |
'aaa' |
>>> print("aaa") |
aaa |
>>> |
>>> type("aaa") |
<class 'str'> |
>>> type(print("aaa")) |
aaa |
<class 'NoneType'> |
>>> |
>>> "aaa" == print("aaa") |
aaa |
False |
>>> assert "aaa" == print("aaa") |
aaa |
Traceback (most recent call last): |
File "<stdin>", line 1, in <module> |
AssertionError |
``` |
> 複数行の入出力をassertさせる方法がわかりません。 |
この場合行数は関係ないです。 |
※ Pythonでは、『戻り値なしの関数の戻り値』はNoneになります。ややこしい。 |
コメントを受けて |
--- |
multi_numberを文字列を返す関数にしてみましょう。 |
**リストを返す場合** |
```Python |
def multi_number(num): |
ret = [] |
for i in range(num): |
ret.append(str(num) * (num-i)) |
return ret |
print(*multi_number(3), sep='\n') |
# 普通にfor文でぶん回しても良い |
# for row in multi_number(3): |
# print(row) |
``` |
**ジェネレータ関数にする場合** |
```Python |
def multi_number(num): |
for i in range(num): |
yield str(num) * (num-i) |
for row in multi_number(3): |
print(row) |
``` |
慣れるまでは前者を使った方が分かりやすいかもしれませんね。 |
慣れるまでは前者を使った方が分かりやすいかもしれませんね。 |
--- |
忘れてた。 |
**真の意味で、文字列を返す関数** |
```Python |
def multi_number(num): |
ret = '' |
for i in range(num): |
ret += str(num) * (num-i) + '\n' |
return ret[:-1] |
print(multi_number(3)) |
``` |
ret[:-1]したのは最後に改行が重複するのを防ぐためです。 |
retのまま返して、print関数の引数endに空文字列を指定するのもアリです。 |
LouiS0616 score 30281
2018/02/19 21:17 投稿
nums_4は文字列ですが、mult_number(4)はNoneです。※ |
対話環境で同じように表示されるからと言って同値だとは全く言えないです。 |
```Python |
>>> "aaa" |
'aaa' |
>>> print("aaa") |
aaa |
>>> |
>>> type("aaa") |
<class 'str'> |
>>> type(print("aaa")) |
aaa |
<class 'NoneType'> |
>>> |
>>> "aaa" == print("aaa") |
aaa |
False |
>>> assert "aaa" == print("aaa") |
aaa |
Traceback (most recent call last): |
File "<stdin>", line 1, in <module> |
AssertionError |
``` |
> 複数行の入出力をassertさせる方法がわかりません。 |
この場合行数は関係ないです。 |
※ Pythonでは、『戻り値なしの関数の戻り値』はNoneになります。ややこしい。 |
※ Pythonでは、『戻り値なしの関数の戻り値』はNoneになります。ややこしい。 |
コメントを受けて |
--- |
multi_numberを文字列を返す関数にしてみましょう。 |
**リストを返す場合** |
```Python |
def multi_number(num): |
ret = [] |
for i in range(num): |
ret.append(str(num) * (num-i)) |
return ret |
print(*multi_number(3), sep='\n') |
# 普通にfor文でぶん回しても良い |
# for row in multi_number(3): |
# print(row) |
``` |
**ジェネレータ関数にする場合** |
```Python |
def multi_number(num): |
for i in range(num): |
yield str(num) * (num-i) |
for row in multi_number(3): |
print(row) |
``` |
慣れるまでは前者を使った方が分かりやすいかもしれませんね。 |
LouiS0616 score 30281
2018/02/19 20:38 投稿
nums_4は文字列ですが、mult_number(4)はNoneです。※ |
```Python |
>>> "aaa" |
'aaa' |
>>> print("aaa") |
aaa |
>>> |
>>> type("aaa") |
<class 'str'> |
>>> type(print("aaa")) |
aaa |
<class 'NoneType'> |
>>> |
>>> "aaa" == print("aaa") |
aaa |
False |
>>> assert "aaa" == print("aaa") |
aaa |
Traceback (most recent call last): |
File "<stdin>", line 1, in <module> |
AssertionError |
``` |
> 複数行の入出力をassertさせる方法がわかりません。 |
この場合行数は関係ないです。 |
※ Pythonでは、『戻り値なしの関数の戻り値』はNoneになります。ややこしい。 |