【问题标题】:My function does not return anything no matter what I try无论我尝试什么,我的函数都不会返回任何内容
【发布时间】:2021-07-27 16:47:55
【问题描述】:
def iq_test(numbers):
    i = 0
    length = len(numbers)
    numbers = numbers.split()
    ints = []
    even = []
    odd = []
    try:
        for i in range(i, length, i + 1):
            number = int(numbers[i])
            ints.append(number)
            if ints[i] % 2 == 0:
                even.append(ints[i])
            else:
                odd.append(ints[i])



    except:
        pass
    if len(even) > len(odd):
        return i
    else:
       return i

iq_test("1 2 2")

无论我尝试修复这个问题多少次或方法,它似乎都不会返回i。每当我做print(i) 时,它都会给我我想要的东西,并且该功能运行良好,但是当它是return i 时,我什么也得不到,我该如何解决这个问题? 编辑:这个函数应该接受一些数字(以字符串格式),其中一个数字的偶数会不同(一个是偶数,其余的是奇数,反之亦然),我想返回那个数字的索引。

【问题讨论】:

  • 我可以看到缩进错误。请修复它们。此外,您需要打印值print(iq_test("1 2 2"))。现在,它只是返回值。你没有使用它们
  • 虽然我真的不知道你想要达到什么目的,但似乎这条线:length = len(numbers) 应该在这条线之后:numbers = numbers.split()跨度>
  • 改掉使用for i in range(len(list)):的习惯。使用for item in list: 几乎总是更合适
  • 返回和打印是不一样的。请重做有关函数的教程。 x = iq_test(...) 将返回值放入变量 x。然后你可以print(x) 打印它的值
  • 您的代码如何验证没有返回任何内容?我没有看到任何测试..

标签: python function return


【解决方案1】:

我已经修改了你的代码并且它正在工作:

def iq_test(numbers):
     i = 0
     numbers = list(map(int,numbers.split()))
     even = []
     odd = []
     try:
         for i in range(len(numbers)):
            if numbers[i] % 2 == 0:
               even.append(i)
            else:
               odd.append(i)
     except:
         pass
     finally:
         if len(even) > len(odd):
            return odd[0]
         else:
            return even[0]
print(iq_test("1 1 2"))

我修改的点:

  • 您可以使用map function 而不是创建另一个列表来将列表元素转换为整数
  • 您应该存储偶数和奇数的索引,而不是值本身
  • 如果代码中有一些必须做的事情,即使发生错误,您也可以使用finally block

【讨论】:

  • @quamrana 感谢您指出,我忘了删除它,因为现在不需要了
【解决方案2】:
def iq_test(numbers):
        numbers = numbers.split()
        length = len(numbers)
        ints = []
        even = []
        odd = []
        try:
            for i in range(0, length):
                number = int(numbers[i])
                ints.append(number)
                if ints[i] % 2 == 0:
                    even.append(ints[i])
                else:
                    odd.append(ints[i])
            if len(even) > len(odd):
                return even[0]
            else:
                return odd[0]
        except:
            pass
        
    ReturnedNumber = iq_test("1 2 2")
    print("Returned number from function:",ReturnedNumber)

【讨论】:

    猜你喜欢
    • 2016-12-26
    • 2017-11-26
    • 1970-01-01
    • 2017-10-27
    • 2017-01-12
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2012-10-22
    相关资源
    最近更新 更多