修改函数以返回不同的值

时间:2018-06-01 15:24:00

标签: python function variables return

我必须修改函数gp,以便通过加0.3或减去0.3来处理+和 - 等级。例如,B +值为3.3点,C-值为1.7点。

实施例。

>>> gp('A-')
3.7

>>>gp('B+')
3.3

建议是我可以添加一堆elif子句来分别测试每个等级,但类似的设计是使用对s.startswith的调用来计算字母等级的值,然后使用s.endswith来看你是否应该增加或减去0.3分。

到目前为止,这就是我所拥有的。

def gp(s):
       A = 4
       return A
       B = 3
       return B
       C = 2
       return C
       D = 1
       return D
       F = 0
       return f

5 个答案:

答案 0 :(得分:3)

您可以在字典中存储成绩和后缀的数值,而不是一系列if/elif语句。此外,您不必使用startswithendswith,您可以在检查长度后使用s[0]s[1]来获取字符串中的第一个或第二个字符。你也可以使用s[1:]来获取从1位置开始的所有内容,即使它是空的。

grades = {'A': 4, 'B': 3, 'C': 2, 'D': 1, 'F': 0}
signs = {'+': 0.3, '-': -0.3, '': 0}
def gp(s):
    return grades[s[0]] + signs[s[1:]]

>>> gp("A+")
4.3
>>> gp("C-")
1.7
>>> gp("F")
0

答案 1 :(得分:2)

gp功能有几个问题。

虽然可以枚举它们,但我建议您阅读以下资源:

准备好之后,我强烈建议您使用词典存储映射。这是一个例子:

grade_dict = dict(zip('ABCDF', (4, 3, 2, 1, 0)))
sign_dict = dict(zip('-+', (-0.3, 0.3)))

def gp(s):

    grade, *sign = s

    if sign:
        return grade_dict[grade] + sign_dict[sign[0]]
    else:
        return grade_dict[grade]

res = gp('A-')  # 3.7

编辑:我的学校教育没有涉及GPA,所以我没有抓住这个。如果您需要上限为4.0,则可以使用此修改:

def gp(s):

    grade, *sign = s

    if sign:
        res = grade_dict[grade] + sign_dict[sign[0]]
    else:
        res = grade_dict[grade]

    return max(res, 4.0)

答案 2 :(得分:1)

我的建议是使用一本字典来说明每个特定年级会得到多少分。使用字典有点像switch语句的Python等价物,通常认为比长if/elif/else链更惯用。 (我的回答是假设您使用的是标准4.0 GPA计算量表。如果没有,显然可以根据您的需要进行更改。)

grade_to_points = {
    'A+':   4.0,
    'A':    4.0,
    'A-':   3.7,
    'B+':   3.3,
    'B':    3.0,
    ...
}

def gp(grade):
    points = grade_to_points.get(grade)
    if points is None:
        raise ValueError('{:r} is not a valid grade!'.format(grade))

答案 3 :(得分:0)

你应该使用词典

def function(grade)
  dict = {'A':4, 'B':3, 'C':2, 'D':1, 'F':0}
  if grade[1] == '+':
    return dict[grade[0]]+0.3
  elif grade[1] == '-':
    return dict[grade[0]] - 0.3

然后根据符号

添加或减去0.3

答案 4 :(得分:0)

另一种字典(哈希)方法。

@Service
@Transactional
public class ExampleService {
    private ExampleEntityRepository repository;
    private ApplicationEventPublisher applicationEventPublisher;

    public void exampleMethod() {
        repository.save(new ExampleEntity("entity"));
        applicationEventPublisher.publishEvent(new EventA(this));
    }
}

//==================================================

@Service
@Transactional
public class EventAListener {
    private ExampleEntityRepository repository;
    private ApplicationEventPublisher applicationEventPublisher;

    @TransactionalEventListener(value = EventA.class, phase = TransactionPhase.BEFORE_COMMIT)
    public void handle(EventA event) {
        repository.save(new ExampleEntity("entityA"));
        applicationEventPublisher.publishEvent(new EventB(this));
    }
}

//==================================================

@Service
@Transactional
public class EventBListener {
    private ExampleEntityRepository repository;

    @TransactionalEventListener(value = EventB.class, phase = TransactionPhase.BEFORE_COMMIT)
    public void handle(EventB eventB) {
        repository.save(new ExampleEntity("entityB"));
    }
}

//==================================================

// Alternative EventAListener version
@Service
@Transactional
public class EventAListener {
    private ExampleEntityRepository repository;

    @TransactionalEventListener(value = EventA.class, phase = TransactionPhase.BEFORE_COMMIT)
    public EventB handle(EventA event) {
        repository.save(new ExampleEntity("entityA"));
        return new EventB(this);
    }
}