当数字是N时停止的while循环,打印1到10之间的随机数

3
这是我得到的内容,但这只生成一个随机数并无限打印该数:
import random

x = random.randint(0,10)
y = 7
while x != y:
    print(x)
2个回答

6

比如(将条件移至 while 内部):

stop_at = 7
while True:
    num = random.randint(0, 10)
    if num == stop_at:
        break
    print num

或者,完全重构:

from itertools import starmap, repeat, takewhile
from random import randint

for num in takewhile(lambda L: L != 7, starmap(randint, repeat( (0, 10) ))):
    print num

我总是在这个问题上犹豫不决。我应该创建一个带有break的无限循环,还是应该展开循环的第一次迭代并将其放在前面?...这让我希望Python有其他语言所拥有的“until”语句。 - mgilson
@mgilson 或者一种从任意点开始循环而不是从条件开始的方法。这解决了部分第一次或最后一次迭代的更一般情况。 - agf
@mgilson 是的,我总是犹豫不决 - 可以重新用for来做,这样条件会更清晰...(有点儿 - 请参见示例) - Jon Clements
@agf -- 你说得对,但那似乎离goto太近了,令人毛骨悚然。作为每天都在使用古老的Fortran的人,我不想让任何接近goto的东西玷污Python的美丽... - mgilson
@JonClements -- 我真的不认为这更清晰(一开始我甚至很难理解它)。虽然很聪明 :). 我从来没有想过像这样使用 for - mgilson

2

你已经接近成功了,你需要在循环内生成一个新的随机数:

import random

x = random.randint(0,10)
y = 7
while x != y:
    print(x)   #Print old (non-7) random number
    x = random.randint(0,10)  #pick a new number.  I hope it's 7 so we can end this madness

print("You found {0}.  Congrats.  Go have a beer.".format(y))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接