Python 使用5的倍数作为变量更容易地使用模
我对Python比较陌生,通常都是编码(第一学期,计算机科学导论,我不是计算机科学专业的学生),一项家庭作业让我试图找出两个数字之间有多少个数字包含“5”(比如105到168之间有16个数字包含5)。我从以下几点开始编写代码:Python 使用5的倍数作为变量更容易地使用模,python,python-3.x,Python,Python 3.x,我对Python比较陌生,通常都是编码(第一学期,计算机科学导论,我不是计算机科学专业的学生),一项家庭作业让我试图找出两个数字之间有多少个数字包含“5”(比如105到168之间有16个数字包含5)。我从以下几点开始编写代码: def give_me_five(start, end): ctr = start max = end numberoffives = 0 while ctr <= end: print (ctr) i
def give_me_five(start, end):
ctr = start
max = end
numberoffives = 0
while ctr <= end:
print (ctr)
if ctr % 5 == 0 and (ctr % 10 != 0):
elif ctr % 5 == 0 and (ctr % 10 == (somethingsomethingmultiplesof5)
numberoffives += 1
if ctr // 10 == 5:
numberoffives += 1
ctr += 1
return numberoffives
def给我五个(开始,结束):
ctr=开始
最大值=结束
numberoffives=0
当ctr如果我理解正确,我们要做的是:对于范围内的每个数字x
,检查其任何数字digit
是否等于5
我们如何做到这一点
我们可以做的一件事是强制转换digit=>字符串,然后检查子字符串“5”是否存在。但这是一个幼稚的解决方案,需要更多的内存和时间将所有数字存储到字符串中(而不是表示现有int所需的几个字节)
因此,一种更聪明的方法是连续提取最低有效位(digit=x%10
),如果digit==5,则检查,然后将最低有效位分开重复(x/=10,而x>0
).由于数字5
可以位于一个数字中的任意位置,因此最容易将两个数字之间的每个整数转换为字符串,以便您可以使用in
运算符检查5
是否为子字符串:
def give_me_five(start, end):
return sum('5' in str(i) for i in range(start, end + 1))
或者,如果您更喜欢用数学来计算,您可以在检查余数是否为5的同时将给定数字除以10,直到商变为0:
def give_me_five(start, end):
count = 0
for i in range(start, end + 1):
while i > 0:
if i % 10 == 5:
count += 1
break
i //= 10
return count
以便:
give_me_five(105, 168)
返回:16
我认为您关于两种方法之间性能差异的陈述可能不正确。字符串检查方法在我的计算机上更快,在我的计算机上,我想这对于小整数可能是正确的。但是,表示一个char数组肯定比表示int数组需要更多的内存。可能需要更多的内存。但以时间为衡量标准,字符串比较似乎每次都能胜出。