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!"

参考技术A 如果你在第一次就输入8,程序会不执行循环,直接打印最后一句,如果不是第一次就输入8,那么后面的输入都是在循环内输入的,所以会打印两句

在 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循环的问题的主要内容,如果未能解决你的问题,请参考以下文章

python(10):while循环

python中的while循环与for循环怎么样那个比较好用?

python while循环

如何在python的内部for循环中打破while循环?

Python 循环语句

Python里for和while的区别(74)