字符串和整数冲突的for循环和while循环
我正在尝试了解如何使用for循环,以及字符串和整数之间的区别。
我创建了一个函数,调用了尺寸和电视大小,比如:
def TVDisplay(dimension, TVsize):
final = "<==="
for i in range(TVsize-2):
final = final + "=="
final = final + "==>\n"
for corner in dimension:
final = final + "< "
for edge in corner:
final = final + edge + " "
final = final + ">\n"
final = final + "<==="
for i in range(TVsize-2):
final = final + "=="
final = final + "==>\n"
return final
这个函数返回:
<=====>
< 0 0 >
< 0 0 >
<=====>
基于一个尺寸是[['0','0'],['0','0']],电视大小是2。
现在我想用while循环来做得类似,但在处理字符串和整数时遇到了一些问题。
我的函数看起来是这样的:
def TVDisplay(dimension, TVsize):
final="<==="
i=0
while i < TVsize-2:
final = final + "=="
ctr+=1
final = final + "==>\n"
corner=0
while corner < dimension:
edge = 0
final = final + "< "
while edge < corner:
final = final + edge + " "
edge+=1
final = final + ">\n"
corner+=1
final = final + "<==="
while i < TVsize-2:
final = final + "=="
i+=1
final = final + "==>\n"
return final
这个函数返回:
<=====>
<>
< 0 >
<=====>
我觉得问题出在代码的中间部分,它和字符串或整数发生了冲突。
有没有人能给我一些建议,如何解决这个问题?
谢谢!!
编辑:
corner=1
while corner < dimension:
final = final + "< "
edge = 0
while edge < corner:
final = final + edge + " "
edge+=1
final = final + ">\n"
corner+=1
在:
final = final + edge + " "
这一行,出现了无法连接'str'和'int'对象的错误。
我想在循环的中间部分输出显示的内容。
< 0 0 >
< 0 0 >
最后的循环结束了这个过程。
所以这就是我的问题。
1 个回答
0
维度就是一个列表的列表,对吧?
所以当你调用:
for corner in dimension:
for edge in corner:
这其实是在指代一个真实的对象。所以,corner是一个列表,而edge是这个列表里的一个对象。这样说就像是:
while corner < len(dimension):
edge = 0
while edge < len(dimension[corner]):
finale += dimension[corner][edge] + " "
区别在于,当你说:
for x in y
你实际上是在指代y里面的对象x。但是当你说:
while x < y:
x+=1
X只是一个整数(在你的例子里,它是对象的索引)。要访问真正的对象,你必须用y[x]。'in'这个函数是用来指代真实对象的,而当你使用while循环时,你创建了一个计数器来跟踪索引,但并不是实际的对象。
while corner_index < len(dimension):
edge_index = 0
corner = dimension[corner_index] #retrieve the list from dimension
final = final + "< "
while edge_index < len(corner):
edge = corner[edge_index] #get the edge
final += edge + " "
edge_index+=1
final = final + ">\n"
corner_index+=1
更简单地说:
while corner_index < len(dimension):
edge_index = 0
final = final + "< "
while edge_index < len(dimension[corner_index]):
final += dimension[corner_index][edge_index] + " "
edge_index+=1
final = final + ">\n"
corner_index+=1
关于你的修改:
你访问edge的方式(作为一个索引整数)意味着你必须先把它转换成字符串。所以:
final += str(edge) + " "
你最开始没有这个问题,因为'edge'指的是你维度列表中实际的字符串对象'0'。但是,当你使用while循环时,'edge'变成了一个你用作计数器的整数。