![](/img/trans.png)
[英]How to conver raw_input() from a text using int() in python
[英]How to stop reading input from user after a certain char using raw_input() in Python?
如果我使用raw_input(),它將接受所有用戶輸入。 我只想在用戶輸入“ -1”時停止輸入。
我的意思是,如果用戶輸入“ 12 22 -23 3 -1 23 -1 23”,則在輸入3之后不應該閱讀。
讀取輸入的任何其他方式也可以。
...序列永遠不會停止。 示例:1 2 -1 2 -3 -1 34 12 ...............................永不停止。 但是如果遇到-1,我必須停止閱讀。
raw_input()
始終讀取整行。
如果您不想閱讀全文 您可以嘗試使用sys.stdin.read(1)
代替:
import sys
def read_until_minus_one():
buf = []
seen_minus = False
while True:
char = sys.stdin.read(1)
if not char: # EOF
break
if char == '1' and seen_minus:
buf.pop() # chop the last minus
break # seen -1
else:
seen_minus = (char == '-')
buf.append(char)
return ''.join(buf)
print(read_until_minus_one())
12 22 -23 13 -12 23 -1 23 12
12 22 -23 13
注意:讀取-1
它將停止。 在這種情況下,后續的sys.stdin.read(1)
返回'2'
。
如果僅在遇到-1
作為以空格分隔的標記(而不是像-12
那樣作為數字的一部分)時才想停止,則可以將輸入解析分為兩個階段:
-1
#!/usr/bin/env python
import sys
from functools import partial
from itertools import takewhile
def get_tokens(stream=sys.stdin):
token = []
for char in iter(partial(stream.read, 1), ''):
if char.isspace(): # use any space as a separator
if token:
yield ''.join(token)
del token[:]
else:
token.append(char)
if token:
yield ''.join(token)
print(' '.join(takewhile(lambda s: s != '-1', get_tokens())))
12 22 -23 13 -12 23
注意:在這種情況下,它會讀取更多內容,因為在這種情況下-12
內部無法識別-1
。
注意: 在這種情況下,您不需要使用curses
或其他方式從用戶讀取單個字符 。 僅當輸入是交互式的並且要比用戶按Enter (或EOF)更早地獲取內容時才需要它。
sys.stdin
默認情況下被緩沖。 因此, .read(1)
可能在內部讀取多個字符。 如果我們(可能)是流的唯一使用者,則沒關系,因為從我們的末端開始, .read(1)
始終一次返回一個字符。
您可以在-1上分割字符串。 它將創建一個列表,並且您僅使用列表的第一個元素:
full_input = raw_input('Enter sequence:')
user_input = full_input.split('-1')
print user_input[0].strip()
輸出:
macbook:Downloads joeyoung$ python splitinput.py
Enter sequence:1 2 -1 2 -3 -1 34 12
1 2
編輯:我修改了上面的解決方案來處理-1分隔符的重復
也許msvcrt會幫助您
import msvcrt
print 'Press a to continue:\n'
inPchar = msvcrt.getch()
if inPchar.upper() == 'A':
print 'Pressed A'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.