需要创建一个程序,在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和否定?还是一组更好的代码?
由于
答案 0 :(得分: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 :(得分:1)
问题在于,你的while循环只会在m为零时停止,但会继续打印相同数量的数字。使用while和for循环会更好。 例如:
import random
i = random.randint(5,10)
while i>0:
for j in range(i,0,-1):
print(j,end=" ")
print("")
i -= 1
答案 2 :(得分:0)
每当您发现自己编制了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)