Python 最后一个号码!为什么会这样 为什么它总是打印列表中的最后一个数字?
因为你只是在函数的末尾返回。您希望函数从Python 最后一个号码!为什么会这样 为什么它总是打印列表中的最后一个数字?,python,Python,因为你只是在函数的末尾返回。您希望函数从if语句内部返回,但未使用return命令。这很容易解决: $ python disparity.py 5 4 所以现在我们运行它并获得 def find_outlier(lstOfints): for integer in lstOfints: if integer % 2 ==1: return integer elif integer % 2 == 0: return integer return i
if
语句内部返回,但未使用return
命令。这很容易解决:
$ python disparity.py
5
4
所以现在我们运行它并获得
def find_outlier(lstOfints):
for integer in lstOfints:
if integer % 2 ==1:
return integer
elif integer % 2 == 0:
return integer
return integer
print(find_outlier([1,3,4,5]))
print(find_outlier([0,2,3,4]))
现在它只是返回第一个元素
为什么它现在总是打印列表中的第一个数字?
它打印第一个元素,因为if
语句是互补的。给定任何元素,无论其奇偶性如何,它的模2将是0或1。如果为零,则返回第一个If
;如果是1
,则第二个返回!因为它适用于所有元素,所以它适用于第一个元素,所以函数在第一次迭代时结束
这不是你想要的算法。您要做的是首先知道哪个奇偶校验是异常值,然后查找异常值
如果我不知道哪个数字是异常值,如何发现哪个奇偶校验是异常值?
因为列表至少有三个元素,这是很容易的:我们考虑两个场景。
- 第一种情况是,异常值是前三个元素之一。在这种情况下,我们将有一个异常奇偶校验和两个“正常”奇偶校验。
- 第二种情况是,异常值不是前三个元素之一。在这种情况下,我们将有三个相等的平价,异常值将是相反的李>
- 如果偶数多于奇数(两个偶数和一个奇数,或者三个偶数和不奇数),那么我们知道离群值是奇数
- 如果奇数多于偶数,我们知道离群值是偶数
even_numbers = 0
odd_numbers = 0
然后我对第二和第三个元素做同样的事情:
if listOfints[0] % 2 == 0:
even_numbers = even_numbers + 1
else:
odd_numbers = odd_numbers + 1
如果偶数多于奇数,我们知道离群奇偶性是奇数(也就是说,离群值除以2的剩余部分是1);如果奇数多于偶数,则异常奇偶校验将为偶数(即,其余为零)
所以,现在我知道离群值是偶数还是奇数,我同意。但是我想知道号码是多少!
现在我们知道了异常值的奇偶性,我们只需要寻找它:
if even_numbers > odd_numbers:
outlier_parity = 1
else:
outlier_parity = 0
捆绑在一起,这是我们的新功能:
for integer in lstOfints:
if integer % 2 == outlier_parity:
return integer
它有用吗?让我们测试一下:
def find_outlier(lstOfints):
even_numbers = 0
odd_numbers = 0
if lstOfints[0] % 2 == 0:
even_numbers = even_numbers + 1
else:
odd_numbers = odd_numbers + 1
if lstOfints[1] % 2 == 0:
even_numbers = even_numbers + 1
else:
odd_numbers = odd_numbers + 1
if lstOfints[2] % 2 == 0:
even_numbers = even_numbers + 1
else:
odd_numbers = odd_numbers + 1
if even_numbers > odd_numbers:
outlier_parity = 1
else:
outlier_parity = 0
for integer in lstOfints:
if integer % 2 == outlier_parity:
return integer
print(find_outlier([1,3,4,5]))
print(find_outlier([0,2,3,4]))
哦,成功了!不错,对吧?:)
一些考虑
这里的代码不是最优雅的,但我的目的主要是让您了解发生了什么。它可以用一个更简短、可读性更强的函数来完成,但由于您仍在寻找基本概念,因此我做了一个更详细、更可解释的函数,结果有点麻烦 我的解决方案是:
$ python disparity.py
4
3
def find_异常值(整数):
奇数=[]
偶数=[]
对于整数形式的i:
如果我是%2!=0:
奇数.附加(i)
elif i%2==0:
偶数。附加(i)
如果len(奇数)
我的解决方案是:
$ python disparity.py
4
3
def find_异常值(整数):
奇数=[]
偶数=[]
对于整数形式的i:
如果我是%2!=0:
奇数.附加(i)
elif i%2==0:
偶数。附加(i)
如果len(奇数)
必须使用return
必须在for
之后使用return
-循环-在检查所有值并找到N
后,说明意味着您需要查看序列中的多个项目,以确定哪个特定项目是异常值。您刚刚返回第一个,现在正确吗?我在检查整数是奇数还是偶数后返回。你能解释一下你想做什么吗?你的清单是什么样的?异常值应该作为什么返回?您必须使用return
您必须在之后使用return
for
-循环-在检查所有值并找到N
后,说明暗示您需要查看序列中的多个项目,以确定哪个特定项目是异常值。您刚刚返回第一个,现在正确吗?我在检查整数是奇数还是偶数后返回。你能解释一下你想做什么吗?你的清单是什么样的?异常值应该作为什么返回?问题是,“它的长度至少为3,但可能非常大”。你只检查前三个吗?它检查前两个数字,看它们是偶数还是奇数或混合数。如果它们相同,那么它会检查列表的其余部分是否存在异常值。但是,如果它们不同,那么它会将它们与第三个数字进行比较,以确定哪一个是异常值,因为问题表明整个列表中只有一个异常值。对。名单将是“至少3个”。可能有4,5,6+。你也要为此编写代码,没错。这就是for循环在第一个if和elif语句中的作用。她使用for循环来避免硬编码,因此一切都很好并且自动化。问题是,“它的长度至少为3,但可能非常大”。你只检查前三个吗?它检查前两个数字,看它们是偶数还是奇数或混合数。如果它们相同,那么它会检查列表的其余部分是否存在异常值。但是,如果它们不同,那么它会将它们与第三个数字进行比较,以确定哪一个是异常值,因为问题表明整个列表中只有一个异常值。Righ
if listOfints[1] % 2 == 0:
even_numbers = even_numbers + 1
else:
odd_numbers = odd_numbers + 1
if listOfints[2] % 2 == 0:
even_numbers = even_numbers + 1
else:
odd_numbers = odd_numbers + 1
if even_numbers > odd_numbers:
outlier_parity = 1
else:
outlier_parity = 0
for integer in lstOfints:
if integer % 2 == outlier_parity:
return integer
def find_outlier(lstOfints):
even_numbers = 0
odd_numbers = 0
if lstOfints[0] % 2 == 0:
even_numbers = even_numbers + 1
else:
odd_numbers = odd_numbers + 1
if lstOfints[1] % 2 == 0:
even_numbers = even_numbers + 1
else:
odd_numbers = odd_numbers + 1
if lstOfints[2] % 2 == 0:
even_numbers = even_numbers + 1
else:
odd_numbers = odd_numbers + 1
if even_numbers > odd_numbers:
outlier_parity = 1
else:
outlier_parity = 0
for integer in lstOfints:
if integer % 2 == outlier_parity:
return integer
print(find_outlier([1,3,4,5]))
print(find_outlier([0,2,3,4]))
$ python disparity.py
4
3
def find_outlier(integers):
odd = []
even = []
for i in integers:
if i% 2 != 0:
odd.append(i)
elif i% 2 == 0:
even.append(i)
if len(odd) < len(even):
return odd[0]
else:
return even[0]