我一直在练习一个><> (Fish)解释器,却被一个错误卡住了。问题代码似乎在这里:
import sys
from random import randint
file = sys.argv[1]
code = open(file)
program = code.read()
print(str(program))
stdin = sys.argv[2]
prgmlist = program.splitlines()
length = len(prgmlist)
prgm = {}
for x in range(0,length-1):
prgm[x+1] = list(prgmlist[x])
这里的目标是将代码放入某种网格中,这样每个命令都可以单独执行和计算。我所说的网格,是指映射到列表:
^{pr2}$等等。在
但是,当我尝试使用cmd = prgm[y][x]
检索命令时,它会给我KeyError: 0
。在
感谢任何帮助。在
以下是回溯:
Traceback (most recent call last):
File "/Users/abest/Documents/Python/><>_Interpreter.py", line 270, in <module>
cmd = prgm[cmdy][cmdx]
KeyError: 0
以及整个代码的pastebin。在
输入来自wiki页面的hello world程序:
!v"hello, world"r!
>l?!;o
你会想用像
第一部分prgm[x]将访问字典中x键的值列表,然后[y]将从列表中提取yth元素。在
很少有问题-
您没有考虑最后一行,因为您的range是-
for x in range(0,length-1):
-并且range的stop
参数是独占的,所以它不会转到length-1
。实际上不需要获取使用范围的长度,只需使用for i, x in enumerate(prgmlist):
。enumerate()
在每次迭代中返回索引和当前元素。在第二,从实际代码来看,您最初似乎是将
^{pr2}$cmdx
定义为0
,但是在for循环中(如上所述),您只是从1
开始字典中的索引。所以应该从1
开始定义它。示例-你应该从^{开始
cmdy
。好像你把它们都颠倒了。相关问题 更多 >
编程相关推荐