1

输入:

def part3 (x):  
    for i in range (len(x)):  
        while i <= len(x):  
            print (x[i]) 
            return x[i+1]  


x=[5,2,3]  
x.sort()  
print(x[0],x[1], x[2])  
print(part3(x))  

输出:

2 3 5  
2  
3  

我的问题:为什么我在 3 之后没有得到 5?!?!函数不应该转到 x[2] 吗?!?!

4

3 回答 3

2

该函数在循环的第一次迭代时返回,因为return那里有一个语句。所以当你有

print(part3(x))

首先print(x[i])i = 0因为这是第一次迭代)在您的while-loop 中执行,然后函数 ( x[i+1]) 的返回值由上面的原始打印语句打印。

在您致电x.sort(), xwill be [2, 3, 4], so x[0]is2x[0+1] = x[1]is3之后, 这解释了您的输出。

不太确定你想用这段代码实现什么,所以很难给你建议如何修复它。如果你只是想打印的内容,x那么你让它变得比它必须的更复杂,因为你可以简单地做

for i in x:
    print(i)

请注意,这里不需要return 语句,因此不需要多余的print; IE

print(part3(x))

会变成

part3(x) 

因为您正在函数本身中进行打印。

于 2012-11-14T02:45:49.937 回答
1

你做错了循环。我认为重点是打印x.

你要:

def part3(x):
    for element in x:
        print(element)

现在注意:

  1. 您不需要在 for 循环中使用 while 循环。
  2. 您不想在循环中返回任何内容,因为这将跳出循环并退出函数。
  3. 在python中,您可以直接循环数组而不使用索引变量。
于 2012-11-14T02:46:24.437 回答
0

你可以看到'2'是内部打印的结果,你看到'3'是打印'return x [i + 1]'的结果,你没有看到'5',因为你离开了你的while循环和一个函数.

如果您只需要打印所有值并返回最后一个值,您可以试试这个:

def part3 (x):  
    for val in x:  
       print val 
    return x[-1]

如果您需要知道索引,那么您可以尝试枚举:

def part3 (x):  
    for i, val in enumerate(x):  
       print i, val 
    return x[-1]
于 2012-11-14T02:49:06.793 回答