range()函数不产生预期结果

时间:2017-12-14 23:31:28

标签: python algorithm for-loop range increment

如果这个问题看起来很基本,我很抱歉。我对此非常陌生(这是我的第一个学期用Python),我只是想了解我做错了什么。人们已经打电话给我"懒惰"因为不理解这个概念,但是我没有,我没有其他人要问,我只是想学习。

我有一个程序:

def num4():
    def tp(nums):
        res = []
        for i in  range(len(nums)):
            for j in  range(i+1,len(nums)):
                res.append(nums[i] + nums[j])
        return  res

    nums = [ 1, 5, 7, -2 ]
    print(tp(nums)

我完成了它的工作,标记了它,并期望它产生这个结果:

def tp(nums):
    res = []

    for i in  range(len(nums)): 
    # startvalue = len(nums), stopvalue = 0, inc = 1

        for j in  range(i+1,len(nums)): 
    # startvalue = i + 1, stopvalue = len(nums) - 1, inc = 1

            res.append(nums[i] + nums[j])

    return  res

    nums = [ 1, 5, 7, -2 ]
    print(tp(nums))


for i in range(4):
# range(4) = 1, 2, 3, 4

    i = 1:
    for j in range(i + 1, 4):
    # range(1 + 1, 4) = 2, 3
    res = [nums[1] + nums[2]] = 5 + 7 = 12
    res = [nums[1] + nums[3]] = 5 - 2 = 3

    i = 2:
    for j in range(i + 1, 4):
    # range(2+1, 4) = 3
    res = [nums[2] + nums[3]] = 7 - 2 = 5

    i = 3:
    for j in range(i + 1, 4):
    # range(3+1, 4) = n/a
    res = [nums[3] + n/a] = -2

    i = 4
    for j in range(i + 1, 4):
    # range(4+1, 4) = n/a
    res = [nums[4] + n/a] = 1

预测输出:res = [12,3,5,-2,1]

相反,当我在Python交互式会话中执行此操作时:

from ExamCheck1 import num4
num4()

它产生了这个输出: [6, 8, -1, 12, 3, 5]

我得到12, 3, 5权利,6, 8, -1部分来自何处?我非常迷茫和困惑。

请帮忙。

如果你不想回答,因为你觉得我很懒,请不要回答;我不需要(再次)告诉我,因为我不理解我做错了什么是多么懒惰。

提前致谢。

1 个答案:

答案 0 :(得分:4)

您对范围函数的期望值有点缺陷。有三种方法可以使用范围功能:

  1. range(x):生成值为0~x-1的数组。所以范围(4)= [0,1,2,3]
  2. range(x,y):从x~y-1生成值。所以范围(1,4)= [1,2,3]
  3. range(x,y,z):以z为步长从x~y-1生成值。所以范围(1,10,2)= [1,3,5,7,9]
  4. 使用这些范围值来浏览您的代码,这对您来说很有意义。