Python中的模数令人困惑.
在Python中,%运算符正在计算余数:
>>> 9 % 5
4
Run Code Online (Sandbox Code Playgroud)
然而:
>>> -9 % 5
1
Run Code Online (Sandbox Code Playgroud)
为什么结果1?不是-4吗?
如果我只是sum_digits在这里阅读我的功能,它在我的头脑中是有意义的,但它似乎产生了错误的结果.有提示吗?
def is_a_digit(s):
''' (str) -> bool
Precondition: len(s) == 1
Return True iff s is a string containing a single digit character (between
'0' and '9' inclusive).
>>> is_a_digit('7')
True
>>> is_a_digit('b')
False
'''
return '0' <= s and s <= '9'
def sum_digits(digit):
b = 0
for a in digit:
if is_a_digit(a) == True:
b = int(a)
b += 1
return b
Run Code Online (Sandbox Code Playgroud)
对于该功能sum_digits,如果我输入sum_digits('hihello153john'),它应该产生9
我写了这个函数,我认为它会起作用,但我不是100%肯定.但我很好奇这很复杂.我能用这种方式更简单吗?
这三个参数是'HH:MM'形式的时间,其中00 <= HH <= 23且00 <= MM <= 59.前两次是时间估计,第三次是实际时间.返回最接近实际时间的前两个参数之一的时间估计值.如果它们同样接近,则第一次返回.
(str, str, str) -> str
def closest_time(guess1, guess2, answer):
if abs((int(answer[:2])) - (int(guess1[:2])) > ((int(answer[:2])) - int(guess2[:2]))):
return guess2
if abs((int(answer[:2])) - (int(guess1[:2])) < ((int(answer[:2])) - int(guess2[:2]))):
return guess1
if abs((int(answer[:2])) - (int(guess1[:2])) == ((int(answer[:2])) - int(guess2[:2]))):
if abs((int(answer[3:])) - (int(guess1[3:])) > ((int(answer[3:])) - int(guess2[3:]))):
return guess2
if abs((int(answer[3:])) - (int(guess1[3:])) < ((int(answer[3:])) - int(guess2[3:]))):
return guess1
if abs((int(answer[3:])) - (int(guess1[3:])) == ((int(answer[3:])) - int(guess2[3:]))):
return guess1
Run Code Online (Sandbox Code Playgroud)