我试图完成第一年的 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
,但不是在循环内。
以下是你的代码的工作原理:
- 在循环外:
-
你将
salespersons
初始化为0
。 -
你使用
while int(salespersons) != -1:
检查salespersons
是否不等于-1
。由于它是0
,所以条件为真,循环启动。 -
在循环内:
- 你会要求提供销售员的销售额和预付款。
- 你计算并打印月薪。
-
你会询问是否还有更多销售员。
这里才是问题所在
。你使用
input()
来获取用户的输入,但你没有使用这个输入来更新salespersons
变量。 -
因为
salespersons
没有更新,它仍然是0
。 -
回到循环条件:
-
循环再次检查
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
,如果是,则退出。