我怎样才在最后获得“数字”?

时间:2016-02-15 20:26:21

标签: python-2.7

这是我想要的:

$ python ex33.py
At the top i is 0
Numbers now: [0]
At the bottom i is 1
At the top i is 1
Numbers now: [0, 1]
At the bottom i is 2
At the top i is 2
Numbers now: [0, 1, 2]
At the bottom i is 3
At the top i is 3
Numbers now: [0, 1, 2, 3]
At the bottom i is 4
At the top i is 4
Numbers now: [0, 1, 2, 3, 4]
At the bottom i is 5
At the top i is 5
Numbers now: [0, 1, 2, 3, 4, 5]
At the bottom i is 6
The numbers:
0
1
2
3
4
5

这是一个循环:

1 i = 0
2 numbers = []
3
4 while i < 6:
5 print "At the top i is %d" % i
6 numbers.append(i)
7
8 i = i + 1
9 print "Numbers now: ", numbers
10 print "At the bottom i is %d" % i
11
12
13 print "The numbers: "
14
15 for num in numbers:
16 print num

现在Shaw先生要我把它变成一个功能。他的确切问题是:将此while循环转换为可以调用的函数,并在变量中用测试(i&lt; 6)替换6。我不确定我是否已经构建了一个函数(因为那些函数主要以def开头?或者它们总是以def开头?)

我不确定我是否完全理解他的要求,但这就是我所做的:

i = 0
numbers = []


for i in range (0, 6):

    print "At the top i is %d" % i
    numbers.append(i)

    i = i + 1
    print "Numbers now: ", numbers
    print "At the bottom i is %d" % i

    print "The numbers: " 
    for num in numbers:
        print num

At the top i is 0
Numbers now:  [0]
At the bottom i is 1
The numbers: 
0
At the top i is 1
Numbers now:  [0, 1]
At the bottom i is 2
The numbers: 
0
1
At the top i is 2
Numbers now:  [0, 1, 2]
At the bottom i is 3
The numbers: 
0
1
2
At the top i is 3
Numbers now:  [0, 1, 2, 3]
At the bottom i is 4
The numbers: 
0
1
2
3
At the top i is 4
Numbers now:  [0, 1, 2, 3, 4]
At the bottom i is 5
The numbers: 
0
1
2
3
4
At the top i is 5
Numbers now:  [0, 1, 2, 3, 4, 5]
At the bottom i is 6
The numbers: 
0
1
2
3
4
5

我被困的地方是“数字”是我最后需要得到的东西。而那,我无法理解。我缺少什么(除了惊人的编码技巧和运作良好的大脑)?

2 个答案:

答案 0 :(得分:1)

你还没有成功。虽然使用def创建函数不是总是,但这是通常的方法。而且我认为你误解了老师希望你在while循环中改变的内容。他希望您使用变量(函数的参数)替换条件6中的i < 6。您已将while替换为for,但仍将6保留为常量。使用for循环代替while循环通常是一个好主意,但在这种情况下,它现在正在被要求。

至于为什么你的numbers输出被重复,我怀疑是因为代码现在在你的主循环中,而不是之前。但这并不完全清楚,因为当您将原始代码复制到Stack Overflow时,您似乎已经丢失了原始代码的缩进。由于缩进在Python中很重要,因此很难确切地知道旧代码的运行。

答案 1 :(得分:1)

你缺少的是python代码块是由缩进级别定义的,你将打印整个列表的部分放在填充列表的for内,这样每次你输入一个数字如果之后,列表也会打印。把它放在外面可以减少那部分的缩进程度,就像这样

i = 0
numbers = []

for i in range (0, 6):

    print "At the top i is %d" % i
    numbers.append(i)

    i = i + 1
    print "Numbers now: ", numbers
    print "At the bottom i is %d" % i

#this part is now outside the for-loop
print "The numbers: " 
for num in numbers:
    print num

关于您的其他问题,肯定的功能是由关键世界def定义的,您可以查看documentation有关详细信息,但在您的情况下,您可以将代码转换为非常简单的函数,就像这样

def my_function():
    i = 0
    numbers = []

    for i in range (0, 6):

        print "At the top i is %d" % i
        numbers.append(i)

        i = i + 1
        print "Numbers now: ", numbers
        print "At the bottom i is %d" % i

    print "The numbers: " 
    for num in numbers:
        print num

也就是说,声明你正在创建一个带有def密钥世界的新函数,给它一个名字,在这种情况下我调用了my_function,并将你之前的代码放在其中它是一个额外的缩进级别,如上所示。

函数具有以下属性:它们可以采用多个参数并根据这些参数进行操作,这样可以定义一些行为并使其更通用。

例如:假设您要打印0到9的数字

for num in range(0,10):
    print num

现在说要打印数字0-5,0-20和10-20,你可以为所有这些编写类似的代码:

for num in range(0,6):
    print num

for num in range(0,21):
    print num

for num in range(10,21):
    print num

但等待有模式这里所有都有相同的确切代码在每种情况下保存范围的参数,这里是一个函数来玩,我们可以定义一个函数,作为参数2个数字和我们的函数做印刷工作之间的所有数字;就像这样

def my_function(star,stop):
    for num in range(star,stop+1): # the +1 is to include the stop number
        print num

(这是以下示例中的fun_test.py)

然后我们可以像这样调用我们的函数

my_function(0,5)
my_function(0,20)
my_function(10,20)

或者如果我们在python解释器中打开文件或以交互模式(即$ python -i ex33.py)打开文件,我们可以使用任意数量的数字来调用

$ python -i fun_test.py
>>> my_function(8,17)
8
9
10
11
12
13
14
15
16
17
>>> my_function(0,5)
0
1
2
3
4
5
>>> 

正如您所看到的那样,让我们​​可以根据需要多次重复使用一段代码。函数的参数是变量的一部分,而它的代码是我们根据变量部分(如果有的话)所需的行为。

通过这个小小的解释,我认为你可以根据老师(?)问你的要求修改你的功能