因此,有你的用戶輸入,和你的代碼的Python的例子之間的根本區別:
用戶輸入,在這個例子中,將是一個字符串字面"2*a + 3*b <=4"
你無法追加字符串文字到prob
,因爲它期望約束或類似的對象 - 這是你的錯誤來自何處。
prob += x
當你在python中使用相同的表達式時,你會注意到它缺少我在這個語句上有用的引號。
這不是一個字符串文字,它是一個python表達式。紙漿的某些部分將其評估爲約束對象,然後將該約束添加到該問題中。
prob += 2*a +3*b <= 4
現在,完全忽視了執行任意代碼,爲您解決問題最簡單的方法的潛力是評估用戶輸入Python代碼,讓語言做休息:
exec("prob +="+x);
應該注意的是,除非這個腳本完全是供你個人使用的,否則這是一個可怕的想法。
從一個普通編程的角度來看,正確的解決方案是建立從字符串的LPConstraint對象,然後添加你的新構造的對象概率。
在一個理想的世界中,您將擁有一個LPConstraint的構造函數,該函數需要一個字符串或一個輔助方法在庫中的某個位置爲您執行此操作。
我已經完成了(當然,所有的5分鐘...)一些閱讀文檔,並找不到任何這樣的方法。假設沒有其他人發現任何運氣,你只需自己解析字符串(以及所有的麻煩)並從結果中構建一個約束對象。
通過這樣的問題,一個問題是真正的範圍之一:
- 你在哪裏安裝這個腳本?
- 誰將會使用它?
- 他們可能會造成什麼樣的危害?
如果你正在創建python腳本在高中或大學的計算機實驗室中運行,對於上帝之愛不要使用exec。
如果你正在創建python腳本以便在你的(也可能是朋友的)機器上運行,爲了你自己的目的,那麼編寫一個解析器就是公然浪費你的時間和精力 - 你不會去在您自己的盒子上執行惡意代碼。
看看這個[回覆](http://stackoverflow.com/a/13751697/355230)有點類似的問題 - 在那裏使用的技術可以適用於你的問題。 – martineau
我解決此得到的方法是: 'J = 「一」 對於i在約束: I = I + 「\」 「+ J + 」\「」 打印我 K = EVAL(ⅰ) prob + = k j + =「a」 ' prob獲取python表達式和唯一字符串的元組。 「 – user1883573