字符串和整数冲突的for循环和while循环

0 投票
1 回答
724 浏览
提问于 2025-04-18 12:52

我正在尝试了解如何使用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'变成了一个你用作计数器的整数。

撰写回答