因此,我主要是在寻求关于如何整理代码的建议。我有一个类,它有一个整数实例变量,x \in 0,100。我想根据实例的x值为每个实例分配一个字母等级(实例变量g)。有没有比使用大量if、elif、else语句更好/更简洁的方法呢?
if self.x < 25:
self.g = 'f'
elif self.x < 50:
self.g = 'e'
elif self.x < 70:
self.g = 'd'
elif self.x < 80:
self.g = 'c'
elif self.x < 90:
self.g = 'b'
else:
self.g = 'a'发布于 2021-09-16 12:19:55
您可以使用pandas来执行此操作:
import pandas as pd
s = pd.Series([2, 41, 61, 83])
pd.cut(s, [0, 25, 50, 70, float("inf")], labels=['a', 'b', 'c', 'd'], retbins=True, right=True)
# 0 a
# 1 b
# 2 c
# 3 d不带库(credits):
class RangeDict(dict):
def __getitem__(self, item):
if not isinstance(item, range):
for key in self:
if item in key:
return self[key]
raise KeyError(item)
else:
return super().__getitem__(item)
rng = RangeDict({range(0, 25): 'f', range(25,50): 'e'})
val = 21
print(rng[val])
# f发布于 2021-09-16 12:36:34
可以只用一个循环,不要太花哨。
letters = 'fedcba'
grades = [25, 50, 70, 80, 90, 101]
x = 75
for letter, grade in zip(letters, grades):
if x < grade:
g = letter
break发布于 2021-09-16 12:37:27
您可以只使用dict和for循环。
grade_limits = {25: 'f', 50: 'e', 70: 'd', 80: 'c', 90: 'b'}
for limit, grade in grade_limits.items():
if self.x < limit:
self.g = grade
break
else:
self.g = 'a'这更加简洁,并且对'a'没有上限。
https://stackoverflow.com/questions/69208224
复制相似问题