Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用5的倍数作为变量更容易地使用模_Python_Python 3.x - Fatal编程技术网

Python 使用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

我对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
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数组需要更多的内存。可能需要更多的内存。但以时间为衡量标准,字符串比较似乎每次都能胜出。