我想创建一个代码来计算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)