如果给我:
point_loads, 3, 500
point_loads, 6, 900
point_loads, 12, 300
此代码:
for line in open("Input.txt"):
li=line.strip()
if li.startswith("point_load"):
l = li.split(',')
for num in l[1:]:
num = float(num.strip())
point_loads.append(num)
印刷品:
point_loads = [3, 500, 6, 900, 12, 300]
我正在尝试修改它,以便如果给我:
length = 32
point_loads, 3, 500
point_loads, 6, 900
point_loads, end, 300
它将“end”设置为32(或可变长度),以便输出为:
point_loads = [3, 500, 6, 900, 32, 300]
我尝试了一些不同的东西,这是我最新的
for line in open("Input.txt"):
li=line.strip()
if li.startswith("point_load"):
l = li.split(',')
for num in l[1:]:
if num == 'end':
num = 10
num = float(num.strip())
point_loads.append(num)
但它给了我一个错误:(加上它不会真正做到我想要的,但这是一个开始)
num = float(num.strip())
ValueError: could not convert string to float: 'end'
调试时,我可以看到我需要剥离字符串,这样它就不会在“end”上执行操作
我已经试着在不同的代码位上乱搞了几个小时,但是没有任何进展
这部分有什么建议吗
谢谢你
如果我理解您的问题,您将无法将字符串“end”与您选择的变量交换。根据您所说的,这是因为您没有首先正确匹配字符串。当您用逗号分隔行时,仍然会得到每个项的空格
'point_loads, end, 300'.split()
以`['点加载','结束','300'结束]为了解决这个问题,我会首先过滤您的行,以剥离分割后每个项目的所有空白。然后当您测试
if num == 'end'
时,您将得到True
。您当前的代码正在测试if 'end' == ' end'
,也就是False
我注意到问题的第二部分与Python和duck类型的性质有关。您正在尝试对int和string调用strip()方法。在我上面的代码中,如果它与您的字符串匹配,它将分配一个int,否则它将把字符串转换为int,从而避免了试图调用int上的strip的问题
我修改了代码-我打了个错字,在列表中用了
split()
而不是strip()
。我在python3.6中测试过这个,但在python2.7中也应该可以。我添加了一个适当的上下文管理器来打开文件,您应该一直这样做我不确定。但这可能是你想要的
l = li.split(',')
转到l = li.split(', ')
,同时使用,
和to split string to list
num = 10
转到num = '10'
使所有元素都是字符串来调用strip()
相关问题 更多 >
编程相关推荐