1

我正在尝试编写一个百分比计算器,它询问主题的数量,标记指定的主题数量并计算百分比。它工作正常,但在用户按“n”后调用exit()时不会退出:

value=输入(“是否再次计算(y/n):”)如果value.lower==“y”:百分比()elif value.lower==“n”:打印(“ok,sayonara”)退出()

完整代码为:

定义百分比():数字=[]x=int(输入('您希望找到多少受试者的百分比:'))对于范围(x)中的i:n=int(输入(“subject”+str(i+1)+“:”)数字.附加(n)最终=总和(数字)/长度(数字)打印(“百分比为”,最终为“%”)为True时:尝试:百分比()value=输入(“是否再次计算(y/n):”)如果value.lower==“y”:百分比()elif value.lower==“n”:打印(“ok,sayonara”)退出()除:打印(“操作!错误。请重试…”)

以下是发生的情况:问题_图像

4
  • 那么它打印出“sayonara”后会发生什么呢? 评论 2023年2月22日18:21
  • @mkrieger1甚至不打印。我会编辑这个问题 评论 2023年2月22日18:22
  • 两者都没有value.lower==“y”也不是value.lower=“n”将永远是真的。因此,退出()永远不会被调用。你知道如何计算百分比吗?你似乎在这里做的是计算算术平均值 评论 2023年2月22日18:54
  • @Pingu此代码假定最大分数为100,因此分数的平均值实际上是百分比。虽然我会添加功能以要求最高分数,谢谢! 评论 2023年2月23日7:05

4个答案4

重置为默认值

代码中有两个错误:

如果value.lower==“y”:

这里是比较函数对象值.低用绳子“y”,他们总是不同的。你的意思可能是:

如果value.lower()==“y”:

同样适用于==“n”.

修复此问题并不能修复整个代码,因为除:捕获所有中断,包括退出()中断,所以您需要除ValueError:而是允许退出()中断以完成您的程序。

以下是固定代码:

定义百分比():数字=[]x=int(输入('您希望找到多少受试者的百分比:'))对于范围(x)中的i:n=int(输入(“主题”+字符串(i+1)+“:”)数字.附加(n)最终=总和(数字)/长度(数字)打印(“百分比为”,最终为“%”)为True时:尝试:百分比()value=输入(“是否再次计算(y/n):”)如果value.lower()==“y”:百分比()elif value.lower()==“n”:打印(“ok,sayonara”)退出()除ValueError:打印(“操作!错误。请重试…”)
1
  • 有2个以上的错误 评论 2023年2月22日19:00
1

问题是你没有打电话给降低功能。使用value.lower().

0
1

值.低不调用函数,它引用函数本身。所以你要问的是一个函数等于value.lower=“n”.

您需要将其更改为value.lower()==“n”和相同的“y”.

你也没有条件value.lower()两者都不是“y”“n”.

0
0

问题是Except语句。在幕后,exit()引发一个SystemExit异常,该异常正由try-except处理。这也使得无法使用ctrl c和ctrl d终止程序,因为这也会引发异常(分别是KeyboardInterrupt和EOFError)。

非常直截了当,最好的做法是从不编写,除非在任何代码中都没有指定异常类型,否则极易出现错误

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.