我对Python比较陌生,一般来说是编码(第一学期,计算机科学导论,我不是计算机科学专业的学生),一个家庭作业让我试图找出两个数字中有多少个包含“5”(比如105到168之间有16个数字包含5)。我开始编写代码的时候是:
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
我遇到的问题是,我不能用这个来检查50年代,150年代的数字,等等。。。我试着使用ctr%5==0和(ctr%10==)位来尝试包含它们,但现在我想不出一个方法来继续,坦率地说,我觉得我把事情复杂化了。有人对如何让我的代码真正工作有什么建议吗
由于数字
5
可以是数字中的任意一个,因此最容易将两个数字之间的每个整数转换为字符串,这样就可以使用in
运算符检查5
是否是子字符串:或者,如果你喜欢用数学来做,你可以在检查余数是否为5的同时,将给定的数字除以10,直到商变成0:
以便:
返回:
16
如果我理解正确,我们要做的是:对于范围内的每个数字
x
,检查它的任何数字digit
是否等于5我们怎么做
我们可以做的一件事是将数字转换为>;字符串,然后检查子字符串“5”是否存在。但这是一个幼稚的解决方案,需要更多的内存和时间将所有数字存储到一个字符串中(而不是表示现有int所需的几个字节)
因此,一个更聪明的方法是连续提取最低有效位(
digit = x % 10
),检查if digit == 5
,然后分割出最低有效位来重复(x //= 10 WHILE x > 0
)相关问题 更多 >
编程相关推荐