计算范围内 6 和 8 的数量



我想创建一个代码来计算6和8在一个范围内出现的次数,但我不想计算任何同时包含6和8的数字。到目前为止,我有这样的东西:

def countnums(a) :
count = 0 
for x in range(a):
if 6 and 8 in a:
count -= 1
elif 6 in a:
count += 1
elif 8 in a:
count += 1
return count
countnums(88)

然而,我不确定我在哪里出了问题(对不起,我对Python还很陌生(。任何帮助,以及任何教程推荐,我们都将不胜感激!

有几个问题:

  • 您的需求指定了6和7,但您的代码看起来是6和8

  • 您正在使用x来通过范围,但您的所有条件都在查看a

  • in运算符在整数中找不到数字,因此if 6 in a将不起作用。您需要将其处理为字符串(并使用x(:if '6' in str(x)

  • 6 and 8 in a这样的条件组合起来并不能像你期望的那样工作。你必须将其分解为两个与and结合的比较:例如if '6' in str(x) and '8' in str(x)

  • 因为在组合检查之后使用elif进行单个in检查,所以不需要从计数中减去1(计数不会受到其他条件的影响(。

  • 您只需要在循环结束后返回计数(您的缩进使其提前结束

这是一个修订版:

def countnums(a) :
count = 0 
for x in range(a):
has6 = '6' in str(x)
has8 = '8' in str(x)
count += has6 ^ has8  # Exclusive OR (True counts as 1, False as 0)
return count

顺便说一句,你确实意识到countnums(88(将处理从0到87的数字,对吗

这里有很多错误。

首先,您要做的是检查0和a之间的每个数字x,该数字是否包含6或8作为数字。因此,在每个循环周期中应该测试的数字是x,而不是a。此外,return语句不应该在循环内,否则函数只在一个循环周期后返回。这给了我们

def countnums(a) :
count = 0 
for x in range(a):
if 6 and 8 in x:
count -= 1
elif 6 in x:
count += 1
elif 8 in x:
count += 1
return count
countnums(88)

其次,您使用了条件表达式(x中的6("在";是一个可以接受不同类型操作数的运算符。例如,([5,6,7]中的a(仅当a等于列表的一个元素时才返回true,而("hello,world"中的"hello"(仅当左操作数是右操作数的子串时才返回true。现在你用(x中的8(来表示";数字8以数字x〃的十进制形式出现;。不幸的是,中的运算符不是为整数操作数定义的,因此(x中的8(是不正确的。要纠正这一点,你可以用字符串来表示,str(x(给你x的十进制字符串表示,所以你可以在str(x(中做("8"(。这给了我们:

def countnums(a) :
count = 0 
for x in range(a):
if '6' and '8' in str(x):
count -= 1
elif '6' in str(x):
count += 1
elif '8' in str(x):
count += 1
return count
countnums(88)

第三,你写了(str(x(中的'6'和'8'(。不幸的是,python理解为str(x(中的('6'(和('8'(,并且知道'6'被求值为true(非空字符串总是true(,python从您的表达式中理解的只是str(x(中的'8'表达想要表达的内容的正确方式是书写(str(x(中的'6'和str(x(中的8'(纠正这一点,我们得到:

def countnums(a) :
count = 0 
for x in range(a):
if '6' in str(x) and '8' in str(x):
count -= 1
elif '6' in str(x):
count += 1
elif '8' in str(x):
count += 1
return count
countnums(88)

最后,当您使用elif语句时,只有在前一个语句被评估为false时,才会对它们进行评估。因此,在您的情况下,例如,对于x为268,第一个if语句被评估为true,计数会递减,但由于我们执行了第一个if块,后两个块甚至不会被评估,因此计数不会增加两次。要纠正这一点,您必须使用三个独立的if语句:

def countnums(a) :
count = 0 
for x in range(a):
if '6' in str(x) and '8' in str(x):
count -= 1
if '6' in str(x):
count += 1
if '8' in str(x):
count += 1
return count
countnums(88)

在这一点上,程序工作。但我们可以做一个额外的简化:python中的布尔值可以作为数字进行操作。例如,False等于零,True+True等于2,True+False等于1。所以我们能做的是:

def countnums(a) :
count = 0 
for x in range(a):
if ('6' in x) + ('8' in x) == 1:
count += 1 
return count
countnums(88)

最新更新