翻译项目;输入";-Python-3.6

翻译项目;输入";-Python-3.6,python,python-3.x,python-3.6,Python,Python 3.x,Python 3.6,我仍然在编程语言项目中使用我的编程语言。打印完成了,我做了输入,但不起作用。这是我尝试输入的内容: progress = [] command_libary = [] command_split = [] def split_command(command): command2 = command.split() for x in command2: command_split.extend(x) command_libary.extend(command

我仍然在编程语言项目中使用我的编程语言。打印完成了,我做了输入,但不起作用。这是我尝试输入的内容:

progress = []
command_libary = []
command_split = []
def split_command(command):
    command2 = command.split()
    for x in command2:
        command_split.extend(x)
    command_libary.extend(command)
def C05basic(command3):
    x = 0
    z = 0
    split_command(command3)
    if (command_split[z] == "p" and command_split[z + 1] == "r" and command_split[z + 2] == "i" and command_split[z + 3] == "n" and command_split[z + 4] == "t" and command_split[z + 5] == "("):
        if (command_split[z + 6] == '"' or command_split[z + 6] == "'" or command_split[z + 6] == "`"):
            for x in range(z + 7, len(command_split)):
                if ((command_split[x] == '"' or command_split[x] == "'" or command_split[x] == "`") and command_split[x + 1] == ')'):
                    break
                progress.extend(command_split[x])
            print ("".join(progress))
            z = z + 6 + len(progress)
            progress.pop()
    elif (command_split[z] == "i" and command_split[z + 1] == "n" and command_split[z + 2] == "p" and command_split[z + 3] == "u" and command_split[z + 4] == "t" and command_split[z + 5] == "("):
        if (command_split[z + 6] == '"' or command_split[z + 6] == "'" or command_split[z + 6] == "`"):
            for x in range(z + 7, len(command_split)):
                if ((command_split[x] == '"' or command_split[x] == "'" or command_split[x] == "`") and command_split[x + 1] == ')'):
                    break
                progress.extend(command_split[x])
            input ("".join(progress))
            z = z + 6 + len(progress)
            progress.pop()
    progress.pop()
    command_split.pop()    

C05basic("input('something')")
它给了我:

something #in input
something
somethisomething'input('something #Not written by command input (, but by print)
但当我使用:

C05basic("print('something')")
C05basic("input('something')")
它给了我:

something #in input
something
somethisomething'input('something #Not written by command input (, but by print)

Idk为什么。。。我做错了什么?

分析

您尚未指定对此的期望值。但是,我推测您对解析命令有一些想法。为了了解您正在做的事情,我在
C05basic
顶部附近插入了一个简单的调试:

def C05basic(command3):
    x = 0
    z = 0
    split_command(command3)
    print "TRACE command_split", command_split
    print "TRACE progress", progress
我从您的两个案例中得到的结果:

1命令:

TRACE command_split ['i', 'n', 'p', 'u', 't', '(', "'", 's', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', "'", ')']
TRACE progress []
something
2个命令:

TRACE command_split ['p', 'r', 'i', 'n', 't', '(', "'", 't', 'h', 'i', 's', 's', 't', 'u', 'f', 'f', "'", ')']
TRACE progress []
thisstuff
TRACE command_split ['p', 'r', 'i', 'n', 't', '(', "'", 't', 'h', 'i', 's', 's', 't', 'u', 'f', 'f', "'", 'i', 'n', 'p', 'u', 't', '(', "'", 's', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', "'", ')']
TRACE progress ['t', 'h', 'i', 's', 's', 't', 'u']
thisstuthisstuff'input('something
简单地说,您不必费心控制数据列表和下标。结果是截断、连接、重叠,并且通常错误地处理第二个输入

建议

学习增量编程。这里的部分问题是,在测试任何东西之前,您编写的代码太多了。相反,写几行,确保它们有效,然后再添加更多

学习基本的调试。请看这个可爱的博客寻求帮助

在开始学习之前,先学习新语言的基本能力。例如,由于您还没有学习基本的字符串操作,所以很难阅读。例如,您的第一个大型if语句可以通过一个简单的字符串比较(一个切片与一个常量比较)得到极大的改进:

if command_split[z: z+5] == "print":

逐个字符比较会浪费大量的时间和视觉空间。

C05basic(“打印('something')”)
的调用可能会导致全局变量
progress
command\u split
的更改,当您调用
C05basic(“输入('something')”)时,这些更改仍然存在。这就是为什么通常不鼓励使用可变全局变量的原因:因为这使得在不考虑代码的其他部分的情况下,很难对代码的孤立部分的行为进行推理。也许您可以重新设计代码,不使用全局变量。提示:如果
split_命令
返回一个列表而不是修改现有的列表,该怎么办?我建议您学习一些调试技巧。添加额外的print()语句以查看程序中变量的值。或者,学习如何使用可视化调试器,如PyCharm中的调试器。我还建议您阅读编译器理论。特别是,您需要了解什么是词法分析器,什么是解析器。检查单个字符看起来非常糟糕。在此处了解列表滑动开始: