1

数値を入力しようとしていますが、関数が最小の数値を返すようにしたいと考えています。

ただし、私のコードは早期に実行を停止するようです: 入力内の 1 つの数値が他の数値よりも小さくなるとすぐに。

a = input("")
smallest = 0
a = a.split(" ")
numbers = a

def smallestindex(numbers):
    for i in range(len(numbers)):
        b = int(numbers[i])
        smallest = int(numbers[0])
        print(b)
        if b < smallest:
            smallest = b
            return smallest

print (smallestindex(numbers))
4

3 に答える 3

4

これはインデントの問題です。現在、returnステートメントはif b < smallestブロックが実行されるたびに発生します。それはおそらくあなたが意図したものではありません。ステートメントと同じレベルになるように、インデントを解除してfor、ループが途中ではなく終了した後に実行されるようにする必要があります。

smallestまた、ループの各サイクルで発生させるのではなく、初期化する行を関数の先頭に移動する必要があります。これがどのように見えるかです:

def smallestindex(numbers):
    smallest = int(numbers[0])    # moved this line up
    for i in range(len(numbers)):
        b = int(numbers[i])
        print(b)
        if b < smallest:
            smallest = b
    return smallest   # unindented this line

また、ループの実行方法が少し異なる可能性があることにも注意してください。(を使用して)リストのインデックスをループするのではなく、を使用range(len(numbers))してリストアイテムを直接ループすることができますfor b in numbers

于 2012-11-12T23:37:41.640 に答える
1

インデントエラーが発生しました。ループsmallest内に戻っているため、条件が満たさforれたループの最初の反復で実行が停止します。ifループが完了した後、結果を返す必要があります。smallestまた、ループを通過するたびにリセットするため、ifブロックは意図したとおりに動作しません。修正されたバージョンは次のとおりです。

def smallestindex(numbers):
    smallest = int(numbers[0])
    for i in range(len(numbers)):
        b = int(numbers[i])
        print(b)
        if b < smallest:
            smallest = b
    return smallest
于 2012-11-12T23:39:00.733 に答える
0

関数の名前が示すように、最小数のインデックスを返したい場合は、コードを次のように変更する必要があります。

def smallestindex(numbers):
    numbers = [int(x) for x in numbers] # convert numbers to list of ints
    smallest_idx = 0
    smallest = numbers[0]
    for i, b  in enumerate(numbers):
        if b < smallest:
            smallest_idx = i
            smallest = b
    return smallest_idx
于 2012-11-13T00:40:19.593 に答える