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

时间:2016-01-19 08:34:01

标签: python loops for-loop assign

我有一个矩形的三个顶点,需要找到第四个顶点,我需要找到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

3 个答案:

答案 0 :(得分:2)

你想要

item += 3

在你的循环中。

再看一遍,这还不足以让它发挥作用。您想传递行号

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

到您的calculate功能。您可以使用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 :(得分:2)

上面的代码似乎不是您的完整代码,但我认为您应该在实际代码中更正它,如下所示: 而不是item +=1,你应该写item = 1+ i*3

答案 2 :(得分: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