根据总计打印请求的条目数(反向排序)

时间:2015-08-13 16:21:17

标签: python loops

我正在尝试编写一个函数,它将以相反的顺序(从零开始)打印给定总数的请求记录数。如果传入0作为请求记录的数量,则使用总数。

示例:

  1. total=3     numRequested=3

    rec00000002
    rec00000001
    rec00000000
    
  2. total=2 numRequested=1

    rec00000001
    
  3. 虽然它适用于某些情况,但当numRequested小于total且接近0时,我遇到了问题。而不是上述结果,我得到以下结果:

    total=2 numRequested=1

    rec00000000
    

    这是我的尝试:

    def printExpBuf(total, numRequested):
    
        # check if we want all entries
        if numRequested == 0:
            numRequested = total
    
        # skip over entries we don't need
        while (total > numRequested):
            total-=1
    
        # print results
        while (total > 0):
            print "rec%08d" % (total - 1)
            total-=1
    

    我发现问题存在于我将total递减1,但我对如何解决它感到茫然。有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:1)

根据评论 -

  

我总是希望从最高纪录开始。

这不是你的代码正在做的事情,你首先减少总数,直到它等于所请求记录的数量。然后打印出记录。

您实际想要做的是循环和打印记录,直到请求的记录数变为0,然后从函数返回。

示例 -

def printExpBuf(total, numRequested):

    # check if we want all entries
    if numRequested == 0:
        numRequested = total

    # print results
    while (numRequested > 0 and total > 0):
        print "rec%08d" % (total - 1)
        numRequested -= 1
        total -= 1

答案 1 :(得分:0)

你非常接近,这很有效。

def print_exp_buf(total, num_requested):

    # check if we want all entries
    if num_requested == 0:
        num_requested = total

    # skip over entries we don't need
    while (total > num_requested):
        total -= 1

    # print results
    while (total >= 0):
        print "rec%08d" % (total)
        total -= 1

你遇到的问题是:

  1. 不会减少while循环中的总数,因此循环永远不会结束。
  2. 打印total - 1,以便永远不会打印第一条记录。

答案 2 :(得分:0)

看起来你正在尝试做的只是打印所请求记录号的反向顺序列表。与减少变量的所有这些东西相比,这是一个更简单的任务;对于这种情况,python有一个超简单的循环语法:

def printExpBuf(total, numRequested):
  if (numRequested == 0) or (numRequested > total):
    numRequested = total
  for count in range(numRequested, 0, -1):
    print "rec%08d" % (count)

然后:

printExpBuf(3, 3)
printExpBuf(2, 1)

rec00000003
rec00000002
rec00000001
rec00000001