For Loop Not Breaking(Python)

时间:2014-06-18 00:25:02

标签: python for-loop

我在Python中编写一个简单的For循环。有没有办法在不使用'break'命令的情况下打破循环。我认为通过设置count = 10表示将满足退出条件并且循环将停止。但事实似乎并非如此。

注意:部分挑战是使用FOR循环,而不是WHILE循环。

import random

guess_number = 0 
count = 0
rand_number = 0

rand_number = random.randint(0, 10)

print("The guessed number is", rand_number)    

for count in range(0, 5):
    guess_number = int(input("Enter any number between 0 - 10: "))
    if guess_number == rand_number:
        print("You guessed it!")
        count = 10
    else:
        print("Try again...")
        count += 1

我是编程的新手,所以我只是弄湿了脚。我可以使用'休息',但我正在试图弄清楚为什么当你正确输入猜测数字时循环没有结束。

8 个答案:

答案 0 :(得分:5)

此处的for循环与您在其他编程语言(如Java和C)中看到的不完全相同。range(0,5)生成一个列表,for循环迭代它。在循环的每次迭代中都没有检查条件。因此,您可以将循环变量重新分配给您心中的愿望,但在下一次迭代中,它将简单地设置为列表中下一个值。

无论如何,它仍然没有意义,因为你可以遍历任意列表。如果您的列表是range(0,5)而不是[1, 3, -77, 'Word', 12, 'Hello'],那该怎么办?没有办法以对破坏循环有意义的方式重新分配变量。

我可以想到三种合理的方法来摆脱循环:

  1. 使用break语句。这样可以保持代码清晰易懂
  2. 在try-except块中环绕循环并引发异常。这不适合您在此处显示的示例,但这是一种可以突破一个(或多个!)for循环的方法。
  3. 将代码放入函数中并使用return语句来突破。这也允许您突破多个for循环。
  4. 您可以从循环中断开的另一种方法(至少在Python 2.7中)是使用现有列表,然后在迭代期间修改它。 请注意,这是一个非常糟糕的方式,但它确实有效。我不确定这个示例是否适用于Python 3.x,但它适用于Python 2.7:

    iterlist = [1,2,3,4]
    for i in iterlist:
        doSomething(i)
        if i == 2:
            iterlist[:] = []
    

    如果您doSomething打印i,它只打印出1和2,然后退出循环而没有错误。再次,这是一个不好的方法

答案 1 :(得分:3)

您可以使用while

times = 5
guessed = False
while times and not guessed:
    guess_number = int(input("Enter any number between 0 - 10: "))
    if guess_number == rand_number:
        print("You guessed it!")
        guessed = True
    else:
        print("Try again...")
            times -= 1

答案 2 :(得分:1)

Python中的循环就像这样工作。

你有一个可迭代的对象(例如listtuple),然后你看看iterable中的每个元素,将当前值存储在指定的变量中

这就是为什么

for i in [0, 1, 2, 3]:
    print item

for j in range(4):
    print alist[j]

工作完全一样。 ij是您的存储变量,[0, 1, 2, 3]range(4)是您的相应可迭代项。 range(4)返回列表[0, 1, 2, 3],使其与第一个示例相同。

在您的示例中,您尝试将存储变量count分配给某个新号码(可以在某些语言中使用)。但是在python中,count只会被重新分配给range中的下一个变量并继续。如果你想摆脱循环

  1. 使用break。这是最pythonic的方式
  2. 在中间创建一个函数并return一个值(我不确定这是否是您想要对您的特定程序执行的操作)
  3. 使用try/except阻止并引发Exception虽然这不合适

  4. 作为旁注,如果您经常/经常提前退出列表,则可能需要考虑使用xrange()

      

    xrange()超出范围()的优势是最小的......除非......   从不使用所有范围的元素(例如循环时)   通常以休息结束)

    正如下面的评论所指出的,xrange仅适用于python 2.x.在python 3中,所有range的函数都像xrange

答案 3 :(得分:0)

在Python中,for循环意味着“为每个项目执行此操作”。要尽早结束此循环,您需要使用break。 while循环对谓词值起作用。如果您想要做某事,请使用它们,直到您的测试结果为止。例如:

tries = 0
max_count = 5
guessed = False

while not guessed and tries < max_count:
    guess_number = int(input("Enter any number between 0 - 10: "))
    if guess_number == rand_number:
        print("You guessed it!")
        guessed = True
    else:
        print("Try again...")
    tries += 1

答案 4 :(得分:0)

@Rob Watts说:Python for循环不像Java或C for循环那样工作。要更明确一点......

C“等效”将是:

for (count=0; count<5; count++) {
   /* do stuff */
   if (want_to_exit)
     count=10;
}

...这样可行,因为在循环的每次迭代开始之前都会检查count的值(count<5)。

在Python中,range(5)创建一个列表[0, 1, 2, 3, 4],然后使用for遍历此列表的元素,将它们逐个复制到count变量并处理他们离开了循环体。如果修改正文中的循环变量,Python for循环并不“关心”。

由于这个原因,Python的for循环实际上比C for循环更灵活。

答案 5 :(得分:0)

您可能想要的是使用break并避免分配计数变量。

请参阅以下内容,我已对其进行了一些评论编辑:

import random

guess_number = 0 
count = 0
rand_number = 0

rand_number = random.randint(0, 10)

print("The guessed number is", rand_number)    

# for count in range(0, 5): instead of count, use a throwaway name
for _ in range(0, 5): # in Python 2, xrange is the range style iterator
    guess_number = int(input("Enter any number between 0 - 10: "))
    if guess_number == rand_number:
        print("You guessed it!")
        # count = 10 # instead of this, you want to break
        break
    else:
        print("Try again...")
        # count += 1 also not needed

答案 6 :(得分:0)

正如其他人所说的那样,Python for循环更像是一个traditional foreach loop,因为它迭代了一组项目而没有检查条件。只要集合中有东西,Python就会接受它们,如果你重新分配循环变量,循环就不会知道或关心。

对于您正在做的事情,请考虑使用for ... break ... else语法,因为它更多&#34; Pythonic&#34;:

for count in range(0, 5):
    guess_number = int(input("Enter any number between 0 - 10: "))
    if guess_number == rand_number:
        print("You guessed it!")
        break
    else:
        print("Try again...")
else:
    print "You didn't get it."

答案 7 :(得分:0)

正如您的问题所述注意:部分挑战是使用FOR循环,而不是WHILE循环,并且您不想使用break,您可以它在一个函数中,并在猜到正确的数字打破循环时返回。

import random


def main():
    guess_number = 0
    count = 0
    rand_number = 0

    rand_number = random.randint(0, 10)

    print("The guessed number is", rand_number)

    for count in range(0, 5):
        guess_number = int(input("Enter any number between 0 - 10: "))
        if guess_number == rand_number:
            print ("You guessed it!")
            return
        else:
            print("Try again...")