Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 嵌套for循环中的追加列表_Python_Python 3.x_List_For Loop - Fatal编程技术网

Python 嵌套for循环中的追加列表

Python 嵌套for循环中的追加列表,python,python-3.x,list,for-loop,Python,Python 3.x,List,For Loop,我定义了一些数据,这些数据附加到一些列表中。为了做到这一点,我需要将它们放入某种嵌套循环条件中。首先创建一个介于1-15之间的范围,然后rebarnumber计算,在循环中,我在n=rebarnumber执行其他操作时设置这些条件。问题是,当上述条件完全满足时,我只需要得到包含完整范围数的列表 但是却得到了这个结果。 [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,

我定义了一些数据,这些数据附加到一些列表中。为了做到这一点,我需要将它们放入某种嵌套循环条件中。首先创建一个介于1-15之间的范围,然后rebarnumber计算,在循环中,我在
n=rebarnumber
执行其他操作时设置这些条件。问题是,当上述条件完全满足时,我只需要得到包含完整范围数的列表

但是却得到了这个结果。

[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
所需结果(仅显示最后两行打印内容)

代码:

h = 300
cb = 35
ct = 35
ca = 35
b= 300
y = 12
d = h - cb
ds = ct
a = 25
yb = 8
rebarnumber = math.floor((b-(2*cb+2*yb+y))/a)
disc = []
dis = []
Asi = []
Asci = []

for n in range(1,16):
    if n <= rebarnumber+1:
        Asi.append(int(3.1416/4*(y)**2))
        dis.append( h - (cb + yb + y/2 ))
        Asci.append(int(3.1416/4*(y)**2))
        disc.append( ct + yb + y/2 )
        if n >= rebarnumber:
            Asi.append(int(3.1416/4*(y)**2))
            dis.append( h - (cb + yb + y/2 ) - ca)
            Asci.append(int(3.1416/4*(y)**2))
            disc.append( cb + yb + y/2 + ca)
    print(disc, n)
h=300
cb=35
ct=35
ca=35
b=300
y=12
d=h-cb
ds=ct
a=25
yb=8
rebarnumber=数学楼层((b-(2*cb+2*yb+y))/a)
光盘=[]
dis=[]
Asi=[]
Asci=[]
对于范围(1,16)内的n:
如果n=重新编号:
附加说明(int(3.1416/4*(y)**2))
dis.append(h-(cb+yb+y/2)-ca)
附件(int(3.1416/4*(y)**2))
光盘附加(cb+yb+y/2+ca)
打印(光盘,n)

我做错了什么?!任何帮助

您的代码中有两个棘手的问题。让我们先把它们清理干净

  • 显然,您已经导入了
    math
    ,因为您正在使用
    math.floor
    。为什么不用
    math.pi
    代替3.1416?而且,既然它是一个常量,为什么不使用标准的PEP8命名约定呢?此外,为什么不使用:

    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)
    
    也就是说每次都会出现
    print
    语句,但是只有在第一个
    if
    语句通过时才会调用
    append
    方法。此外,由于第二条
    if
    语句包含在第一条
    if
    语句中,因此当该语句通过时,您将向每个列表追加两次

    显然,这不是你想要的。相反,我怀疑您正在尝试一种
    if/else
    系列,其中一组行为最多涉及8或9,然后另一组行为接管

    既然你在评论中提到了
    else
    ,我猜这是一个家庭作业,或者你还没有学过
    else

    在这种情况下,您需要确保您的条件彼此直接相反!最简单的方法是使用
    而不是
    。(注意两个
    if
    语句缩进的金额相同!第二个
    if
    语句不包含在第一个语句中。):


    在你的代码中有一些尴尬的事情。让我们先把它们清理干净

  • 显然,您已经导入了
    math
    ,因为您正在使用
    math.floor
    。为什么不用
    math.pi
    代替3.1416?而且,既然它是一个常量,为什么不使用标准的PEP8命名约定呢?此外,为什么不使用:

    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)
    
    也就是说每次都会出现
    print
    语句,但是只有在第一个
    if
    语句通过时才会调用
    append
    方法。此外,由于第二条
    if
    语句包含在第一条
    if
    语句中,因此当该语句通过时,您将向每个列表追加两次

    显然,这不是你想要的。相反,我怀疑您正在尝试一种
    if/else
    系列,其中一组行为最多涉及8或9,然后另一组行为接管

    既然你在评论中提到了
    else
    ,我猜这是一个家庭作业,或者你还没有学过
    else

    在这种情况下,您需要确保您的条件彼此直接相反!最简单的方法是使用
    而不是
    。(注意两个
    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: