Python While 循环突破问题

2023-11-25

我的问题是关于 while 循环的标志。这有效,但不像我想象的那样。我认为我不明白某些事情,所以如果有人能够解释,那就太好了。

根据我的理解,一旦满足我的条件之一,这应该会打破循环。因此,如果我输入“q”,它应该会中断并停止循环。但发生的情况是它不断循环,然后爆发。因此它会执行最后一个提示并打印异常。

(Python版本为3.8.5)

# Statement that tells the user what we need.
print("Enter two numbers and I will tell you the sum of the numbers.")
# Lets the user know they can press 'q' to exit the program.
print("Press 'q' at anytime to exit.")

keep_going = True

# Loop to make the program keep going until its told to stop.
while keep_going:
    # Prompt for user to input first number and store it in a variable.
    first_number = input("First number: ")
    # Create a break when entering the first number.
    if first_number == 'q':
        keep_going = False
    # Prompt for user to input second number and store it in a variable.
    second_number = input("Second number: ")
    # Create a break when entering the second number.
    if second_number == 'q':
        keep_going = False
    # Exception for non integers being input "ValueError"
    try:
        # Convert input to integers and add them. 
        # storing the answer in a variable.
        answer = int(first_number) + int(second_number)
    except ValueError:
        # Tell the user what they did wrong.
        print("Please enter a number!")
    else:    
        # Print the sum of the numbers
        print(f"\nThe answer is: {answer}")

使用这段代码,它会像我预期的那样立即爆发。

while True:
    first_number = input("First number: ")
    if first_number == 'q':
        break
    second_number = input("Second number: ")
    if second_number == 'q':
        break

我只是想了解有什么区别以及它是否应该如何工作。我觉得我错过了一些东西或者误解了一些东西。


的条件while循环仅在循环体的迭代之间进行检查,因此如果您在循环中间更改条件,则当前迭代将在循环终止之前完成。如果你想打破循环立即地,你需要break(无论条件如何都会自动中断循环)或continue(它跳转到下一次迭代,因此如果条件不再为真,将终止循环)。

Using while True: with a break当您想要停止循环时通常比尝试通过设置和取消设置标志来控制循环要简单得多。

FWIW,我可能会将所有内容放入一个函数中,然后用Exception, 像这样:

print("Enter two numbers and I will tell you the sum of the numbers.")
print("Press 'q' at anytime to exit.")


def input_number(prompt: str) -> int:
    """Ask the user to input a number, re-prompting on invalid input.
    Exception: raise EOFError if the user enters 'q'."""
    while True:
        try:
            number = input(f"{prompt} number: ")
            if number == 'q':
                raise EOFError
            return int(number)
        except ValueError:
            print("Please enter a number!")


while True:
    try:
        numbers = (input_number(n) for n in ("First", "Second"))
        print(f"The answer is: {sum(numbers)}")
    except EOFError:
        break

