python中while循环的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中while循环的问题相关的知识,希望对你有一定的参考价值。
temp = input("输入您的数字")guess = int(temp)while guess != 8: temp = input("猜错了,请重新输入!") guess= int(temp) if guess == 8: print("哼,猜中了也没有奖励!") else: if guess > 8 : print ("猜大了!") else: print ("猜小了!")print("不玩了,结束了!")当我输入的值为8时候,while 条件应该直接判断未假,然后直接打印不玩了,结束了这个字符串,怎么输入8的时候,还会到while里面的if进行判断,结果输出两个字符串,一个为哼,猜中了,也没有奖励,一个是不玩了,结束了。
Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:
while 判断条件:
执行语句……
执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。
当判断条件假false时,循环结束。
执行流程图如下:
Gif 演示 Python while 语句执行过程
实例
#!/usr/bin/python
count = 0while (count < 9): print 'The count is:', count
count = count + 1
print "Good bye!"
运行实例 »
以上代码执行输出结果:
The count is: 0The count is: 1The count is: 2The count is: 3The count is: 4The count is: 5The count is: 6The count is: 7The count is: 8Good bye!
while 语句时还有另外两个重要的命令 continue,break 来跳过循环,continue 用于跳过该次循环,break 则是用于退出循环,此外"判断条件"还可以是个常值,表示循环必定成立,具体用法如下:
# continue 和 break 用法
i = 1while i < 10:
i += 1
if i%2 > 0: # 非双数时跳过输出
continue
print i # 输出双数2、4、6、8、10
i = 1while 1: # 循环条件为1必定成立
print i # 输出1~10
i += 1
if i > 10: # 当i大于10时跳出循环
break
无限循环
如果条件判断语句永远为 true,循环将会无限的执行下去,如下实例:
实例
#!/usr/bin/python# -*- coding: UTF-8 -*-
var = 1while var == 1 : # 该条件永远为true,循环将无限执行下去
num = raw_input("Enter a number :")
print "You entered: ", num
print "Good bye!"
以上实例输出结果:
Enter a number :20You entered: 20Enter a number :29You entered: 29Enter a number :3You entered: 3Enter a number between :Traceback (most recent call last):
File "test.py", line 5, in <module>
num = raw_input("Enter a number :")KeyboardInterrupt
注意:以上的无限循环你可以使用 CTRL+C 来中断循环。
循环使用 else 语句
在 python 中,while … else 在循环条件为 false 时执行 else 语句块:
实例
#!/usr/bin/python
count = 0while count < 5: print count, " is less than 5"
count = count + 1else: print count, " is not less than 5"
以上实例输出结果为:
0 is less than 51 is less than 52 is less than 53 is less than 54 is less than 55 is not less than 5
简单语句组
类似 if 语句的语法,如果你的 while 循环体中只有一条语句,你可以将该语句与while写在同一行中, 如下所示:
实例
#!/usr/bin/python
flag = 1
while (flag): print 'Given flag is really true!'
print "Good bye!"
在 Python 的嵌套列表中遇到值时如何结束 While 循环?
【中文标题】在 Python 的嵌套列表中遇到值时如何结束 While 循环?【英文标题】:How to end a While-Loop when value is met inside a Nested List in Python? 【发布时间】:2020-10-10 18:22:36 【问题描述】:我有一个嵌套列表,当通过 For 循环搜索嵌套循环内的值时,我试图结束一个 while 循环。我的问题是它一直在循环。
listA = [
['a','b'], # 0, -5
['b','c'], # 1, -4
['c','d'], # 2, -3
['a','d'], # 3, -2
['b','e'], # 4, -1
]
endpoint = 'c'
point = ''
while point is not endpoint:
for sets in listA:
for point in sets:
print(point)
我希望输出是这样的:
a
b
b
c
【问题讨论】:
【参考方案1】:你可以这样做:-
listA = [
['a','b'], # 0, -5
['b','c'], # 1, -4
['c','d'], # 2, -3
['a','d'], # 3, -2
['b','e'], # 4, -1
]
endpoint = 'c'
done = False
for sets in listA:
if done:
break
for point in sets:
print(point)
if point == endpoint:
done=True
break
【讨论】:
这很好用!但是,我想进一步了解,我可以看到变量“完成”是一个布尔值,我想知道它是如何有效的,而我的却不是,当它看起来很简单时?span> 因为在您的代码中,程序位于“for 循环”内,而您的“while 条件”位于该“for 循环”之外。但在我的代码中,我在“for 循环”中设置了 break 语句 我明白了。我有点明白了。感谢您清除它!【参考方案2】:Yash 的回答很有效。
另一种方法是定义一个函数并在点等于端点时返回。
listA = [
['a','b'], # 0, -5
['b','c'], # 1, -4
['c','d'], # 2, -3
['a','d'], # 3, -2
['b','e'], # 4, -1
]
endpoint = 'c'
def foo(items, endpoint):
for sets in items:
for point in sets:
print(point)
if point == endpoint:
return
foo(listA, endpoint)
但要回答你的问题为什么它不起作用,这是因为第二个 for
循环将始终完全执行,并且 point 的值将始终是最后一组的最后一个值在列表中(在本例中为 'e'
)。这就是为什么 while 循环将永远运行的原因,因为它总是会检查 'e' 是否不是 'c' 评估为真。
如果您想保留旧的解决方案,可以这样做:
listA = [
['a','b'], # 0, -5
['b','c'], # 1, -4
['c','d'], # 2, -3
['a','d'], # 3, -2
['b','e'], # 4, -1
]
endpoint = 'c'
point = ''
while point != endpoint:
for sets in listA:
for point in sets:
print(point)
if endpoint == point:
break
else:
continue
break
当point
等于endpoint
时,它基本上是从嵌套的for
循环中制动。
如您所见,您检查点和端点是否相同两次(在 if endpoint == point
和 while 循环中),因此 while 循环是不必要的。
【讨论】:
谢谢!现在它更清楚了,你的解释真的很棒。我不知道我可以在 For-Loop 中使用 Else 条件。 很高兴它对您有所帮助。在 Python 中,您可以 :) 您可以在此处阅读更多相关信息:docs.python.org/3/tutorial/controlflow.html,第 4.4 节。以上是关于python中while循环的问题的主要内容,如果未能解决你的问题,请参考以下文章