我已经定义了一些数据,这些数据会追加到一些列表中。为了做到这一点,我需要将它们置于某种嵌套循环条件中。首先在1-15之间创建一个范围,然后在循环中计算rebarnumber,我在n <= rebarnumber
与*do something*
相匹配时设置了这些条件,然后在n >= rebarnumber
{{1} } 。问题是当满足上述条件时,我要做的只是获得具有完整范围数字的列表。
但是得到了这个结果。
do something else
所需的结果(仅显示最后两行打印内容)
[49.0] 1
[49.0, 49.0] 2
[49.0, 49.0, 49.0] 3
[49.0, 49.0, 49.0, 49.0] 4
[49.0, 49.0, 49.0, 49.0, 49.0] 5
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0] 6
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0] 7
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0] 8
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 9
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 10
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 11
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 12
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 13
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 14
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 49.0, 84.0] 15
代码:
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 84.0, 84.0, 84.0, 84.0, 84.0, 84.0] 14
[49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 49.0, 84.0, 84.0, 84.0, 84.0, 84.0, 84.0, 84.0, 84.0] 15
我做错了什么?!任何帮助!
答案 0 :(得分:2)
您的代码中有几处尴尬的事情。让我们先清理一下。
您显然已经导入了math
,因为您正在使用math.floor
。为什么不同时使用math.pi
而不是3.1416?并且,由于它是一个常量,为什么不使用标准PEP8命名约定ALL_CAPS?另外,为什么不使用:
import math
# ...
PI_Y2_4 = int((math.pi * y ** 2) / 4)
可以将几个“公共子表达式”存储为变量。由于在您的示例代码中,它们似乎是常量,因此您甚至可以使它们成为常量。但是,即使它们在您的实际代码中不是恒定不变的,您也可以通过只计算一次来获得清晰度,避免错误并提高速度:
for n in range(1, 16):
cbyby_2 = cb + yb + y / 2
ctyby_2 = ct + yb + y / 2
if n <= rebarnumber+1:
Asi.append(PI_Y2_4)
Asci.append(PI_Y2_4)
dis.append(h - cbyby_2)
disc.append(ctyby_2)
if n >= rebarnumber:
Asi.append(PI_Y2_4)
Asci.append(PI_Y2_4)
dis.append(h - cbyby_2 - ca)
disc.append(cbyby_2 + ca)
此外,在计算ct
的值时,您是否确定cb
和disc
?其他所有内容都保持不变,但是这两个更改。可能是错字吗?
现在,这些问题已经解决了,让我们看看您的“得了”与“想要”的例子。您“获得”了一堆列表,这些列表在n == 9
处停止增长。您“想要”一堆不断增长(由一个到n == 15
的列表。
看看代码的形状,我看到了:
for ...:
if ...
if ...
print()
这表示print
语句每次都会出现,但是append
方法仅在第一个if
语句通过时才被调用。此外,由于第二条if
语句包含在第一条if
语句中,所以当该语句通过时,您将两次附加到每个列表中。
显然,这不是您想要的。相反,我怀疑您正在尝试进行一系列if/else
的操作,其中一组行为最多涉及8或9,然后另一组行为接管了。
自从您在评论中提到else
以来,我猜这是一项家庭作业或您尚未学习else
的事情。
在这种情况下,您需要确保彼此之间的条件直接相反!最简单的方法是使用not
。 (请注意,两个if
语句的缩进量相同!第二个if
不包含在第一个语句中。):
for n in ...:
...
low_rebar = (n <= rebarnumber + 1)
if low_rebar:
Asi.append(PI_Y2_4)
Asci.append(PI_Y2_4)
dis.append(h - cbyby_2)
disc.append(ctyby_2)
if not low_rebar:
Asi.append(PI_Y2_4)
Asci.append(PI_Y2_4)
dis.append(h - cbyby_2 - ca)
disc.append(cbyby_2 + ca)
print(disc, n)
如果您没有使用布尔表达式,则可能不习惯将结果存储在变量中。在这种情况下,您可以将其说明如下:
if n <= rebarnumber + 1:
...
if not (n <= rebarnumber + 1):
...
或者您可以在数学上逆转条件:
if n > rebarnumber + 1: