首页 > 编程问答 >python中的while循环不退出

python中的while循环不退出

时间:2024-07-28 04:19:01浏览次数:8  
标签:python loops while-loop

我试图完成第一年的 python 商业课程作业,但我的 while 循环无法退出,有人能帮忙吗?

    commisionTable = [
    {"admin_fee": 100, "comm_rate": 0.10},
    {"admin_fee": 125, "comm_rate": 0.12},
    {"admin_fee": 150, "comm_rate": 0.15},
    {"admin_fee": 175, "comm_rate": 0.17},
    {"admin_fee": 200, "comm_rate": 0.20}]

    def commision_table(sales,commisionTable):
        if sales < 10000:
            return (commisionTable[0]["admin_fee"], commisionTable[0]["comm_rate"])
        elif sales >= 10000 and sales <= 14999.99:
            return (commisionTable[1]["admin_fee"], commisionTable[1]["comm_rate"])
        elif sales >= 15000 and sales <= 17999.99:
            return (commisionTable[2]["admin_fee"], commisionTable[2]["comm_rate"])
        elif sales >= 18000 and sales <= 21999.99:
            return (commisionTable[3]["admin_fee"], commisionTable[3]["comm_rate"])
        elif sales >= 22000:
            return (commisionTable[4]["admin_fee"], commisionTable[4]["comm_rate"])
        else:
            print("Invalid.")

    salespersons = 0

    while int(salespersons) != -1:

        sales = float(input("Please enter the salesperson's monthly sales: "))
        advance_pay = float(input("Please enter the salesperson's advance pay: "))

        data = commision_table(sales,commisionTable)

        commision = sales * data[1]
        pay =  commision - data[0] - advance_pay
        print("The Monthly pay is :", pay)

        salespersons = int(input("Are there more salespersons, press any number - If not press -1? "))

我尝试使用布尔值和运算符,但它不断将销售人员重置为 0,我不知道为什么。我什至尝试使用break和quit(),但循环拒绝停止工作——它一直循环。我还尝试将包括销售人员在内的所有变量转换为 int,但它仍然不起作用。


你的 while 循环之所以没有退出的原因是你没有在循环的每次迭代中更新 salespersons 变量。你在循环外要求输入 salespersons ,但不是在循环内。

以下是你的代码的工作原理:

  1. 在循环外:
  2. 你将 salespersons 初始化为 0
  3. 你使用 while int(salespersons) != -1: 检查 salespersons 是否不等于 -1 。由于它是 0 ,所以条件为真,循环启动。

  4. 在循环内:

  5. 你会要求提供销售员的销售额和预付款。
  6. 你计算并打印月薪。
  7. 你会询问是否还有更多销售员。 这里才是问题所在 。你使用 input() 来获取用户的输入,但你没有使用这个输入来更新 salespersons 变量。
  8. 因为 salespersons 没有更新,它仍然是 0

  9. 回到循环条件:

  10. 循环再次检查 salespersons 是否不等于 -1 。由于 salespersons 仍然是 0 (没有更新),所以条件仍然为真,循环会继续。

为了解决这个问题,你需要在循环 input() 的结果赋给 salespersons 变量。以下是如何修改你的代码的方法:

commisionTable = [
    {"admin_fee": 100, "comm_rate": 0.10},
    {"admin_fee": 125, "comm_rate": 0.12},
    {"admin_fee": 150, "comm_rate": 0.15},
    {"admin_fee": 175, "comm_rate": 0.17},
    {"admin_fee": 200, "comm_rate": 0.20}]

def commision_table(sales,commisionTable):
    # ... (这段代码保持不变)

#  不需要将 salespersons 初始化为 0