这使得扩展程序以处理两个以上的输入变得更容易;尝试在“第一”和“第二”后面添加“第三”! :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python While 循环突破问题 的相关文章

  • Spark 请求最大计数

    我是 Spark 的初学者 我尝试请求允许我检索最常访问的网页 我的要求如下 mostPopularWebPageDF logDF groupBy webPage agg functions count webPage alias cntW
  • Python Popen 与 psexec 挂起 - 不良结果

    我对 subprocess Popen 和我认为是管道的问题有疑问 我有以下代码块 从 cli 运行时 100 都不会出现问题 p subprocess Popen psexec serverName get cmd c ver echo
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • 我怎样才能更多地了解Python的内部原理? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我使用Python编程已经有半年多了 我对Python内部更感兴趣 而不是使用Python开发应用程序
  • 如何正确地将 MIDI 刻度转换为毫秒?

    我正在尝试将 MIDI 刻度 增量时间转换为毫秒 并且已经找到了一些有用的资源 MIDI Delta 时间刻度到秒 http www lastrayofhope co uk 2009 12 23 midi delta time ticks
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • Pandas 数据帧到 numpy 数组 [重复]

    这个问题在这里已经有答案了 我对 Python 很陌生 经验也很少 我已经设法通过复制 粘贴和替换我拥有的数据来使一些代码正常工作 但是我一直在寻找如何从数据框中选择数据 但无法理解这些示例并替换我自己的数据 总体目标 如果有人真的可以帮助
  • 如何通过在 Python 3.x 上按键来启动和中断循环

    我有这段代码 当按下 P 键时会中断循环 但除非我按下非 P 键 否则循环不会工作 def main openGame while True purchase imageGrab if a sum gt 1200 fleaButton ti
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 首先对列表中最长的项目进行排序

    我正在使用 lambda 来修改排序的行为 sorted list key lambda item item lower len item 对包含元素的列表进行排序A1 A2 A3 A B1 B2 B3 B 结果是A A1 A2 A3 B
  • 在 pytube3 中获取 youtube 视频的标题?

    我正在尝试构建一个应用程序来使用 python 下载 YouTube 视频pytube3 但我无法检索视频的标题 这是我的代码 from pytube import YouTube yt YouTube link print yt titl
  • Python 将日志滚动到变量

    我有一个使用多线程并在服务器后台运行的应用程序 为了无需登录服务器即可监控应用程序 我决定包括Bottle http bottlepy org为了响应一些HTTP端点并报告状态 执行远程关闭等 我还想添加一种查阅日志文件的方法 我可以使用以
  • 创建嵌套字典单行

    您好 我有三个列表 我想使用一行创建一个三级嵌套字典 i e l1 a b l2 1 2 3 l3 d e 我想创建以下嵌套字典 nd a 1 d 0 e 0 2 d 0 e 0 3 d 0 e 0 b a 1 d 0 e 0 2 d 0
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

    我的例子是这样的 for my key in my dict keys my dict my key mutate 上述代码的行为是否已定义 假设my dict是一本字典并且mutate是一个改变其对象的方法 我担心的是 改变字典中的值可能
  • Python 无法使用套接字绑定我的外部/公共 IP 地址,给出错误但是当使用本地 IP 地址时,错误不会显示

    这是出现主要错误的代码 与我的本地 IP 的绑定将起作用 s bind 192 168 1 4 port 与我的公共 IP 的绑定失败并出现以下错误 s bind 99 99 99 99 port WinError 10049 请求的地址在
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐

  • 如何使用python从mp3文件中提取原始数据?

    我有关于使用 Python 进行音频数据分析的作业 我想知道是否有任何好的模块可供我用来从 mp3 文件中提取原始数据 我的意思是原始数据 而不是元数据 id3 标签 我知道如何使用wave要处理的模块 wav文件 我可以readframe
  • 带点的 DataTable 列名称为何不适合 WPF 的 DataGrid 控件?

    运行这个 你会感到困惑
  • 使用 PyQt4 进行核心转储

    我从 PyQt4 开始 在最简单的示例中使用 QGraphicsScene View 时面临核心转储 usr bin python import sys from PyQt4 QtCore import from PyQt4 QtGui i
  • Plotly Dash 表回调

    我试图让滑块 用户输入和表格之间的依赖关系发挥作用 我尝试输出数据并使用回调来更新它 建议我只在回调中创建表并使用 Div 定义其在显示中的位置 其他信息 表是使用 dash table 库从 pandas DataFrame 创建的 数据
  • $?VAR 在 csh 中意味着什么?

    我遇到过用 csh 编写的这段代码 if LM LICENSE FILE then setenv LM LICENSE FILE LmLicense else switch LM LICENSE FILE case LmLicense br
  • 通过 html 按钮更改变量

    我正在学习 javascript 我决定创建简单的石头剪刀布游戏 我想让它可以通过按钮控制 所以我用html做了这个 div div
  • 如何使用 UIWebView 加载包含哈希片段“#”的 NSURL?

    给定一个本地 URL 地址 例如 index html 现在我需要使用UIWebView将其加载到 iPad 中 我按照以下步骤操作 创建 NSURL NSURL url NSURL fileURLWithPath http mysite
  • 如何使用 xQuery 对转义的 XML 进行取消编码

    我在 xQuery 中有一个类型为 xs string 的变量 其值为编码的 HTML 片段 twitter 推文的内容 它看起来像这样 今日头条美联社来源 b 奥巴马 b 挑选 司法职位撤回 新闻 休息 世界 http shar es m
  • Swift:如何从我的应用程序到 iBooks 打开本地 pdf

    我之前是用objective c的 下面的 Objective C 代码运行良好 in h property retain UIDocumentInteractionController docController 并以 m 为单位 NSS
  • 滚动到 ScrollView 中 TableLayout 的最后一行

    我想要一个动态表 在 ScrollView 中使用 TableLayout 随着时间的推移 由于用户交互而添加行 这工作正常 但是当我想使用滚动到表格末尾时fullScroll 它总是省略最后一行 也就是说 它会滚动 以便最后一个之前的一个
  • Powershell - 通过删除最后几个字符来重命名文件名

    我想删除多个文件名的最后 11 个字符 例如 我有这些文件名 ABCDE 2015 10 20 HIJKL 2015 10 20 MNOPQ 2015 10 20 RSTUV 2015 10 20 想将它们重命名为 ABCDE HIJKL
  • 将 linq 中的字符串转换为大数据库上的实体

    我想将 linq toEntity 中的字符串转换为 int 但 Convert ToInt32 和 int Parse 无法转换为 sql 我的数据库很大 无法将它们全部存入内存 超过 60k 记录并变得更大 我的查询是这样的 int m
  • 在 Django 网站中嵌入 Bokeh 图会导致空白页面且没有错误消息

    我正在尝试将 Bokeh 图嵌入到具有上传按钮的 Django 网站中 我正在使用给出的例子here作为起点 然后添加有关嵌入的说明here 这是我的问题的后续here因为我现在有一个新问题 当我转到与其关联的网址时 该图不会显示 但没有错
  • 如何在激活器中获取 IEclipseContext

    我在 Eclipse 4 RCP 应用程序中遇到了一个问题 我需要记录一些事件 我需要以某种方式获得对记录器的引用 我知道 如何使用IEclipseContext 但我没有找到如何获得IEclipseContext没有依赖注入 我无法在激活
  • UITableView reloadRowsAtIndexPaths 隐藏行

    我将 UITableView 与静态单元格一起使用 如果我使用reloadData 比一切都好 如果我尝试reloadRowsAtIndexPaths它隐藏行 如果我上下拖动 tableView 更新单元格时 就会出现行 如果您的表格单元格
  • 如何向应用主题添加CardView属性?

    我的问题类似于 如何将 CardView 属性放入样式中 但我需要更深入 我正在使用 AppCompat 主题 我的样式看起来像 style name AppTheme parent Theme AppCompat Light DarkAc
  • 使用C在Linux中获取用户组的正确方法

    我想知道是否有用于 unix 命令组的替代 C 库 groups lists all the group id s of the user 有一个名为 getgroups 的方法 但它返回此方法的用户组 有没有办法使用 C 获取特定用户的组
  • Typescript:在编译时在其自己的属性中获取类名

    例如 如果我们有一个这样的类 class MyClass className string 是否可以在编译时将 MyClass 分配给 className 属性 编辑 已经尝试过 this constructor name 然而 后者对缩小
  • Android:TimePicker setIs24HourView 不起作用

    我正在尝试以 24 小时格式使用 TimePicker 并且我正在使用 setIs24HourView true 但我仍然没有在 TimePicker 上获得 24 小时格式 这是我在 Activity 的 onCreate 中的代码 ti
  • Python While 循环突破问题

    我的问题是关于 while 循环的标志 这有效 但不像我想象的那样 我认为我不明白某些事情 所以如果有人能够解释 那就太好了 根据我的理解 一旦满足我的条件之一 这应该会打破循环 因此 如果我输入 q 它应该会中断并停止循环 但发生的情况是