我有一个脚本,可以将我的参数编号与其他两个数字进行比较。如果它在它们之间,它应该返回 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))
我不断收到“元组整数错误”。请帮忙!
答案 0 :(得分:3)
按照您尝试使用的方式使用时,range()
function 需要两个参数:start
和 stop
,而不是带有两个值。有很多方法可以给它两个值:
def range_check(obj1, obj2):
range_start, range_stop = obj2
return obj1 in range(range_start, range_stop)
def range_check(obj1, obj2):
return obj1 in range(obj2[0], obj2[1])
range()
将元组传递给 *
时:def range_check(obj1, obj2):
return obj1 in range(*obj2)
另请注意:
if a == b:
return True
else
return False
等同于
return a == b
因为 a == b
已经是 True
或 False
。
答案 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 语句。此外,最佳实践是使用不是外部作用域中的变量的参数。这样,您就不会出现任何奇怪的行为,碰撞会意外地相互遮蔽。