2017-03-05 48 views
-2

需要创建一个程序,该程序会生成一个介于5-10之间的随机数,然后形成以下模式。分配代码

"The random number generated is" 9 
9 8 7 6 5 4 3 2 1 
8 7 6 5 4 3 2 1 
7 6 5 4 3 2 1 
6 5 4 3 2 1 
5 4 3 2 1 
4 3 2 1 
3 2 1 
2 1 
1 

这里是我使用的代码:

from random import choice 
m=choice(range(5,11)) 
n=m-1 
o=n-1 
p=o-1 
q=p-1 
r=q-1 
s=r-1 
t=s-1 
u=t-1 
v=u-1 
print("The random number generated is",m) 
while m>0: 
    print(m,n,o,p,q,r,s,t,u,v) 
    m=m-1 
    n=n-1 
    o=o-1 
    p=p-1 
    q=q-1 
    r=r-1 
    s=s-1 
    t=t-1 
    u=u-1 
    v=v-1 

但是我得到这个运行时:

The random number generated is 8 
8 7 6 5 4 3 2 1 0 -1 
7 6 5 4 3 2 1 0 -1 -2 
6 5 4 3 2 1 0 -1 -2 -3 
5 4 3 2 1 0 -1 -2 -3 -4 
4 3 2 1 0 -1 -2 -3 -4 -5 
3 2 1 0 -1 -2 -3 -4 -5 -6 
2 1 0 -1 -2 -3 -4 -5 -6 -7 
1 0 -1 -2 -3 -4 -5 -6 -7 -8 

如何摆脱0和底片?还是更好的一组代码?

感谢

+1

的[在Python3数值模式]可能的复制(http://stackoverflow.com/questions/42608684/numerical-patterns-in-python3) –

+0

我建议你创建一个数组,而不是752个变量。然后你就可以很容易地进行循环和测试。 –

回答

1

这会容易得多了几圈,而不是将所有这些变量做的 - 看看下面的一个选项:

from random import choice 

# max_start is the maximum number we start with 
max_start = choice(range(5, 11)) 

print("Starting number: {0}".format(max_start)) 

# We iterate downward 
for start in range(max_start, 0, -1): 

    # And for each line, start from that point down to 1 
    for n in range(start, 0, -1): 

    # And print it, no end of line character 
    print("{0} ".format(n), end='') 

    # And add a newline 
    print() 

输出:

Starting number: 5 
5 4 3 2 1 
4 3 2 1 
3 2 1 
2 1 
1 
1

问题是,您的while循环只会在您的m为零时停止,但会继续打印相同数量的数字。使用一段时间和for循环会更好。 例如:

import random 
i = random.randint(5,10) 
while i>0: 
    for j in range(i,0,-1): 
     print(j,end=" ") 
    print("") 
    i -= 1 
0

无论何时你发现youself组成的变量列表像m, n, o, p, ...还有就是你应该使用list,而不是一个很好的机会。 range函数可以生成可用于生成列表的整数或取消整数。之后,它只是一个打印和从列表中删除值的问题。

import random 

# generate a random number from 5 to 10 inclusive 
num = random.randint(5, 10) 
print("The random number generated is", num) 

# make a list, counting down from the number, excluding 0, converting 
# to string 
numbers = list(str(n) for n in range(num, 0, -1)) 

# print and trim the number list til there is nothing left 
while numbers: 
    print(' '.join(numbers)) 
    numbers.pop(0)