我在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
我是编程的新手,所以我只是弄湿了脚。我可以使用'休息',但我正在试图弄清楚为什么当你正确输入猜测数字时循环没有结束。
答案 0 :(得分:5)
此处的for
循环与您在其他编程语言(如Java和C)中看到的不完全相同。range(0,5)
生成一个列表,for
循环迭代它。在循环的每次迭代中都没有检查条件。因此,您可以将循环变量重新分配给您心中的愿望,但在下一次迭代中,它将简单地设置为列表中下一个值。
无论如何,它仍然没有意义,因为你可以遍历任意列表。如果您的列表是range(0,5)
而不是[1, 3, -77, 'Word', 12, 'Hello']
,那该怎么办?没有办法以对破坏循环有意义的方式重新分配变量。
我可以想到三种合理的方法来摆脱循环:
break
语句。这样可以保持代码清晰易懂for
循环的方法。return
语句来突破。这也允许您突破多个for
循环。您可以从循环中断开的另一种方法(至少在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中的循环就像这样工作。
你有一个可迭代的对象(例如list
或tuple
),然后你看看iterable中的每个元素,将当前值存储在指定的变量中
这就是为什么
for i in [0, 1, 2, 3]:
print item
和
for j in range(4):
print alist[j]
工作完全一样。 i
和j
是您的存储变量,[0, 1, 2, 3]
和range(4)
是您的相应可迭代项。 range(4)
返回列表[0, 1, 2, 3]
,使其与第一个示例相同。
在您的示例中,您尝试将存储变量count
分配给某个新号码(可以在某些语言中使用)。但是在python中,count
只会被重新分配给range
中的下一个变量并继续。如果你想摆脱循环
break
。这是最pythonic的方式return
一个值(我不确定这是否是您想要对您的特定程序执行的操作)try/except
阻止并引发Exception
虽然这不合适作为旁注,如果您经常/经常提前退出列表,则可能需要考虑使用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...")