你好我想一次做两个计数,一个从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函数和列表来解决它。
答案 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功能和列表来解决它。
以下是未使用zip
或itertools.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