尝试返回用户指定范围内的值

时间:2013-12-22 00:41:17

标签: python

我正在尝试打印用户指定范围内的所有值。但是,当我输入数字时,程序不会打印值。

print "This module will return all numbers in a specified range."

v = range(-100000, 100001)

lo = int(raw_input("Please enter the beginning of the range:"))

hi = int(raw_input("Please enter the end of the range: "))

def filter_range():

    if lo < v[0] and hi > v[-1]:
        print v[lo: hi]

    elif lo < v[0]:
        print "That is out of range."


    if hi > v[-1]:
        print "That is out of range."

    pass

if __name__ == '__main__':
    filter_range()

3 个答案:

答案 0 :(得分:3)

创建范围v时,项目的索引从0开始,而不是-100000。因此,当你

print v[lo: hi]

您实际上并未打印所要求的值。例如,如果我要求0到10,我得到-100000到-99990。为什么不在需要时创建range

print(list(range(lo, hi)))

这可以节省你用200002整数填充的所有内存,而且你不需要测试hilo是否在某个范围内,这导致了你的另一个问题(每个samrap的回答)。

请注意,在早期版本的2.x中,您需要编写print range(lo, hi)

答案 1 :(得分:1)

很确定你想要改变这一行:

if lo < v[0] and hi > v[-1]:
    print v[lo: hi]

对此:

if lo > v[0] and hi < v[-1]:
    print v[lo: hi]

输出:

[-99999, -99998, -99997, -99996, -99995, -99994, -99993...]

答案 2 :(得分:1)

您不希望根据自己的说明使用给定的值作为索引。你也不应该存储这么大的矢量。请参阅下面的修订代码。

print "This module will return all numbers in a specified range."

allowed_lo = -100000
allowed_hi = 100000

lo = int(raw_input("Please enter the beginning of the range:"))
hi = int(raw_input("Please enter the end of the range: "))

def filter_range():
    if lo < allowed_lo or hi > allowed_hi:
        print "That is out of range."
    else:
        return range(lo, hi+1)


if __name__ == '__main__':
    print filter_range()

更有趣的事情就是使用列表理解来做到这一点。

v = range(-100000,100001)

lo = int(raw_input("Please enter the beginning of the range:"))
hi = int(raw_input("Please enter the end of the range: "))

def filter_range():
    if lo < allowed_lo or hi > allowed_hi:
        print "That is out of range."
    else:
        print [x for x in v if lo <= x <= hi]


if __name__ == '__main__':
    print filter_range()