2012-07-13 151 views
1

我試圖寫一些東西,檢查整數(z)是否在x和y的範圍內,x是最小值,y是最大值。我通過檢查z是小於最小數還是大於最大數來做到這一點。如果其中任何一個都是真的,則返回無效,否則它證實它。檢查值的最大值,最小值和數量由raw_input決定。下面的代碼:'x'是這個函數的無效關鍵字參數

int(x = raw_input('x:\n')) #max number 
int(y = raw_input('y:\n')) #min number 
int(z = raw_input('z:\n')) #number to check. 
if z < y: 
    print 'invalid.' 
elif z > x : 
    print 'invalid.' 

我可以輸入x值很好,但是當我試圖進入y值,我得到這個錯誤:

Traceback (most recent call last): 
    File "C:/Python27/random/bark", line 2, in <module> 
    int(y = raw_input('y:\n')) #min number 
TypeError: 'y' is an invalid keyword argument for this function 

我不知道我是什麼做錯了,我在別處沒有回答。

+0

蟒蛇分配不返回一個值......它認爲你用一個不允許的命名參數x調用int – 2012-07-14 00:01:31

回答

8

作爲代替:

int(x = raw_input('x:\n')) #max number 

試試這個:

x = int(raw_input('x:\n')) #max number 

類似的其他輸入語句。

內置Python函數raw_input()「從輸入讀取一行,將其轉換爲字符串」。爲了讓您使用輸入作爲整數,您需要在int()函數的幫助下將「string」轉換爲int,該函數將「字符串或數字轉換爲純整數」。從你的代碼看起來你有這個基本想法,但是你的語法有點糾結。

+0

@ user1524840:請參閱我的答案以獲得詳細解釋。 – 2012-07-14 00:06:58

+0

@ user1524840我可以提供幫助 - 如果您好奇,我還爲您添加了一些額外的解釋。 – Levon 2012-07-14 03:09:08

0

試試這個

x,y,z, = int(raw_input("x:")),int(raw_input("y:")),int(raw_input("z:")) 

這是輸出

>>> x,y,z, = int(raw_input("x:")),int(raw_input("y:")),int(raw_input("z:")) 
x:5 
y:6 
z:7 
>>> x 
5 
>>> y 
6 
>>> z 
7 
5

不像C,Python的賦值語句不能用作參數表達式。

例如,只需以下是不合法的,並且將導致SyntaxError

if name = name + 1: 
    pass 

您收到一個TypeError,而不是在這種情況下,SyntaxError的原因是Python的關鍵字參數功能。 Python允許您將命名參數傳遞給以下形式的函數:foo(arg1=0, second_argument="hello")。因此,口譯員認爲這就是你想要做的。

您收到的錯誤消息是Python解釋器認爲您將關鍵字參數傳遞給int()的結果。當然,int()不會將關鍵字參數「x」(或者「y」或「z」)作爲錯誤。這是你應該做的,而不是:

x = int(raw_input("x:\n")) 
y = int(raw_input("y:\n")) 
z = int(raw_input("z:\n")) 
0

如果你想有一個較短的版本,試試這個:

x,y,z = (int(raw_input(var+':')) for var in "xyz") 

(它的工作原理一樣Joran比斯利的版本)

相關問題