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

统计列表奇偶数量时遇TypeError:count()需0参数却传入1个,求原因

问题解析与修复方案

首先直接拆解这个错误的含义:

TypeError: count() takes 0 positional arguments but 1 was given

这个报错直白点说就是:你定义的count()函数明明声明了不需要任何参数(括号里是空的),但调用它的时候却硬塞了一个list参数进去,Python瞬间懵了——它不知道该怎么处理这个多余的参数,所以抛出了类型错误。

不过就算你把调用改成count(),代码还是会出问题,咱们一步步把所有坑填上:

问题1:函数参数不匹配

你定义count()的时候没写参数,但调用时传了list。解决办法是给函数加一个参数,让它接收要统计的列表:

def count(num_list):  # 添加参数num_list,用来接收传入的列表

问题2:循环遍历的逻辑错误

原代码里for i in list,这里的i是列表里的元素值,不是索引!所以list[i]完全是错的,应该直接用i(或者换个更清晰的变量名比如num)来判断奇偶:

for num in num_list:
    if num % 2 == 0:  # 直接用元素本身判断,不是list[num]

问题3:全局变量的修改问题

原代码里even和odd是函数外的全局变量,在函数内部直接修改会触发UnboundLocalError。更优雅的做法是把这两个变量移到函数内部初始化,避免依赖全局变量,让函数更独立。

额外优化:避免使用内置类型当变量名

你用了list当变量名,但list是Python的内置类型(用来创建列表的函数),这样会覆盖内置功能,容易引发奇怪的问题。建议改成nums之类的名字。


修正后的完整代码

nums = []  # 把变量名从list改成nums
for i in range(5):
    num = int(input("Enter the numbers: "))
    nums.append(num)
print(nums)

def count(num_list):
    even = 0
    odd = 0
    for num in num_list:
        if num % 2 == 0:
            even += 1
        else:
            odd += 1
    return even, odd

even, odd = count(nums)  # 传入修改后的nums变量
print('Even : {} and Odd : {}'.format(even, odd))

现在运行这段代码,就能正常统计列表里的偶数和奇数数量啦~

内容的提问来源于stack exchange,提问作者dj2560

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:06:30