拆分字符串会跳到字符串中的最后一项,而不是遍历它们。 python

Split string skips to final item in string instead of going through them. python

和我儿子一起研究编码书籍,“帮助孩子使用计算机编码”,作者是 DK。到目前为止很棒的书。

对于我们正在构建绘图机的项目,它应该将字符串拆分为一系列将要绘制的命令。

但是代码跳到字符串中的最后一项而不输出其他项。书上说这个命令,循环遍历字符串中的项目列表:

for cmd in cmd_list:

是不是缺少什么让它遍历字符串的每个元素? 下面是代码示例,然后是输出。

谢谢!

#String Artist
def string_artist(program):
    cmd_list = program.split('-')
    print(cmd_list) #I added this line to confirm the split#
    for cmd in cmd_list:
        cmd_len = len(cmd)
        if cmd_len == 0:
            continue
    cmd_type = cmd[0]
    num = 0
    if cmd_len > 1:
        num_string = cmd[1:]
        num = int(num_string)
    print(cmd, ':', cmd_type, num)
    turtle_controller('cmd_type', num)

输出:

>>> string_artist('N-L90-F100-F101-F102')
['N', 'L90', 'F100', 'F101', 'F102']
F102 : F 102
Unrecognized Command

任何帮助将不胜感激!想继续推进我儿子的学习。谢谢!

问题与缩进有关。这是您的原始功能,再一次:

def string_artist(program):
    cmd_list = program.split('-')
    print(cmd_list) #I added this line to confirm the split#
    for cmd in cmd_list:
        cmd_len = len(cmd)
        if cmd_len == 0:
            continue
    cmd_type = cmd[0]
    num = 0
    if cmd_len > 1:
        num_string = cmd[1:]
        num = int(num_string)
    print(cmd, ':', cmd_type, num)
    turtle_controller('cmd_type', num)

请注意 cmd_type = cmd[0] 行不在 for 循环内。事实上,该行和它之后的所有其他行也不在 for 循环中。按照现在的写法,它们只会在 for 循环结束后执行。这在技术上是一件有效的事情,因为变量 cmd 在循环完成后仍然存在(它的值将是它在循环的最后一次迭代中碰巧采用的任何值。)

解决方案涉及缩进我提到的代码行,以便它们在 for 循环中:

def string_artist(program):
    cmd_list = program.split('-')
    print(cmd_list) #I added this line to confirm the split#
    for cmd in cmd_list:
        cmd_len = len(cmd)
        if cmd_len == 0:
            continue
        cmd_type = cmd[0]
        num = 0
        if cmd_len > 1:
            num_string = cmd[1:]
            num = int(num_string)
        print(cmd, ':', cmd_type, num)
        turtle_controller('cmd_type', num)