通话清单未在 python 中一直搜索
call list not searching all the way through in python
我有这个代码:
class Junior_devs:
entry_list = []
raise_amount = 1.04
sum = 0
def __init__(self, first, last, pay, email):
self.first = first
self.last = last
self.pay = pay
self.email = email
def apply_raise(self):
if self in Junior_devs.entry_list:
self.pay = (int(self.pay) * Junior_devs.raise_amount)
else:
self.pay = (int(self.pay) * Senior_devs.raise_amount)
@classmethod
def add_employee(cls, string):
first, last, pay, email = string.split(" ")
emp = cls(first, last, int(pay), email)
cls.entry_list.append(emp)
return emp
@classmethod
def sumOfpay(cls):
sum = 0
for x in cls.entry_list:
dicti = x.__dict__
sum += int(dicti["pay"])
return sum
def change_level(self):
if self in Junior_devs.entry_list:
Junior_devs.entry_list.remove(self)
Senior_devs.entry_list.append(self)
elif self in Senior_devs.entry_list:
Senior_devs.entry_list.remove(self)
Junior_devs.entry_list.append(self)
class Senior_devs(Junior_devs):
entry_list = []
raise_amount = 1.10
emp1 = Junior_devs.add_employee("imri peretz 20000 imrip27@gmail.com")
emp3 = Junior_devs.add_employee("tray belfort 10000 trey.belfort@gmail.com")
emp2 = Senior_devs.add_employee("Test User 1000 test.user@gmail.com")
emp4 = Senior_devs.add_employee("jordan belfort 2000 jordan.belfort@gmail.com")
print("Juniors: ")
for x in Junior_devs.entry_list:
print(x.__dict__)
print("Seniors: ")
for x in Senior_devs.entry_list:
print(x.__dict__)
print("---------------")
for x in Junior_devs.entry_list:
Junior_devs.change_level(x)
print("Juniors: ")
for x in Junior_devs.entry_list:
print(x.__dict__)
print("Seniors: ")
for x in Senior_devs.entry_list:
print(x.__dict__)
当我使用 change_level 函数将一个实例从初级切换到高级时,它们都会切换,但总是有 1 个实例进行切换。
使用功能之前:
Juniors:
{'first': 'imri', 'last': 'peretz', 'pay': 20000, 'email': 'imrip27@gmail.com'}
{'first': 'tray', 'last': 'belfort', 'pay': 10000, 'email': 'trey.belfort@gmail.com'}
Seniors:
{'first': 'Test', 'last': 'User', 'pay': 1000, 'email': 'test.user@gmail.com'}
{'first': 'jordan', 'last': 'belfort', 'pay': 2000, 'email': 'jordan.belfort@gmail.com'}
使用后:
Juniors:
{'first': 'tray', 'last': 'belfort', 'pay': 10000, 'email': 'trey.belfort@gmail.com'}
Seniors:
{'first': 'Test', 'last': 'User', 'pay': 1000, 'email': 'test.user@gmail.com'}
{'first': 'jordan', 'last': 'belfort', 'pay': 2000, 'email': 'jordan.belfort@gmail.com'}
{'first': 'imri', 'last': 'peretz', 'pay': 20000, 'email': 'imrip27@gmail.com'}
Juniors 的最后一个实例也应该转移到 Seniors。
这就是我遇到的问题,因为我在 class 的条目列表中循环的方式应该在整个列表中循环,但我找不到为什么它在最后一个元素处停止的原因。希望得到一些帮助。
所有问题都使 remove()
您在迭代列表中 运行。
当您从列表中删除元素时,下一个元素将移动到它的位置,稍后 for
-loop 会跳过该元素。如果您有更多元素,那么它会跳过所有“偶数”元素(第二、第四、第六、第八等)
您应该首先将所有元素附加到 Senior
,然后从 Junion
中删除所有元素。
或者您应该处理此列表的副本
for x in Junior_devs.entry_list.copy(): # <-- work on copy of list
Junior_devs.change_level(x)
我有这个代码:
class Junior_devs:
entry_list = []
raise_amount = 1.04
sum = 0
def __init__(self, first, last, pay, email):
self.first = first
self.last = last
self.pay = pay
self.email = email
def apply_raise(self):
if self in Junior_devs.entry_list:
self.pay = (int(self.pay) * Junior_devs.raise_amount)
else:
self.pay = (int(self.pay) * Senior_devs.raise_amount)
@classmethod
def add_employee(cls, string):
first, last, pay, email = string.split(" ")
emp = cls(first, last, int(pay), email)
cls.entry_list.append(emp)
return emp
@classmethod
def sumOfpay(cls):
sum = 0
for x in cls.entry_list:
dicti = x.__dict__
sum += int(dicti["pay"])
return sum
def change_level(self):
if self in Junior_devs.entry_list:
Junior_devs.entry_list.remove(self)
Senior_devs.entry_list.append(self)
elif self in Senior_devs.entry_list:
Senior_devs.entry_list.remove(self)
Junior_devs.entry_list.append(self)
class Senior_devs(Junior_devs):
entry_list = []
raise_amount = 1.10
emp1 = Junior_devs.add_employee("imri peretz 20000 imrip27@gmail.com")
emp3 = Junior_devs.add_employee("tray belfort 10000 trey.belfort@gmail.com")
emp2 = Senior_devs.add_employee("Test User 1000 test.user@gmail.com")
emp4 = Senior_devs.add_employee("jordan belfort 2000 jordan.belfort@gmail.com")
print("Juniors: ")
for x in Junior_devs.entry_list:
print(x.__dict__)
print("Seniors: ")
for x in Senior_devs.entry_list:
print(x.__dict__)
print("---------------")
for x in Junior_devs.entry_list:
Junior_devs.change_level(x)
print("Juniors: ")
for x in Junior_devs.entry_list:
print(x.__dict__)
print("Seniors: ")
for x in Senior_devs.entry_list:
print(x.__dict__)
当我使用 change_level 函数将一个实例从初级切换到高级时,它们都会切换,但总是有 1 个实例进行切换。 使用功能之前:
Juniors:
{'first': 'imri', 'last': 'peretz', 'pay': 20000, 'email': 'imrip27@gmail.com'}
{'first': 'tray', 'last': 'belfort', 'pay': 10000, 'email': 'trey.belfort@gmail.com'}
Seniors:
{'first': 'Test', 'last': 'User', 'pay': 1000, 'email': 'test.user@gmail.com'}
{'first': 'jordan', 'last': 'belfort', 'pay': 2000, 'email': 'jordan.belfort@gmail.com'}
使用后:
Juniors:
{'first': 'tray', 'last': 'belfort', 'pay': 10000, 'email': 'trey.belfort@gmail.com'}
Seniors:
{'first': 'Test', 'last': 'User', 'pay': 1000, 'email': 'test.user@gmail.com'}
{'first': 'jordan', 'last': 'belfort', 'pay': 2000, 'email': 'jordan.belfort@gmail.com'}
{'first': 'imri', 'last': 'peretz', 'pay': 20000, 'email': 'imrip27@gmail.com'}
Juniors 的最后一个实例也应该转移到 Seniors。 这就是我遇到的问题,因为我在 class 的条目列表中循环的方式应该在整个列表中循环,但我找不到为什么它在最后一个元素处停止的原因。希望得到一些帮助。
所有问题都使 remove()
您在迭代列表中 运行。
当您从列表中删除元素时,下一个元素将移动到它的位置,稍后 for
-loop 会跳过该元素。如果您有更多元素,那么它会跳过所有“偶数”元素(第二、第四、第六、第八等)
您应该首先将所有元素附加到 Senior
,然后从 Junion
中删除所有元素。
或者您应该处理此列表的副本
for x in Junior_devs.entry_list.copy(): # <-- work on copy of list
Junior_devs.change_level(x)