python – 为什么这段代码只能工作一半的时间?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为什么这段代码只能工作一半的时间?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1965字,纯文字阅读大概需要3分钟。
内容图文
![python – 为什么这段代码只能工作一半的时间?](/upload/InfoBanner/zyjiaocheng/755/4ed8dda802fb4193b5484b6a0ddf0830.jpg)
我有以下测试
def test_employees_not_arround_for_more_than_3_rounds(self):
self.game_object.generate_workers()
people_in_list_turn_1 = self.game_object.employees[:]
self.game_object.next_turn()
self.game_object.generate_workers()
self.game_object.next_turn()
self.game_object.generate_workers()
self.game_object.next_turn()
for employee in people_in_list_turn_1:
self.assertFalse(employee in self.game_object.employees)
基本上,它会生成一个随机数的worker,并将其添加到我的game_object.employees列表中.
当我调用game_object.next_turn函数时,每个员工都有一个turns_unemployed变量,该变量保存他们失业的次数,一旦达到3,工人将完全从game_object.employees列表中删除.
以下是game_object.py的实现代码:
def generate_workers(self):
workersToAdd = range(random.randrange(1,8))
for i in workersToAdd:
self.__employees.append(Employee())
def next_turn(self):
self.__current_turn += 1
self.__call_employees_turn_function()
self.__remove_workers_unemployed_for_3_rounds()
def __call_employees_turn_function(self):
for employee in self.employees:
employee.turn()
def __remove_workers_unemployed_for_3_rounds(self):
for employee in self.employees:
if employee.turns_unemployed >= 3:
self.employees.remove(employee)
我已经有一个测试,检查在调用employee.turn()时,turns_unemployed变量实际上增加了1,所以我知道它有效…
在这里真正让我烦恼的是,我的测试只有50%的时间运行它,我无法弄清楚为什么……任何人都会看到任何可能导致任何差异的东西?
顺便说一下,运行Python 3.2.2
解决方法:
在__remove_workers_unemployed_for_3_rounds中迭代它时,您正在从列表中删除项目,因此循环会跳过您希望它删除的项目.您需要迭代列表的副本.
def __remove_workers_unemployed_for_3_rounds(self):
for employee in self.employees[:]:
if employee.turns_unemployed >= 3:
self.employees.remove(employee)
例:
每回合您就会产生2名新员工.在第4回合,你有2名员工要删除(列表中的两个).您开始迭代并删除第一个.该列表现在只有五个项目,但迭代继续并查看第二个项目.问题是第二项不再是第二名员工,而是第三项.第二名员工将留在列表中,您的测试将失败.只有在第一个回合中只生成一名员工时,您的测试才有效.
内容总结
以上是互联网集市为您收集整理的python – 为什么这段代码只能工作一半的时间?全部内容,希望文章能够帮你解决python – 为什么这段代码只能工作一半的时间?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。