拉链范围功能

时间:2018-03-10 20:39:48

标签: python function printing while-loop count

你好我想一次做两个计数,一个从0开始递增,另一个从100递减。最终结果应该是这样的。在左侧,它从0到100递增5,从右侧从100到0递减7。

    0    100
    5    93
   10    86
   15    79
   20    72
   25    65
   30    58
   35    51
   40    44
   45    37
   50    30
   55    23
   60    16
   65     9
   70     2
   75     0
   80     0
   85     0
   90     0
   95     0
  100     0
#What I already have
inc = int(input("ENTER THE INCREMENT NUMBER: "))
dec = int(input("ENTER THE DECREMENT NUMBER: "))

def printcounting(inc, dec):
    for m, n in zip([k for k in range(0, 101, inc)], [l for l in range(100, 0, -dec)]):
        print("{} {}".format(m, n))


printcounting(inc,dec)

我想知道如何在右侧打印零,因为我已经拥有的程序根据输入值进行打印。此外,我希望使用while而不是zip函数和列表来解决它。

2 个答案:

答案 0 :(得分:3)

当较短的发电机结束时,

zip停止,因此它不适用于此处。 while循环在这里会非常单一。

您需要使用零填充值itertools.zip_longest

您还需要删除无用的列表推导,这会降低您的程序速度,因为它们不会过滤或转换range发布的数据。

import itertools

inc = 5
dec = 7

for x in itertools.zip_longest(range(0, 101, inc),range(100, 0, -dec),fillvalue=0):
    print("{} {}".format(*x))

结果:

0 100
5 93
10 86
15 79
20 72
25 65
30 58
35 51
40 44
45 37
50 30
55 23
60 16
65 9
70 2
75 0
80 0
85 0
90 0
95 0
100 0

答案 1 :(得分:1)

  

我也很乐意使用while而不是zip功能和列表来解决它。

以下是未使用zipitertools.zip_longest的版本:

In[2]: def print_counting(inc, dec):
  ...:     cnt_1 = 0
  ...:     cnt_2 = 100
  ...:     while True:
  ...:         print('{} {}'.format(cnt_1, cnt_2))
  ...:         if cnt_1 == 100 and cnt_2 == 0:
  ...:             break
  ...:         cnt_1 = min(cnt_1 + inc, 100)
  ...:         cnt_2 = max(cnt_2 - dec, 0)
  ...: 
In[3]: print_counting(5, 7)
0 100
5 93
10 86
15 79
20 72
25 65
30 58
35 51
40 44
45 37
50 30
55 23
60 16
65 9
70 2
75 0
80 0
85 0
90 0
95 0
100 0