You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在函数中返回奇数的位置?代码返回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。

另外你的代码还有两个明显问题:

  1. 函数标注返回类型是int,但你写的return i%2!=1返回的是布尔值(True/False),类型完全不匹配;
  2. 从函数名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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:57:15