如何在for循环中从列表中分配值

3

我有一个矩形的三个顶点,需要找到第四个顶点,并且我需要为N个矩形找到缺失的顶点。

不幸的是,我无法弄清楚如何在第一个矩形之后分配顶点 :/。

以下是输入示例文本文件:

2      # '2' is the number of rectangles.
5 5    #        (x1, y1)
5 7    #        (x2, y2)
7 5    #        (x3, y3)
30 20  #        (x1, y1)
10 10  #        (x2, y2)
10 20  #        (x3, y3)
       #   (there could be more '**vertices**' and more than '**2**' cases)

以下是我的方法:

import sys

def calculate(num):
  x1 = lines[n].split()[0]
  y1 = lines[n].split()[1]
  x2 = lines[n+1].split()[0]
  y2 = lines[n+1].split()[1]
  x3 = lines[n+2].split()[0]
  y3 = lines[n+2].split()[1]
  print x1, y1
  print x2, y2
  print x3, y3
  #Planning to write codes for calculation & results below inside this function.

readlines = sys.stdin.readlines()    # reads
num = int(lines[0])                  # assigns the number of cases

for i in range(0, num):
  item += 1
  calculate(item)                    # Calls the above function

当我运行这段代码时,会得到以下结果:
5 5
5 7
7 5 

5 7
7 5
30 20 

我希望得到的是:

5 5
5 7
7 5

30 20
10 10
10 20

дҪҝз”ЁеңЁitertoolsж–ҮжЎЈйЎөйқўдёӯеұ•зӨәзҡ„grouperж–№жі•пјҢдҪ еҸҜд»ҘиҪ»жқҫпјҲдё”й«ҳж•Ҳең°пјүе°Ҷж–Ү件еҲҶжҲҗеӨ§е°Ҹдёәдёүзҡ„еқ—иҝӣиЎҢеӨ„зҗҶгҖӮ - Frerich Raabe
这是我第一次在这里注册并发布问题。非常感谢您的帮助! - DavidC
“'n”是什么?你在哪里声明它了吗?看起来你上面发布的代码不完整。 - Ali
我的错。是的,你是对的。应该是'n'而不是'num'! :) - DavidC
3个回答

2

你想要:

item += 3

在你的循环内部。


再看一遍,这还不足以使它工作。你需要传递行号。

1, 4, 7, 10 .....

将此代码添加到您的计算函数中。您可以使用range的3个参数版本来实现此目的。

for iLine in range( 1, 3*num-1, 3):
    calculate( iLine)

第三个参数告诉它每次跳过3个,你需要从第1行开始,而不是第0行,因为第0行包含计数器。同时,你还需要正确获取上限。你想传递给calculate的最终值实际上是3*num-2,但请记住,range函数不包括上限,因此我们可以在那里使用(最高期望值+1),这就是3*num-1的来源。

1
谢谢Jonathan,我尝试了那个,但它给了我一个超出范围的错误。这是我得到的结果:7 5,30 20,10 10。 - DavidC
是的,我对循环变量为i并将变量item传递到您的calculate函数中感到困惑。如果您在循环中遍历与您传递给calculate相同的变量,就像我的iLine示例一样,我认为这更清晰明了。 - JonathanZ supports MonicaC
再次感谢你,乔纳森。我按照你的建议尝试了一下,结果完美!非常感谢你的帮助! - DavidC

2

看起来上面的代码不是你完整的代码,但我认为你应该在你的真实代码中进行以下更正: 将item += 1改为item = 1 + i * 3


@DavidC 不用谢。在 Stack Overflow 上,如果有人回答了你的问题并且你觉得有帮助,请点赞。谢谢。 - Ali
我已经这样做了,但是当我点击它时,它说我需要拥有超过15个声望才能公开显示。我不确定是否计算在内。无论如何,感谢您的帮助! - DavidC
嗯,那样行吗?我想你要么使用item += 3,要么使用item = 3*i+1 - JonathanZ supports MonicaC
@Jonathan 在 DavidC 发布的代码中,是的,它应该可以工作。前三个坐标从索引=1开始,因此item最初设置为1,并且使用for i in range(0, num):,item将是1、4、...所以它可以工作。 - Ali
@alivar - 哦,抱歉,我错过了它只适用于一个或两个顶点集的情况。但是问题说可能会有超过2种情况,我不知道你的代码如何处理这种情况,甚至不知道如何修改代码使其适用于num > 2的情况。如果有方法,也许您可以更新您的答案,以便它也能处理num > 2的情况。 - JonathanZ supports MonicaC
显示剩余7条评论

1

@Avilar - 当num > 2时,您的代码会发生以下情况。您的代码建议如下:

item = 1
for i in range(0, num):
   item += i*3

当我们通过循环时

i = 0
item += 0 --> item = 1

那么

i = 1
item += 3 --> item = 4

那么

i = 2
item += 2*3 --> item = 10

那么

i = 3
item += 3*3 --> item = 19

那么

i = 4
item += 3*4 --> item = 31

你将生成数字

1, 4, 10, 19, 31, 46, 64

当我们想要时
1, 4, 7, 10, 13, 16, 19

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接