在嵌套的while循环之间切换

时间:2017-04-24 02:56:13

标签: python loops while-loop

我是Python的新手,我想知道我是否能得到一些帮助。我认为一切正常,除了它输出Guess higher/lower提示然后打印出Enter a number:而不是要求第二个Guess higher/lower提示。我希望它说出第二个Guess提示,而不是Enter a number:我希望这个解释得足够好。如果没有,我会更新它。

from random import randint
N=randint(0,100)
i=1000
a=0
n=int(N)
while i!=n:
  I=int(input('Enter a number: '))
  i=int(I)
  a=a+1
  while i>n:
    i=int(input('Guess lower: '))
    a=a+1
  while i<n:
    i=int(input('Guess Higher: '))
    a=a+1
  while i==n:
    print('Correct')
    print('You took',a,'attempts.')
    break

2 个答案:

答案 0 :(得分:1)

您想要的行为不适用于while循环。 while循环用于迭代执行一段代码,直到满足条件。严格来说,这对您的代码来说是正确的,您实现的嵌套和代码的整体结构是不正确的。

如果使用ifelse语句会好得多。这些用于决定某事,并根据它是真还是假,执行一段代码。如果你仔细想想,这正是你试图解决的问题的固有性质。代码看起来像这样:

from random import randint
N=randint(0,100)
i=1000
a=0
n=int(N)

#Ask for initial input
i=int(input('Enter a number: '))
a=a+1

#Start loop that loops until i == n
while i!=n:
  if i>n:
    i=int(input('Guess lower: '))
    a=a+1
  elif i<n:
    i=int(input('Guess Higher: '))
    a=a+1
  else:
    print('Correct')
    print('You took',a,'attempts.')

如果您对elif不屑一顾,那么如果if语句不为真,并且elif之后的条件为真,则会执行该语句。你可以有多个elif's。查看任何初学者教程以了解更多信息。

答案 1 :(得分:1)

每当看到重复时,请记住DRY原则(不要重复自己)。此外,无需评论明显的事情。

  1. 首先要注意的是,有些事情正在反复进行,例如a=a+1input。尽量不要重复自己。
  2. 要注意的第二件事是,在每个循环中,唯一改变的是提示。尝试隔离这种变化。
  3. 最后要知道while循环是如何工作的。你只有一个循环,所以你只需要1个循环。所以循环将在i == n时停止,因此这是唯一一次&#34;纠正&#34;将打印。
  4. 我的最终代码:

    from random import randint
    
    a = 0
    i = -1
    n = randint(0, 100)
    prompt = "Enter a number: "
    
    while i != n:
        a += 1
        i=int(input(prompt))
        if i > n:
            prompt = 'Guess Lower: '
        elif i < n:
            prompt = 'Guess Higher: '
    print('Correct')
    print('You took {} attempts.'.format(a))