代码: -
#Shortest DFA implementation in Python
S,D,F=input()
s=1
for c in S:s=D[s,c]
print(["Not a chance!","Accepted!"][F&s>0])
输入: - 输入是字符串S的三倍,增量函数D和最终状态掩码F.我用幂2对每个状态进行编号,因此F只是每个接受状态的OR。 D是来自(州,输入字符)的地图 - >状态。
示例输入(接受以b结尾的所有字符串):
'abab',{(1,'a'):1,(1,'b'):2,(2,'a'):1,(2,'b'):2},2
输出: -
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-32-506f09a31940> in <module>()
1 #Shortest DFA implementation in Python
----> 2 S,D,F=input()
3 s=1
4 for c in S:s=D[s,c]
5 print(["Not a chance!","Accepted!"][F&s>0])
ValueError: too many values to unpack (expected 3)
同样,以下代码用于实现NFA。但即使在添加eval()之后,它也会抛出不同类型的错误。代码如下: -
#Shortest NFA implementation
S,D,F=eval(input())
s=1
for c in S:
t,s=s,0
for a,b in D[c]:s|=t/a%2*b
print(["Not a chance!","Accepted!"][F&s>0])
输入: - 我们像以前一样将州列为2的权力。 D是从输入字符到由该字符标记的转换列表的映射。
示例输入(接受以b结尾的所有字符串):
'abab',{'a':[(1,1)],'b':[(1,1),(1,2)]},2
获得的输出是: -
'abab',{'a':[(1,1)],'b':[(1,1),(1,2)]},2
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-34-7e5418d2d6fc> in <module>()
4 for c in S:
5 t,s=s,0
----> 6 for a,b in D[c]:s|=t/a%2*b
7 print(["Not a chance!","Accepted!"][F&s>0])
TypeError: unsupported operand type(s) for |=: 'int' and 'float'
请告诉我上述代码中所需的必要但极少的修改,以便它成功执行并产生所需的输出。
答案 0 :(得分:3)
此代码在Python 2中有效,而不是在Python 3中有效。我怀疑在使用Python 3时,代码实际上是为Python 2设计的。{2}中的input
不仅从输入中读取字符串,但它也执行eval
语句,这意味着它将获取字符串并将其转换为Python语法。 Python 3中的input
返回一个你输入的字符串。如你在Python 2中看到的那样<div style="position: fixed; width:100%; height: 30%; left:0%; top: 0%; background: black; display: flex; justify-content: space-around; text-align: center; color: white">
<div>
<div style="font-size: 17px">Info A</div>
<div style="font-size: 29px;" id="text">text1</div>
</div>
<div>
<div style="font-size: 17px">Info B</div>
<div style="font-size: 29px;">text2</div>
</div>
<div>
<div style="font-size: 17px">Info C</div>
<div style="font-size: 29px;">text3</div>
</div>
</div>
<br><br><br><br>
<input onclick="document.getElementById('text').innerHTML+='.'" type="button" value="click">
不再执行了。要模仿你在Python 2中看到的内容,你需要运行{{1}在eval
:
eval
使用您正在运行的新代码,罪魁祸首是循环中的除法运算:input
。这默认返回一个浮点数,而在Python 2中,如果In [1]: S,D,F = eval(input())
'abab',{(1,'a'):1,(1,'b'):2,(2,'a'):1,(2,'b'):2},2
In [2]: S
Out[2]: 'abab'
In [3]: D
Out[3]: {(1, 'a'): 1, (1, 'b'): 2, (2, 'a'): 1, (2, 'b'): 2}
In [4]: F
Out[4]: 2
和t/a
都是整数,它将返回一个整数。您必须小心在Python 3环境中运行Python 2代码。只需将t
包裹在a
来电中:t/a
。
int
我最后要注意的是在Python 3环境中非常小心地运行Python 2代码。如果可能,请在其设计的环境中运行代码。如果没有,这个从Python 2到Python 3的成语的有用比较指南应该有所帮助:http://python-future.org/compatible_idioms.html。特别是: