2

我正在尝试定义一个接受 2 个参数的函数,将它们相加,如果两个参数的总和以 5 结尾,则报告 2。如果它不以 5 结尾,则返回 8。

有任何想法吗?

我正在考虑做一个 if 语句,但我对如何检查一个数字是否以 5 结尾(或者是 5)感到困惑。

感谢您的帮助,尝试自学编程是如此困难但又如此有益:)

4

6 回答 6

10

解决方案

我的回答假设您正在检查整数(从您的问题来看这似乎很合理):

def sum_ends_with_5(a, b):
    """
    Checks if sum ends with "5" digit.
    """
    result = a + b
    return 2 if result % 10 == 5 else 8

或更灵活(带有任意数量的参数):

def sum_ends_with_5(*args):
    """
    Checks if sum ends with "5" digit.
    """
    result = sum(args)
    return 2 if result % 10 == 5 else 8

它是如何工作的(又名测试)

该函数的行为如下:

>>> sum_ends_with_5(5)
2
>>> sum_ends_with_5(3)
8
>>> sum_ends_with_5(2, 8)
8
>>> sum_ends_with_5(7, 8)
2
>>> sum_ends_with_5(10, 20, 3, 2)
2

较短的版本

所以,如果你想以更短更灵活的方式编写它,你可以这样做:

def sum_ends_with_5(*args):
    return 2 if sum(args) % 10 == 5 else 8
于 2012-09-03T02:17:43.753 回答
4

当且仅当数字可以被 5 整除但不能被 10 整除时,数字以 5 结尾。您可以使用模算术轻松检查这些条件。更一般地,您可以通过将该数字的值与数字进行比较来检查数字是否以数字结尾mod 10

num = 1234
isDivisibleByFive = num % 10 == 5
于 2012-09-03T02:15:59.143 回答
4

将模数乘以 10 并检查它是否为 5。

print num % 10 == 5
于 2012-09-03T02:17:52.603 回答
2

一种简单的方法是获取数字并将其转换为字符串并使用索引检查最后一位数字是否为 5:

例如,

n = 153
str(n)[-1] == '5':
False

n = 155
str(155)[-1] == '5'
True

因此,作为if-statement 的一部分:

if str(n)[-1] == `5`: 
   print "number ends in 5" 
else: 
   print "number did not end in 5" 

如果您只想检查被 5 整除(这与以 5 结尾不同),您可以使用 mod 操作。

但是您也可以修改 10 并检查余数 5 以确定数字 (int) 是否以 5 结尾。我的解决方案检查任何数字的最后一位数字(包括浮点数)

于 2012-09-03T02:14:59.653 回答
1

我最喜欢 Tadeck 的解决方案,但还有另一种方法,我认为对于这个特定的用例不太好,但如果您的返回值需要遵循比简单的模运算更复杂的规则,它仍然可能有用。

def xlatVal (*nums):
    #            0 1 2 3 4 5 6 7 8 9
    lookupTbl = [8,8,8,8,8,2,8,8,8,8]
    return lookupTbl[sum(nums) % 10]

虽然这些值仍然使用模数减少到一个范围,但这允许在该范围内进行任意转换。

于 2012-09-03T02:42:05.990 回答
0

将其转换为字符串并检查最后一个字符:

str(num)[-1] == "5"
于 2012-09-03T02:16:09.897 回答