Cでは、
while( (i=a) != b ) { }
しかし、Pythonでは、表示されません。
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...
これは、組み込み関数 iter()
を使用して2つの引数の呼び出しメソッドを使用して実現できます。
_import functools
for i in iter(fuctools.partial(sys.stdin.read, 1), '\n'):
...
_
このためのドキュメント:
iter(o[, sentinel])
.。
2番目の引数sentinelが指定されている場合、o呼び出し可能なオブジェクトである必要があります。この場合に作成されたイテレータは、oを呼び出し、そのnext()
メソッドへの呼び出しごとに引数はありません。 ;返される値がsentinelと等しい場合、StopIteration
が発生します。それ以外の場合、値が返されます。 。
iter()
の2番目の形式の1つの便利なアプリケーションは、特定の行に到達するまでファイルの行を読み取ることです。次の例では、readline()
メソッドが空の文字列を返すまでファイルを読み取ります。
_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'):
_Python 3.8
_を開始し、 代入式(PEP 572) (_:=
_演算子)を導入すると、式の値を取得できるようになりました(ここではsys.stdin.read(1)
)while
の本体内で使用するための変数として:
_while (i := sys.stdin.read(1)) != '\n':
do_smthg(i)
_
この:
sys.stdin.read(1)
を変数i
に割り当てますi
を_\n
_と比較しますwhile
を使用できるi
本文を入力します個人的には、break
を使用したimmとMarksの回答が好きですが、次のこともできます。
a = None
def set_a(x):
global a
a = x
return a
while set_a(sys.stdin.read(1)) != '\n':
print('yo')
私はそれをお勧めしませんが。