import random num=random.randint(1,10) y=10000 while y<=0: for x in range(1,21): if num>=5: print(f'员工{x}发放工资1000元,账户余额还剩{y}元') y-=1000 else: print(f'员工{x}绩效不足不发工资,下一位') print('工资发完了')
时间: 2025-03-23 14:09:02 浏览: 26
你的代码中存在逻辑错误以及可能导致死循环的问题。让我们逐步分析并修复这段代码。
### 原始代码中的问题:
1. **`random.randint(1, 10)` 的使用**:你在程序开始时生成了一个随机数 `num`,但它在整个程序运行过程中保持不变。这会导致所有员工都受到同一个条件(`if num >= 5`)影响。
- 解决方案:每次迭代时重新生成一个新的随机数,而不是只用初始的一个值。
2. **`while y <= 0:` 循环条件**:这个条件永远无法进入,因为初始化时 `y = 10000` 并且没有其他操作会减少到小于或等于零之前就跳出循环了。
- 正确的做法可能是检查是否有足够的资金支付工资,并在每轮后更新余额直到耗尽为止。
3. **打印信息与实际扣款不符**:"工资发完了" 应该是在所有的薪水处理完成后输出的信息,但这里却可能提前执行了。
以下是修正后的版本:
```python
import random
# 初始金额为一万块
balance = 10000
for employee_id in range(1, 21): # 遍历每个员工编号从1至20号
performance_score = random.randint(1, 10) # 模拟每位员工的表现分数
if balance < 1000:
print("公司账户余额不足!")
break
elif performance_score >= 5:
print(f'员工{employee_id}: 绩效得分 {performance_score}, 发放工资1000元.')
balance -= 1000
print(f'\t当前剩余帐户余额:{balance} 元.\n')
else:
print(f'员工{employee_id}: 绩效得分 {performance_score}, 不符合发放标准,跳过此名员。\n')
else:
print('全部员工已评估完毕! 如果还有盈余即为结余:')
```
#### 对应调整说明及解释:
- 将外部无意义的 while 替换成了针对具体数量 (如本例中的二十个雇员) 进行固定次数遍历更为合适。
- 内部增加了对 account_balance 是否充足进行判断以防出现负数情况同时确保合理中断过程。
- 使用更具描述性的变量名称提高可读性和维护性比如把‘y’改为了更直观表达含义的“account_balance”。
阅读全文
相关推荐



















