2015-05-16 43 views
-1

我似乎無法找到如何讓用戶限制使用實數和字母Q作爲變量。 (今天早上開始學習Python)我如何確保用戶輸入只包含數字,運算符和字母Q的字符串?

astr = 0 
while True: 
     astringfunctionMB = raw_input('please enter MB equation in terms of Q e.i 95-.5*Q : ') 
     if (float(astringfunctionMB) or "Q" in astringfunctionMB): 
       print "Please try again" 
       #else if 
     else: 
      break 
      astr = astringfunctionMB 
+0

你應該使用正則表達式。 – CoDhEr

+0

你的標題說「數字,操作員」,你的文字說「只有實數」。這是什麼? – cdarke

+1

你只需要檢查字符串是否包含數字,運算符和Q(或者我認爲)它是一個有效的表達式? (例如「1Q ******」僅包含數字Q和運算符,但它不是一個有效的表達式) – Zac

回答

6

有幾種方法可以做到這一點;我要麼使用regular expression

import re 

... 

if re.match(r'^[\dQ+\-*/.]$', astringfunctionMB): 
    ... 

(見demo用於測試)或創建的有效字符set再次進行測試:但是

import string 

VALID_CHARS = set(string.digits + 'Q+-*/.') 

... 

if astringfunctionMB and all(char in VALID_CHARS for char in astringfunctionMB): 
    ... 

注意的是,這些不必然意味着用戶的輸入是一個有效的表達式,只是它只包含有效的字符。要獲得更強大的驗證,您需要編寫一些內容,將其輸入解析爲適當的格式,然後查看是否可以在所輸入的內容上運行該輸入。

+0

幾乎在那裏!謝謝!..一個問題。我怎樣才能得到這個工作的所有數字?可以說用戶輸入3.56 * Q –

+0

@AleksChkadua是什麼讓你覺得沒有工作? – jonrsharpe

+0

我錯了。它不斷給我一個名稱錯誤,但第三次我檢查它走了。哈哈。謝謝! –

1

假設你需要在aStringFunctionMB一個Python表達式,你可以在受控的命名空間和捕獲異常評價它:

try: 
eval(aStringFunctionMB, {}, {"Q": 1}) 
astr = aStringFunctionMB 
except (NameError, SyntaxError): 
print "Please try again" 
相關問題