簡體   English   中英

如何在Python中使用raw_input()在某個字符后停止從用戶讀取輸入?

[英]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. 將輸入拆分為以空格分隔的令牌
  2. 獲取令牌,直到遇到-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM