この問題で2日間苦労したので、私はあきらめました。あなたは2つの入力が与えられます。最初のものは命題を含むリストで、もう1つは辞書です。提案を受け取り、与えられた辞書キーに基づいて答えを返す、文字列インタプリタをPythonで作成するには?
例:
arg= [<prop1>, "OPERATOR", <prop2>]
dicti= {<prop1>: key1, <prop2394>: key2394,<prop2>:key2}
次は、可能な入力です:
arg= [<prop1>, "OPERATOR (AND OR)",
[ "NOT" ,["NOT",<prop2>,"OPERATOR"[<prop2>, "OPERATOR", <prop3>]]]
私は問題は二重の再帰を使用せずに解決することが文句を言わないことに賭けています。これは問題を解決する私の試みです、私は入力が "フラットフラット"であるという基本ケースから始めました。これはリストの要素としてリストを持たない1Dリストを意味します。プログラムはブール値を返すべきではなく、true
またはfalse
を辞書に返します。
def interpret(arg, keys):
if not arg :
return "false"
elif not arg and not keys:
return "false"
elif not keys and isinstance(arg,list):
return "true"
elif isinstance(arg[0],list):
return interperter(arg[0:],keys)
else:
trueCnr=0
for i in range(len(arg)):
if arg[i] in keys and keys[arg[i]]=="true":
if isinstance (arg[i], list):
if("NOT" in arg):
indx= arg.index("NOT")
keys[arg[indx+1]]= "true" if keys[arg[indx+1]]=="true" else "false"
trueCnr+=1
print(trueCnr)
if trueCnr==len(arg)-1 and "AND" in arg: return "true"
elif trueCnr!= 0 and "OR" in arg: return "true"
else: return "false"
print (interpret(["door_open", "AND", ["NOT","cat_gone"]], {"door_open" : "false", "cat_gone" : "true", "cat_asleep" : "true"}))
私の質問はここからどうやって進んでいくのですか?
命題は何ですか? –
出力はどのように見えますか?入力を出力に変換するためのルールは何ですか? –
@HaiVuは、「真」または「偽」の形で、ブール値「真」または「偽」ではない –