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]上記の元のprintステートメントによって出力されます。

を呼び出した後、はx.sort()xになり[2, 3, 4]、は、になります。これx[0]2、出力を説明します。x[0+1] = x[1]3

このコードで何を達成したいのかよくわからないので、修正方法について提案するのは難しいです。内容を印刷したいだけの場合は、簡単にできるように、必要以上に複雑になりますx

for i in x:
    print(i)

ここではreturnステートメントは必要ないので、余分なものは必要ないことに注意してくださいprint。すなわち

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」が表示され、印刷「return x[i+1]」の結果として「3」が表示され、while ループと関数を残した bcoz が表示されない「5」が表示されます。 .

すべての値を出力して最後の値を返すことだけが必要な場合は、これを試すことができます。

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 に答える