Python报TypeError: __init__()位置参数数量不符错误排查求助
报错产生原因
你遇到的TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given由接口误用直接导致:
- 代码中调用的
random.Random()是random模块内置随机数生成器类的构造方法,该方法最多仅接收1个可选的随机种子参数;你传入了userNumber1、userNumber2两个参数,加上实例方法隐式传入的self参数,总计传入3个参数,超出方法定义的参数数量上限,直接触发类型错误。 - 你的实际需求是在两个用户输入值构成的区间内生成随机数,对应应该调用的方法是
random.randint(区间起点, 区间终点),而非实例化Random类。
代码存在的其他问题
除了直接触发报错的接口误用,原代码还有多处会导致运行异常的问题:
- 缩进不合法:
userNumber1、userNumber2两行的缩进层级高于后续的if代码块,Python对缩进敏感,不修正的话会优先触发缩进语法错误。 - 类型不匹配:
input()方法默认返回字符串类型,直接用字符串做数值逻辑判断会出现非预期结果,必须先将输入转换为整数类型。 - 区间逻辑缺失:代码没有判断两个用户输入值的大小关系,
randint方法要求传入的第一个参数小于等于第二个参数,如果用户先输入较大值、后输入较小值会触发参数错误。 - 冗余操作:代码中
del num2、del num3的变量删除操作没有实际意义,Python中直接对变量重新赋值即可覆盖原有值,不需要手动删除。 - 重复造轮子:手动写循环判断三个随机数是否重复的逻辑可以直接用内置方法替代,
random.sample(抽样序列, 抽样数量)可以直接一次性抽取指定数量的不重复随机元素,不需要自行实现去重逻辑。
修正后可运行代码
import random def main(): # 获取用户输入并转换为整数 userNumber1 = int(input("Choose a number from 1-20: ")) userNumber2 = int(input("Choose another number from 1-20: ")) if userNumber1 == userNumber2: print("Invalid input") return # 计算区间上下界,兼容用户输入顺序 range_low = min(userNumber1, userNumber2) range_high = max(userNumber1, userNumber2) # 一次性抽取3个不重复的随机整数 result_nums = random.sample(range(range_low, range_high + 1), 3) # 拼接结果输出 print(''.join(str(num) for num in result_nums)) main()
内容的提问来源于stack exchange,提问作者DamienJ
相关产品推荐
相关产品推荐

