使用5的倍数作为变量更容易地使用模

2024-09-29 01:25:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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==)位来尝试包含它们,但现在我想不出一个方法来继续,坦率地说,我觉得我把事情复杂化了。有人对如何让我的代码真正工作有什么建议吗


Tags: and代码编码if专业数字start学生
2条回答

由于数字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

如果我理解正确,我们要做的是:对于范围内的每个数字x,检查它的任何数字digit是否等于5

我们怎么做

我们可以做的一件事是将数字转换为>;字符串,然后检查子字符串“5”是否存在。但这是一个幼稚的解决方案,需要更多的内存和时间将所有数字存储到一个字符串中(而不是表示现有int所需的几个字节)

因此,一个更聪明的方法是连续提取最低有效位(digit = x % 10),检查if digit == 5,然后分割出最低有效位来重复(x //= 10 WHILE x > 0

相关问题 更多 >