在C,一個可以做分配條件While循環
while((i=a) != b) { }
但在Python,它的出現,缺一不可。
while (i = sys.stdin.read(1)) != "\n":
產生
while (i = sys.stdin.read(1)) != "\n":
^
SyntaxError: invalid syntax
(在^
應在=
)
有沒有解決辦法?
在C,一個可以做分配條件While循環
while((i=a) != b) { }
但在Python,它的出現,缺一不可。
while (i = sys.stdin.read(1)) != "\n":
產生
while (i = sys.stdin.read(1)) != "\n":
^
SyntaxError: invalid syntax
(在^
應在=
)
有沒有解決辦法?
使用break:
while True:
i = sys.stdin.read(1)
if i == "\n":
break
# etc...
謝謝!作品:) – tekknolagi
無限同時循環休息?真?它燃燒... –
@FalconMomot這對我來說似乎是一個完全合理的模式。環路破裂的地方有什麼關係?要麼終止條件會發生,要麼不會。如果'i ==「\ n」'在循環內部沒有發生(導致中斷),它也不會在while循環的條件參數中發生。 – vastlysuperiorman
個人而言,我喜歡IMM的使用break
標誌的答案,但你也可以這樣做:
a = None
def set_a(x):
global a
a = x
return a
while set_a(sys.stdin.read(1)) != '\n':
print('yo')
雖然我不會推薦它。
您可以使用內置的功能iter()
使用兩個參數調用方法做到這一點:
import functools
for i in iter(fuctools.partial(sys.stdin.read, 1), '\n'):
...
文檔本:
iter(o[, sentinel])
...
如果第二個參數,哨點,給出,然後o必須是一個可調用的ob JECT。在這種情況下創建的迭代器將調用或,並且每次調用其next()
方法時都不會有參數;如果返回的值等於哨兵,則會引發StopIteration
,否則返回該值。
iter()
的第二種形式的一個有用的應用是讀取文件的行,直到達到某一行。下面的示例讀取文件,直到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'):
'sys.stdin.readline()' –
哦,那是尷尬.. 。readline()如何與'raw_input()'比較? – tekknolagi
@tekknolagi他可能沒有收到您的評論。通過在評論文本中添加'@ name'來ping一個人是個好主意。 – ovgolovin