2017-09-15 4 views
2

私はちょうどPythonの学習を始めました。命題計算式と値をとるプログラムを作るための課題があります入力としてX、Y、Z(TrueまたはFalse)を指定します。次に、答えが真か偽かを記述する必要があります。数式は、 - (not)、&(および)、v(または)の3つの操作のみで構成する必要があります。数式の変数はX、Y、Zのみであり、すべてが0回以上現れます。可能式の文字列を論理式(not、and、or)で置き換える方法はありますか


例:

  • Y
  • - ( - (YvX)& Y)
  • -X-(二重陰性)
  • -Z & Z

変数の値を指定する必要がありますこのようなバイナリで: 010(X = f、Y = t、Z = f)。変数の値のために、私はこれを行うには良い方法ですが、これはまだ動作する必要があることかなり確信してこの

value = input("Value: ") 

X = value[0] 
Y = value[1] 
Z = value[2] 

if X == "0": 
    X = False 
elif X = "1": 
    X = True 
else: 
    print("False input") 

if Y == "0": 
    Y = False 
elif Y = "1": 
    Y = True 
else: 
    print("False input") 

if Z == "0": 
    Z = False 
elif Z = "1": 
    Z = True 
else: 
    print("False input") 

をしました。問題は数式を読むことにあります。私の考えは、記号( - 、&、v)をnot、and、orに置き換えることでした。次のようなもの:

a = input() 
print(a.replace("v", or)) 

しかし、これを行うことはできないので、どうすればいいのかわかりません。

+0

を**インプレースで変更することはできません。つまり、 '' v "'を文字列 ''や '' *で置き換える必要があります。演算子ではなく、識別子ではないのでそのように使うことはできません。 – jonrsharpe

+0

まず、Pythonのeval/codeインタープリタを使うべきかどうか、それとも数式パーサーを書くのかどうかを知っておくといいでしょう。それでは、あなた自身で協会や優先順位付けなどを解決する必要があります。 – Jeronimo

答えて

0

あなたのような何かを行うことができます:あなたは*(str.replace`が何 `実際にある)を適用変化に*新しい文字列を作成することができますが、文字列は不変**です

>>> def interpret(values, formula): 
...  X, Y, Z=[int(i) for i in values] 
...  newF=formula.replace('-', ' not ').replace('v', ' or ').replace('&', ' and ') 
...  return eval(newF) 
... 
>>> val = raw_input("Value: ") 
Value: 011 
>>> form = raw_input("Formule : ") 
Formule : -(-(YvX)&Y) 
>>> interpret(val, form) 
True 
0

あなたはこれを試すことができます。

input_string = "--X&Y" 
output_string = [] 
for elem in input_string: 
    if elem in ["-"]: 
     elem = "not " 
    elif elem in ["&"]: 
     elem = " and " 
    elif elem in "v": 
     elem = "or " 
    output_string.append(elem) 
print ("".join(output_string)) 

が交換「や」ことに注意してください、「and」と「ない」の文字列ではなく、論理演算子です。

関連する問題