我正在尝试打印用户指定范围内的所有值。但是,当我输入数字时,程序不会打印值。
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()
答案 0 :(得分:3)
创建范围v
时,项目的索引从0开始,而不是-100000。因此,当你
print v[lo: hi]
您实际上并未打印所要求的值。例如,如果我要求0到10,我得到-100000到-99990。为什么不在需要时创建range
?
print(list(range(lo, hi)))
这可以节省你用200002整数填充的所有内存,而且你不需要测试hi
和lo
是否在某个范围内,这导致了你的另一个问题(每个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()