#  循环条件现在始终为真,允许我们进入循环
while True: 
    sales = float(input("Please enter the salesperson's monthly sales: "))
    advance_pay = float(input("Please enter the salesperson's advance pay: "))

    data = commision_table(sales,commisionTable)

    commision = sales * data[1]
    pay =  commision - data[0] - advance_pay
    print("The Monthly pay is :", pay)

    #  在循环内询问是否有更多销售员,并将输入存储在 salespersons 中
    salespersons = int(input("Are there more salespersons, press any number - If not press -1? ")) 

    #  检查 salespersons 是否等于 -1。如果是,则使用 break 退出循环。
    if salespersons == -1:
        break 

通过这些改变,你的循环现在将正确地检查用户在每次迭代结束时是否输入了 -1 ,如果是,则退出。

标签:python,loops,while-loop
From: 78802312

相关文章

  • python---json文件写入
    ​ 使用到的知识点:os模块执行linux指令、json.dump()、withopenasf代码实现importsysimportosimportjson #向json文件file中添加内容data,其中data的类型为字典defwrite_json(file,data):    #如果文件存在,则删除    if(os.path.exists(fi......
  • python错题记录:布尔运算与逻辑值检测
    一前言环境:python3.10win10二布尔运算与逻辑值检测1案例案例1如上,在布尔运算时,有些时候代码只会运算前面的一部分,剩下的部分根本不会运算。以前在练习算法代码时,就利用这个规则来减少代码的工作量案例2如上,之前好长一段时间,上面的布尔运算总是让我感到困惑布尔运......
  • python---字典遍历
    1、三种常见的字典遍历实现defget_key_value(dics):  '''遍历所有键值对'''  forkey,valueindics.items():    print(f"{key}:{value}")defget_keys(dics):  '''遍历所有的键'''  forkeyindics......
  • python基本语法三天速成系列day1(看完这篇你就会)
    注释注释是代码非常重要的一部分,它的主要作用有:解释代码目的:注释可以说明代码段或函数的目的和功能,帮助其他开发者快速理解代码的意图。复杂逻辑说明:对于复杂的算法或业务逻辑,通过注释可以解释这些逻辑是如何工作的,降低后续维护的难度。提高可读性:良好的注释可以使代码结......
  • Python学习笔记46:游戏篇之外星人入侵(七)
    前言到目前为止,我们已经完成了游戏窗口的创建,飞船的加载,飞船的移动,发射子弹等功能。很高兴的说一声,基础的游戏功能已经完成一半了,再过几天我们就可以尝试驾驶飞船击毁外星人了。当然,计分,游戏次数,背景音乐,开始启动等按钮的功能需要我们慢慢添加,这些功能不影响游戏的使用,影......
  • Python学习笔记45:游戏篇之外星人入侵(六)
    前言飞船模块的功能基本已经完成。今天继续完成子弹模块的功能。子弹模块子弹和飞船模块,在游戏逻辑中有一种生成与被生成的表面关系,因为子弹在游戏中是由飞船发射的。但是在我们实际抽象的过程中,飞船与子弹并不是is的关系,甚至可以说不是has的关系。因此我们需要将两个对......
  • 三种语言实现二分(C++/Python/Java)
    题目给定一个按照升序排列的长度为......
  • python+flask计算机毕业设计农场营销管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着现代农业的快速发展,农场管理日益复杂,尤其是营销环节,传统的销售模式已难以满足市场快速变化的需求。农场主面临着如何高效管理农资采购......
  • python+flask计算机毕业设计社区独居老人健康管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会老龄化的加速,独居老人群体日益庞大,成为社会关注的焦点。这一群体在享受独立生活的同时,也面临着健康监测不及时、生活照料缺失、医......
  • NX二次开发(python)-创建管(一)
    用UF函数创建管,下图为NXOpenPython的参考指南:1.创建管可以用线也可以用边,以下是用线创建管的代码,先创建一个非关联线后再创建一个管importNXOpen.UFsign=NXOpen.UF.Modl.FeatureSigns.ValueOf(0)line_coords=NXOpen.UF.Curve.Line()line_coords.StartPoint=[0.0,0.0......