【问题标题】:For Loops and While Loops with str and int conflictions带有 str 和 int 冲突的 For 循环和 While 循环
【发布时间】:2014-07-10 22:15:54
【问题描述】:

我正在尝试发现如何使用 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 的 TVsize。

现在我正在尝试使用 while 循环使其看起来相似,但我在字符串和 int()s 处遇到了问题

我的函数如下所示:

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 >
<=====>

我认为这与我的代码中间部分与 strs 或 ints 冲突有关。

有人对如何解决这个问题有任何建议吗?

谢谢!!

已编辑::

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 >

最后一个循环将其关闭。

这就是我的问题

【问题讨论】:

  • 这到底是干什么的? TVsize 是什么意思? dimension 代表什么?我建议坚持使用for 以避免容易出错的手动增量,但您应该首先使第一个版本正常工作 - 尝试例如TVDisplay([['0', '0'], ['0', '0']], 3).
  • 你知道你可以用*重复字符串吗?这意味着您的第一个循环可以替换为final = "&lt;=" + "=="*TVsize + "&gt;\n"。您还可以使用str.join 连接字符串,因此您的内部循环可以替换为final += "&lt; " + " ".join(corner) + " &gt;\n"
  • corner=1 while corner \n " 角+=1

标签: python python-2.7 for-loop while-loop int


【解决方案1】:

Dimension 是列表的列表,对吗?

所以当你打电话时:

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

至于您的编辑:

您访问边缘的方式(作为索引整数)意味着您必须首先将类型转换为字符串。所以:

final += str(edge) + " "

您最初没有遇到此问题,因为“edge”指的是维度列表中的实际字符串对象“0”。但是,当您使用 while 循环时,'edge' 是一个整数,您将其用作计数器。

【讨论】:

  • 我试过放 len(corner) 但这会吐出 >
  • corner 是一个整数;你究竟希望len(corner) 做什么?
  • 好吧,我试图让 forloop 的 forloop 中间部分为 while-loop 做同样的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
相关资源
最近更新 更多