伙计们。我刚刚开始学习编码,我选择了Python,所以我在这里的问题将是相当基本的:)所以,我必须编写一个Python程序来检查给定列表的每个偶数索引是否包含偶数,每个奇数索引是否包含奇数。这就是我的解决方案:
def check_the_list(a):
for i in range(0, len(a)):
if a[i] % 2 == 0 and i % 2 == 0 and a[i + 1] % 2 == 1 and (i + 1) % 2 == 1:
output = True
else:
output = False
return print(output)
check_the_list([2, 1, 4, 3, 6, 7, 6, 3])
check_the_list([2, 1, 4, 3, 6, 7, 6, 4])
PyCharm表示两个列表的输出都是False,尽管正如您所看到的,最后一个元素是不同的。因此,有人能向我解释一下我的代码出了什么问题吗?非常感谢!
这里有两个问题。首先,您需要根据以下伪代码修复条件语句的逻辑:if(数字与其索引为偶数)OR(数字与其指数为奇数)。其次,按照您构建代码的方式,输出变量的值将在True和False之间来回切换,直到到达列表的末尾,然后函数只返回最后一项的条件。因此,如果最后一项恰好是偶数索引中的偶数,即使前面的数字不符合条件,它也会返回True。这不是你想要的。你有一个更严格的标准,你希望每个数字都满足这个条件。这就是你的做法:
def check_the_list(a):
for i in range(0, len(a)):
output = True
if (a[i] % 2 == 0 and i % 2 == 0) or (a[i] % 2 == 1 and (i) % 2 == 1):
continue
else:
output = False
return output
一个更有效的实现是使用not运算符,并在数字不符合标准时立即返回False:
def check_the_list(a):
for i in range(0, len(a)):
if not ((a[i] % 2 == 0 and i % 2 == 0) or (a[i] % 2 == 1 and (i) % 2 == 1)):
return False
return True
print(check_the_list([2, 1, 4, 3, 6, 7, 6, 3])) #True
print(check_the_list([2, 1, 4, 3, 6, 7, 6, 4])) #False
正如您所看到的,当i=7输出为false时。因此,两个列表都返回false。
list one output :
0 True
1 False
2 True
3 False
4 True
5 False
6 True
7 False
list two output :
0 True
1 False
2 True
3 False
4 True
5 False
6 False
7 False