したがって、ユーザー入力とコード内の python の例には根本的な違いがあります。
この例では、ユーザー入力は文字列リテラルになり"2*a + 3*b <=4"
ます。文字列リテラルを に追加することはできません。prob
これは、制約または同様のオブジェクトが必要であるためです。これがエラーの原因です。
prob += x
Python で同じ式を評価すると、引用符が欠けていることに気付くでしょう。
これは文字列リテラルではなく、python 式です。パルプの一部はこれを制約オブジェクトに評価し、その制約を問題に追加します。
prob += 2*a +3*b <= 4
ここで、任意のコードが実行される可能性を完全に無視して、問題を解決する最も簡単な方法は、ユーザー入力を Python コードとして評価し、残りは言語に任せることです。
exec("prob +="+x);
このスクリプトが完全に個人的な使用を目的としない限り、これはひどい考えであることに注意してください。
一般的なプログラミングの観点からの正しい解決策は、文字列から LPConstraint オブジェクトを作成し、新しく作成したオブジェクトを prob に追加することです。
理想的な世界では、文字列を受け取る LPConstraint のコンストラクター、またはこれを行うライブラリのどこかにヘルパー メソッドが必要です。
私は(確かに5分間すべて...)ドキュメントを読みましたが、そのような方法は見つかりませんでした。誰も幸運を見つけられないと仮定すると、文字列を自分で解析し (およびそれに伴うすべての手間がかかります)、結果から制約オブジェクトを作成する必要があります。
このような問題では、質問は実際にはスコープの 1 つです。
- このスクリプトをどこにインストールしますか?
- 誰がそれを使用する予定ですか?
- 彼らはどのような潜在的な損害を与えることができますか?
高校や大学のコンピュータ ラボで実行する Python スクリプトを作成している場合は、念のため、exec を使用しないでください。
自分のマシン (およびおそらく友人のマシン) で実行する Python スクリプトを自分の目的で作成している場合、パーサーを作成することは時間と労力の無駄です。あなただけの箱。