如何在函数中返回奇数的位置?代码返回None问题求助
问题分析与解决
先搞懂enumerate()的实际运作
enumerate() 就是给元组、列表这类可迭代对象的每个元素,绑定它的索引位置(默认从0开始计数)。循环时每次会返回一个(索引, 元素值)的元组,所以你能用for i, num in enumerate(tup)这种写法,直接同时拿到元素的位置i和对应的值num。
举个例子,遍历元组(5,7,9):
- 第一次循环:
i=0,num=5 - 第二次循环:
i=1,num=7 - 第三次循环:
i=2,num=9
你的代码为什么返回None?
核心原因很简单:你初始化的seen是空字典,循环里的if num in seen条件从来不会触发——因为你根本没往seen里添加任何元素。循环走完后,函数没有任何显式的return语句,Python就会默认返回None。
另外你的代码还有两个明显问题:
- 函数标注返回类型是
int,但你写的return i%2!=1返回的是布尔值(True/False),类型完全不匹配; - 从函数名
return_position_of_odd来看,你应该是想找奇数的位置,但当前代码逻辑却在判断元素是否重复,完全偏离了目标。
按需求修正代码
假设你的需求是返回元组中第一个奇数的索引,修正后的代码如下:
def return_position_of_odd(tup: tuple) -> int: for i, num in enumerate(tup): # 判断当前元素是否为奇数 if num % 2 == 1: return i # 返回该奇数的索引 # 若元组中无奇数,返回默认值-1 return -1 print(return_position_of_odd((5, 7, 9, 12, 44, 66))) # 输出0 print(return_position_of_odd((50, 7, 9, 12, 44, 66))) # 输出1
如果你的需求是判断第一个奇数是否在从1开始计数的奇数位置(比如第1、3、5位,对应索引0、2、4),代码可以改成这样:
def return_position_of_odd(tup: tuple) -> bool: for i, num in enumerate(tup): if num % 2 == 1: # 索引从0开始,奇数位置对应i%2 == 0 return i % 2 == 0 # 无奇数时返回False return False print(return_position_of_odd((5, 7, 9, 12, 44, 66))) # 5在第1位,返回True print(return_position_of_odd((50, 7, 9, 12, 44, 66))) #7在第2位,返回False
内容的提问来源于stack exchange,提问作者mugen gyutaro
相关产品推荐
相关产品推荐

