2017-04-22 40 views
0

我有這樣的代碼(test.py):for循環sys.stdin在不斂之下用戶輸入

import sys  
for str in sys.stdin.readline(): 
    print ('Got here') 
    print(str) 

出於某種原因,當我運行程序python test.py,然後我在abc輸入到我的終端,我得到這樣的輸出:

>>abc 
THIS IS THE OUTPUT: 
Got here 
a 
Got here 
b 
Got here 
c 
Got here 

它打印出Got here五倍,它還會打印出每個人物abc單獨而不是像一個字符串。我正在做sys.stdin.readline()以獲得整條生產線,但這似乎並不奏效。有誰知道我做錯了什麼?

我是新的python,無法在其他任何地方找到這個stackoverflow,所以很抱歉,如果這是一個明顯的問題。

+0

您正在閱讀的行,然後你遍歷返回的字符串。哪裏有問題? –

+1

爲什麼不在python2中使用'input()'(或'raw_input()')? 'str'不是一個好的變量名! –

+0

@hiroprotagonist不能使用'input()'教授在我的問題中提供了使用for循環方法的示例代碼。 – CapturedTree

回答

2

您正在循環輸入的字符串中的每個字符。

import sys  
s = sys.stdin.readline() 
print ('Got here') 
print(s) 

# Now I can use string `s` for whatever I want 
print(s + "!") 

在原來的代碼,你從stdin有一個字符串,然後你通過輸入字符串中的字符不斷循環並打印出來(伴隨着「在這裏得到了」)。

編輯:

import sys 
while True: 
    s = sys.stdin.readline() 

    # Now I can do whatever I want with string `s` 
    print(s + "!") 
+0

噢,好的。我現在明白了。但是,如何使用for循環獲取整個字符串'abc'?就像我在sys.stdin中爲'line'一樣:'就像Ned建議的那樣,在我輸入abc後,終端就停留在那裏。 – CapturedTree

+0

你是說你想獲得多行輸入? – m0dem

+0

不喜歡當我運行'python test.py'後輸入'abcd'到終端中時,我想要訪問整個字符串'abc'並在for循環中的某些計算中使用它。 for循環就在那裏,所以在完成計算之後,它會繼續詢問我想的用戶輸入。 – CapturedTree

3

readline()讀取一行。然後你重複它。迭代一個字符串會爲您提供字符,因此您將爲第一行輸入中的每個字符運行一次循環。

使用.readlines(),或更好的,只是遍歷文件:

for line in sys.stdin: 

但是從標準輸入獲得交互輸入的最佳方法是使用input()(或raw_input()在Python 2)。

+0

當我改變for循環時,屏幕上沒有任何反應。就像在我輸入'abc'後,終端就停留在那裏。 – CapturedTree

+0

這是因爲緩衝。直接讀取sys.stdin不是獲取輸入的好方法。使用input()來代替。我會更新答案。 –

+0

不幸的是,我不能將它更改爲'raw_input()',因爲教授正在使用for循環方法。 – CapturedTree