对于学习Python中的循环而言,这是一个难题

时间:2013-03-28 02:34:59

标签: python loops python-3.x

对不起,如果这对你来说似乎很愚蠢,但我对LPTH的练习有问题33

http://www.learnpythonthehardway.org/book/ex33.html

Zed要求我们:重新编写该练习以使用for-loops和range。你还需要中间的增量器吗?如果你没有摆脱它会怎么样?

我这样做了:

numbers = []


def NumbersLoop(x):
    """
   This function will loop as long as x is less than the limit,
   at the same time it will print the numbers list
   """

    limit = int(input('Limit: '))
    increment = int(input('Increment: '))

    for i in (x, limit):
        print('At the top x is : {}'.format(x))
        numbers.append(x)

        x += increment
        print('Numbers now: ', numbers)
        print('At the bottom x is {}'.format(x))

NumbersLoop(1)

print('The numbers: ')

for num in numbers:
    print(num)

但我不明白为什么它只会循环直到 3.还有可能摆脱中间的增量器吗?我觉得没办法......

6 个答案:

答案 0 :(得分:2)

您的代码存在一些问题,首先是:

for i in (x, limit):

您错过了range来电,而x实际上是起点,它不会被范围调用更改。

下一步:

print('At the top x is : {}'.format(x))
numbers.append(x)

x += increment

x不受range调用或循环的影响。您想要使用的是i,这是该范围当前所在的数字。

此外,range函数采用以下参数:

range(start, stop, increment)

您也不需要增加x,请尝试以下各种参数:

start = 0
stop = 10
inc = 2
for i in range(start, stop, inc):
    print(i)

如果你在python中遇到任何问题,你应该做的第一件事是去Python Documentation你几乎总会找到你想要的答案。

答案 1 :(得分:1)

for i in (x, limit):

这意味着“运行循环两次:一次使用i = x,一次使用i = limit”。

再次查看赋值规范。它说:

  

重新编写该练习以使用for循环和range代替。

range是一个功能。您目前没有在任何地方使用它。你应该在这里使用它。

range从概念上创建了一系列数字。这意味着您可以循环for i in这些数字。有关详细信息,请阅读the documentation for that function

  

是否有可能摆脱中间的增量器?我觉得没办法......

首先使用range来电,然后尝试

答案 2 :(得分:1)

这是一个很好的学习实验;它使学生​​在保持触及范围的同时伸展答案。在额外的学分第5步之后,这就是我最终的结果:

#!/usr/bin/env python
# -*- coding: utf-8 -*-


# FUNCTIONS
def genNos(noMin, noMax, noIncrement):
    """Returns numbers 0 through i in an array"""
    numbers = []
    for myNum in range(noMin, noMax, noIncrement):
        # print "At the top noMin is %d" % noMin
        numbers.append(myNum)
        # print "Numbers now: ", numbers
        # print "At the bottom noMin is %d" % noMin
    return numbers


# MAIN PROGRAM
print "The numbers: "
myVal = genNos(7, 21, 2)
print "%r" % myVal

for num in myVal:
    print num 

额外信用:

将此while循环转换为可以调用的函数:

  1. 功能:genNos
  2. 用变量替换测试中的6(i <6)。
  3. 注意:在函数外部初始化i不再有效;移动&#39; i = 0&#39;发挥作用。
  4. 现在使用此函数重写脚本以尝试不同的数字:

    1. 用变量替换数字
    2. 将范围传递给函数参数。
    3. 注意:只要min小于max且max大于/等于noMin +(2 * noIncrement),就可以正常工作。
    4. 将另一个变量添加到您可以传入的函数参数中,这样您就可以更改第8行的+ 1,以便您可以更改增量

      1. ADD:noIncrement(递增计数的数字)到函数参数,将第三个值传递给函数。
      2. 再次重写脚本以使用此功能查看其效果。

        1. 我这样做是为了测试上面的一切;它起到了这一作用。
        2. 现在,将其写为使用for-loops和range。你还需要中间的增量器吗?如果你没有摆脱它会怎么样?

          1. 好的,用于范围(); range函数将采用我们的所有参数 - 没问题。
          2. 注意: 我从不使用&#39;我&#39;或者&#39; x&#39;表示循环中的变量,除了可能是单元测试;除非你使用唯一的名字,否则你不能在vim中进行搜索/替换; EG ::%s / myNo / MyVal / g;但是对于任何程序的搜索和替换都是如此。

            此外,似乎for-loop编译器的成本比while-loop更高。在导致学生到达的背景下,这是一个很好的实验。但是,我不会在实际程序中使用。长时间循环!

答案 3 :(得分:1)

# get the input from the user for i
i = int(input("i>"))
# create an empty list and fill it later
numbers = []
# get input from user for the variable to use in while
num = int(input("num>"))

# Get the user input for increment number in while loop
incrementer = int(input("incrementer>"))
# Create a function and use while loop

def yourfunction(i):
    while i < num:
        # if user input for "i" is less than the user input for "num"
        print(f"at the top of i is {i}")
        # once i is printed, Add i to the list
        numbers.append(i)
        #once i is added to the list, print the list
        print("numbers now", numbers)
        # Then increment i by 1
        i += incrementer
        #once incremented, print i and repeat
        print(f"At the bottom of i is {i}")
# Call the function
yourfunction(i)
# print the newly created listsa
print(f"the new list is {numbers}")

for num in numbers:
    print(num)

答案 4 :(得分:0)

我意识到这是一个老问题,但我想补充一点,因为我刚刚完成了这个问题。

OP可能一直在考虑(如果他使用范围)是这样的:

numbers = []


def NumbersLoop(x):
    limit = int(input('Limit: '))
    increment = int(input('Increment: '))

    for i in range(x, limit):
        numbers.append(i) #The i would be the newly incremented x on next iteration. != True

        x += increment

此代码无效。

原因是,虽然您可能期望新增加的x+= increment在下一次迭代中更改范围的起点,但会使i按增加的数量跳跃没有

范围函数使用的x基本上是在您第一次调用时设置的,所以即使您将值更改为

x = 50

i所采用的下一个数字将是基于原始x的限制范围的下一步。

也许这会挽救下一个人的某个时间。 您使用range(start, end, increment)

答案 5 :(得分:0)

我已经晚了6年,但还参加了LPTHW练习。这就是我所说的,只是使用for循环和range而不是while循环:

numbers = []

for i in range(0,6):
    print "At the top i is %d" % i
    numbers.append(i)
    print "Numbers now: ", numbers
    print "At the bottom i is ", i + 1

print "The numbers: "

for num in numbers:
    print num