2009-10-19 36 views
8

我熟悉input()函數,可以從用戶輸入讀取單個變量。是否有類似的簡單方法來讀取兩個變量?用Python在一行中讀取兩個變量

我在尋找等價的:

scanf("%d%d", &i, &j); // accepts "10 20\n" 

的一種方式,我能夠做到這一點是使用raw_input()然後split輸入的內容。有沒有更優雅的方式?

這不適合實時使用。只是爲了學習..

回答

27

否,通常的方式是raw_input().split()

在你的情況,如果你想他們是整數,而不是字符串

不要使用input()對於您可能使用map(int, raw_input().split())。考慮一下,如果用戶輸入

import os;os.system('do something bad')

+4

請注意,從Python 3.0開始,'raw_input'被重命名爲'input'。 (爲了得到'input'的原始行爲,使用'eval(input)'。) – Stephan202 2009-10-19 11:09:08

+0

...應該是「apply'eval'到'input'的輸出。 – Stephan202 2009-10-19 11:12:32

+0

是的,3中的明顯行爲要好得多,但我希望他們已經將這些更改的一些警告放到了2.6中。我想我需要學習升級指導 – 2009-10-19 11:23:02

9

您還可以閱讀從sys.stdin

import sys 

a,b = map(int,sys.stdin.readline().split()) 
4

我是新在這個東西,以及會發生什麼。從python.org網站進行了一些研究,並進行了一些黑客行爲以使其發揮作用。 raw_input函數又回來了,從改爲。這是我想出了:

i,j = raw_input("Enter two values: ").split 
i = int(i) 
j = int(j) 

當然,代碼是沒有用C的的scanf或單行優雅C++的CIN。 Python代碼看起來更接近於Java(它採用與C,C++或Python完全不同的機制),因此每個變量都需要分別處理。

在Python中,的raw_input函數獲得字符關閉控制檯,並將它們連接成一個單一的字符串作爲其輸出。當只有一個變量賦值運算符的左手側發現,該分裂功能打破了這種字符串字符串值的列表

在我們的例子中,我們期望兩個變量,我們可以使用逗號分隔的列表爲他們的標識符獲取值。 字符串值然後分配到列出的變量。如果我們想要做算術與這些價值,我們需要將它們轉換成使用Python的內置INT浮動功能數字INT(或浮動)數據類型。

我知道這篇文章是對一個很老的帖子的回覆,可能知識已經在那裏作爲「常識」一段時間了。不過,我會欣賞這樣的發佈,而不是花費幾個小時的搜索和黑客攻擊,直到我想出了我認爲可以在CS1教室中呈現的最優雅的解決方案。

1

首先閱讀完整的線成一個字符串象

string = raw_input() 

然後使用for循環這樣

prev = 0 
    lst = [] 
    index = 0 
    for letter in string : 
     if item == ' ' or item == '\n' : 
      lst.append(int(string[prev:index]) 
      prev = index + 1 

此環路採用實線作爲輸入提供給串並處理部件在它將它們單獨添加到列表中,然後將它們轉換爲整數。

0

,或者你可以做到這一點

input_user=map(int,raw_input().strip().split(" ")) 
0

,你可以通過在Python 3.6.1

n,m = map(int,input().strip().split(" ")) 
+2

您可以添加對代碼的解釋以及它解決問題的原因嗎?*僅限代碼*答案通常沒有幫助。 – Zabuza 2017-08-28 17:32:53

0

使用這個,你也可以使用此方法對於任何數量的輸入讀取2個INT值。考慮以下三個以空格分隔的輸入:

import sys 

S = sys.stdin.read() 
S = S.split() 
S = [int(i) for i in S] 
l = S[0] 
r = S[1] 
k = S[2] 
相關問題