拆分字符串会跳到字符串中的最后一项,而不是遍历它们。 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)
和我儿子一起研究编码书籍,“帮助孩子使用计算机编码”,作者是 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)