0

Ubuntu 13.04 の python 2.7 で書いている小さな max_min プログラムがあります。このコードは、2 つの条件で中断する無限ループ内でユーザー入力を受け取ります。9 より大きい数値を入力すると、プログラムが間違った結果を返すことに気付きました。私がやりたいことは、ユーザーが数字を入力するたびに、その数字を以前の数字と比較し、ユーザーから入力された最大数と最小数を取得することです。

例えば:

Please enter a number:
10
Max: 1, Min: 0, Count: 1

Max が 1 ではなく 10 であるべき場合。ここに私のコードがあります:

count = 0
largest = None
smallest = None

while True:
    inp = raw_input('Please enter a number: ')
    # Kills the program
    if inp == 'done' : break
    if len(inp) < 1 : break

    # Gets the work done
    try:
        num = float(inp)
    except:
        print 'Invalid input, please enter a number'
        continue
    # The numbers for count, largest and smallest
    count = count + 1
    # Gets largest number
    for i in inp:
        if largest is None or i > largest:
            largest = i
    print 'Largest',largest
    # Gets smallest number
    for i in inp:
        if smallest is None or i < smallest:
            smallest = i
    print 'Smallest', smallest

print 'Count:', count, 'Largest:', largest, 'Smallest:', smallest

困惑した。

4

3 に答える 3

2

から文字列を取得しますraw_input

>>> x = raw_input("Enter number: ")
Enter number: 10
>>> type(x)
<type 'str'>

次のコードを使用する

for i in inp:
    if largest is None or i > largest:
        largest = i
print 'Largest',largest
# Gets smallest number
for i in inp:
    if smallest is None or i < smallest:
        smallest = i
print 'Smallest', smallest

文字列を反復処理します。最初のforループでは、ループは 2 つの値に対して実行され、10以降'1' > '0'、最大の値が取得1され、他のループでも同様に最小の値が取得され0ます。

>>> '1' > '0'
True

最大数と最小数を見つける方法を探している場合は、次のことをお勧めします。

count = 0
largest = None
smallest = None

while True:
    inp = raw_input('Please enter a number: ')
    # Kills the program
    if inp == 'done' : break
    if len(inp) < 1 : break

    # Gets the work done
    try:
        num = float(inp)
    except:
        print 'Invalid input, please enter a number'
        continue
    # The numbers for count, largest and smallest
    count = count + 1
    # Gets largest number
    if largest is None or num > largest:  # Change 1
        largest = num
    print 'Largest',largest
    # Gets smallest number
    if smallest is None or num < smallest:  # Change 2
       smallest = num
    print 'Smallest', smallest

print 'Count:', count, 'Largest:', largest, 'Smallest:', smallest

または、数字をリストに保持し、doneが入力されたときにリストのmax()andを出力することもできmin()ます。

于 2013-07-07T19:08:29.957 に答える
1

おそらく、これが何をすべきか理解できませんが、数値を反復処理して、1 と 0 を比較しています。

これはいけません

for i in inp:
    if largest is None or i > largest:
        largest = i

対応する最小のものは、代わりにこのようなものになりますか?

if largest is None or inp > largest:
    largest = inp
于 2013-07-07T19:08:24.910 に答える
1

コードは string'10'を一度に 1 文字ずつループします。ここでは、ASCIIコードポイントが高いため、文字'1'はより大きくなっています。'0'実際に数値のリストを作成することは決してありません。

リストを使用して番号を追加します:

numbers = []

while True:
    # get input

    numbers.append(num)

次に、ループしnumbersて最小値と最大値を計算します。

おまけのヒント:smallestlargestの名前をの代わりにfloat('inf')と にそれぞれ設定します。これにより、最小値と最大値のテストが簡素化されます。これは、これら 2 つの値が最大値と最小値であることが保証されているためです。float('-inf')None

smallest = float('inf')
largest = float('-inf')

for i in numbers:
    if i > largest:
        largest = i
    if i < smallest:
        smallest = i

1 つのループで両方のテストを実行できることに注意してください。

于 2013-07-07T19:08:45.527 に答える