2017-03-05 45 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)