2011-08-31 44 views
0

我使用makearange函數輸入開始,停止和增量範圍用於陣列即允許範圍函數來評估非數值表達式

User = raw_input('Enter start,[stop],[increment]: ').split(',') 
makearange = lambda a: numpy.arange(int(a[0]),int(a[1]),int(a[2])) 
x = makearange(User) 

但是我也使用這些數字來運行的程序,以創建輸入數字的正方形和立方體的數組。我正在無限循環中運行此程序,只有當用戶點擊返回鍵時才停止。所以,我曾嘗試

if User == "": 
    Break 

除了這將導致一個錯誤,將工作,因爲makearange函數只計算整數,而不是返回鍵的用戶輸入。我怎樣才能理解這種類型的輸入? 感謝

回答

1

不會立即試圖在逗號分割User,測試它是否是空字符串第一:

import numpy as np 
import sys 

user_input = raw_input('Enter [start,] stop[, increment]: ') 
if user_input = '': 
    sys.exit() 
else: 
    x=np.arange(*map(int,user_input.split(','))) 

PS。 Enter start,[stop],[increment]暗示stopincrement是可選的。這是否意味着如果只給出一個參數,您希望範圍從給定的數字開始並無限增加?這對numpy.arange不起作用。也許你的意思是start是可選的,並且需要stop。這將完全符合numpy.arange已經有效的方式。

+0

這種類型的條件長度的更好的驗證'如果USER_INPUT =「」!'並沒有真正涵蓋非空非的可能性 - 可輸入的輸入。 – eumiro

+0

沒問題,但既然這不是問題的核心,我決定不去探討。 – unutbu

+0

對不起,我有單獨的問題,我已被要求停止和遞增可選,通過設置默認值爲兩個,雖然我還沒有解決如何做到這一點,因爲我完全是新的編程。 – Candace

0
makearange = lambda a: numpy.arange(int(a[0]),int(a[1]),int(a[2])) if len(a) == 3 else None 
當然

你能想出比數組