对不起,如果这对你来说似乎很愚蠢,但我对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.还有可能摆脱中间的增量器吗?我觉得没办法......
答案 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循环转换为可以调用的函数:
现在使用此函数重写脚本以尝试不同的数字:
将另一个变量添加到您可以传入的函数参数中,这样您就可以更改第8行的+ 1,以便您可以更改增量
noIncrement
(递增计数的数字)到函数参数,将第三个值传递给函数。再次重写脚本以使用此功能查看其效果。
现在,将其写为使用for-loops和range。你还需要中间的增量器吗?如果你没有摆脱它会怎么样?
注意: 我从不使用'我'或者' x'表示循环中的变量,除了可能是单元测试;除非你使用唯一的名字,否则你不能在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