回答編集履歴

2

正しい内容に修正

2019/05/25 22:23

投稿

hayataka2049
hayataka2049

スコア30939

test CHANGED
@@ -1,5 +1,91 @@
1
- 標準出力はバッファリングさますので、出力タイミングが意図してたものずれたするのはよくあります。
1
+ 一番最後の行の末尾に改行を入れいとそうなります。
2
2
 
3
3
 
4
4
 
5
+ 標準入力の立場から考えると、
6
+
7
+
8
+
9
+ ```
10
+
11
+ Tellurocysteine
12
+
13
+ Theramine
14
+
15
+ Beta-2-Thienylalanine
16
+
17
+ Thiotaurine # ここまでは改行してくれた
18
+
19
+ Thyronine # これは改行がついてない
20
+
21
+ ```
22
+
23
+
24
+
25
+ という状態です。一方、`input`は「改行まで読んで行を返す」関数なので、そのループは
26
+
27
+
28
+
29
+ ```
30
+
31
+ Tellurocysteine
32
+
33
+ Theramine
34
+
35
+ Beta-2-Thienylalanine
36
+
37
+ Thiotaurine
38
+
39
+ ```
40
+
41
+ を吐き出して止まります。
42
+
43
+
44
+
45
+ この間、標準入力の立場は、
46
+
47
+
48
+
49
+ ```
50
+
51
+ Tellurocysteine
52
+
53
+ Theramine
54
+
55
+ Beta-2-Thienylalanine
56
+
57
+ Thiotaurine # ここまでは改行してくれたから仕事が終わったよ
58
+
59
+ Thyronine # はやく改行してくれないかなー
60
+
61
+ ```
62
+
63
+ のまま変わりません。ただし、標準出力側に`print`されてしまったときに
64
+
65
+
66
+
67
+ ```
68
+
69
+ Tellurocysteine
70
+
71
+ Theramine
72
+
73
+ Beta-2-Thienylalanine
74
+
75
+ Thiotaurine
76
+
5
- `print(l)`が実行されたあと、次のループに入る前に`sys.stdout.flush()`呼んでみればよかもしれません。
77
+ ThyronineTellurocysteine # ここに注意。inputのプロンプトは改行出力しないが、その後に続printが改行を吐き出してい
78
+
79
+ Theramine
80
+
81
+ Beta-2-Thienylalanine
82
+
83
+ Thiotaurine # ここも当然printなので改行される
84
+
85
+ # ここで入力待ち状態
86
+
87
+ ```
88
+
89
+
90
+
91
+ という状態でプロンプトが流れ去っています。なので、空行を打ち込むように見えます。

1

追記

2019/05/25 22:23

投稿

hayataka2049
hayataka2049

スコア30939

test CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
 
4
4
 
5
- `print(l)`が実行されたあと、`sys.stdout.flush()`をんでみればよくなるかもしれません。
5
+ `print(l)`が実行されたあと、次のループに入る前に`sys.stdout.flush()`をんでみればよくなるかもしれません。