、1は割り当て条件Cのループ
while((i=a) != b) { }
が、Pythonで操作を行うことができますが、それは1つができない、表示されます。
while (i = sys.stdin.read(1)) != "\n":
は
while (i = sys.stdin.read(1)) != "\n":
^
SyntaxError: invalid syntax
を生成する(^
が=
にする必要があります)
回避策はありますか?
、1は割り当て条件Cのループ
while((i=a) != b) { }
が、Pythonで操作を行うことができますが、それは1つができない、表示されます。
while (i = sys.stdin.read(1)) != "\n":
は
while (i = sys.stdin.read(1)) != "\n":
^
SyntaxError: invalid syntax
を生成する(^
が=
にする必要があります)
回避策はありますか?
使用ブレイク:個人的に
while True:
i = sys.stdin.read(1)
if i == "\n":
break
# etc...
ありがとう!作品:) – tekknolagi
休憩と無限のwhileループ?本当に?それは燃える... –
@FalconMomotこれは私にとって完全に合理的なパターンのようです。ループがどこで壊れているかは重要です。終了条件が発生するか、終了条件が発生します。 'i ==" \ n "'がループ内で発生しない(ブレークを引き起こす)場合、whileループの条件引き数でも起こらないでしょう。 – vastlysuperiorman
私はbreak
を使用してIMMのとマーク答えを好きですが、あなたも行うことができます:
a = None
def set_a(x):
global a
a = x
return a
while set_a(sys.stdin.read(1)) != '\n':
print('yo')
私はそれをお勧めしませんけれども。
次の2つの引数の呼び出し方法使用して組み込み関数iter()
を使ってこれを実現することができます。このため
import functools
for i in iter(fuctools.partial(sys.stdin.read, 1), '\n'):
...
ドキュメント:
iter(o[, sentinel])
...
た場合を2番目の引数のセンチネルが指定されている場合、は呼び出し可能なob ject。この場合作成されたイテレータは、next()
メソッドへの呼び出しごとに、引数なしでoを呼び出します。返される値がのセンチネルに等しい場合はStopIteration
が返されます。そうでない場合は値が返されます。の第2の形式の有用な用途の1つは、ある行に達するまでファイルの行を読み出すことです。
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
functools
なしのバージョン:
for i in iter(lambda: sys.stdin.read(1), '\n'):
'sys.stdin.readline(' –
ああそれは厄介だ)..
readline()
メソッドは空の文字列を返すまで次の例では、ファイルを読み込み、 'readline()'と 'raw_input()'はどう違うのですか? – tekknolagi@tekknolagi彼はおそらくあなたのコメントを受け取りませんでした。コメントテキストに '@ name'を追加して人にpingを実行するとよいでしょう。 – ovgolovin