我在Python中编写了一个函数,它将在HTML中创建一个简单的四列表。当我从文件中调用它时,它会正确返回表。
但是,如果在单个脚本中多次调用它,则会出现问题。第一个出现应该如此。第二次调用时,标题行下面的所有行都有六列(两个空白)而不是四列。第三次,有十列(六个空白)。
我最近才开始编码,所以我不太了解幕后发生的事情。
当一个函数连续调用两次或多次时,该函数的新实例是否被调用?变量是否全部重置'可以这么说?
这是被调用函数的代码:
def fourColumnTable(title1, list1, title2, list2, title3, list3, title4, list4):
error = 0
#Check that the lists are all of the same length
if(len(list1) != len(list2) or len(list1) != len(list3) or len(list1) != len(list4)):
error = 1
table = "ERROR: The lists must all be the same length"
if(error == 0):
tableList = []
#Append <table> tag
tableList.append('<table class="table table-bordered">')
#Format list elements and titles
#Put each title inside <th> tags
titleList = []
titleList.append(title1)
titleList.append(title2)
titleList.append(title3)
titleList.append(title4)
for i in range(len(titleList)):
titleList[i] = "<th>" + str(titleList[i]) + "</th>"
#Put each string element inside <td> tags
for i in range(len(list1)):
list1[i] = "<td>" + str(list1[i]) + "</td>"
for i in range(len(list2)):
list2[i] = "<td>" + str(list2[i]) + "</td>"
for i in range(len(list3)):
list3[i] = "<td>" + str(list3[i]) + "</td>"
for i in range(len(list4)):
list4[i] = "<td>" + str(list4[i]) + "</td>"
#Put all list elements in the tableList
tableList.append('<thead>')
for i in range(len(titleList)):
tableList.append(titleList[i])
tableList.append('</thead>')
tableList.append('<tbody>')
for i in range(len(list1)):
tableList.append('<tr>')
tableList.append(list1[i])
tableList.append(list2[i])
tableList.append(list3[i])
tableList.append(list4[i])
tableList.append('</tr>')
tableList.append('</tbody>')
#Close the <table> tag
tableList.append('</table>')
#Assign tableList to one variable
table = ''.join(tableList)
return table
答案 0 :(得分:0)
我怀疑在调用之间重用了一些(但不是全部)listN
个参数。这会导致您的错误,因为您的代码会在每次调用时修改提供的列表。它会在每个列表项周围添加<td>
和</td>
。如果您在同一列表中重复执行此操作,则这些项目将以多个嵌套标记结束,例如<td><td><td>...</td></td></td>
。
然后将其呈现为额外的空列,因为您的浏览器会在重复的<td>
开始标记之间填充缺少的结束标记,并忽略最后的额外结束标记。
第一个快速修复方法是使用修改后的项目创建新列表,而不是修改提供的列表(此处使用列表推导):
list1 = ["<td>" + item + "</td>" for item in list1]
进一步的改进是使用库来创建表,而不是自己通过字符串操作来创建它。您可以使用各种XML模板库,但我没有足够的经验来提出强有力的建议。 This page可能是开始浏览的好地方。