“元组”对象不能解释为整数错误

时间:2021-06-16 18:21:49

标签: python

我有一个脚本,可以将我的参数编号与其他两个数字进行比较。如果它在它们之间,它应该返回 true,如果不是 false

#!/usr/bin/python3

import sys

obj1 = int(sys.argv[1])
obj2 = (1900, 2100)
def range_check(obj1, obj2):
        if obj1 in range(obj2):
                return True
        else:
                return False

print(range_check(obj1, obj2))

我不断收到“元组整数错误”。请帮忙!

2 个答案:

答案 0 :(得分:3)

按照您尝试使用的方式使用时,range() function 需要两个参数startstop,而不是带有两个值。有很多方法可以给它两个值:

  1. Unpack 通过赋值将元组转化为两个变量并传递这些变量:
def range_check(obj1, obj2):
    range_start, range_stop = obj2
    return obj1 in range(range_start, range_stop)
  1. 对元组进行索引:
def range_check(obj1, obj2):
    return obj1 in range(obj2[0], obj2[1])
  1. Unpack 使用 range() 将元组传递给 * 时:
def range_check(obj1, obj2):
    return obj1 in range(*obj2)

另请注意:

if a == b: 
    return True
else
    return False

等同于

return a == b

因为 a == b 已经是 TrueFalse

答案 1 :(得分:1)

您遇到的问题是元组需要解包。您可以像这样使用 * 运算符执行此操作:

import sys

obj1 = int(sys.argv[1])
obj2 = (1900, 2100)

def range_check(integer_value, valid_range):
    return integer_value in range(*valid_range)

print(range_check(obj1, obj2))

如另一个答案所述,您可以省略断开的 if 语句。此外,最佳实践是使用不是外部作用域中的变量的参数。这样,您就不会出现任何奇怪的行为,碰撞会意外地相互遮蔽。