2013-07-07 2 views
0

저는 우분투 13.04에서 파이썬 2.7로 작성한 작은 max_min 프로그램이 있습니다. 이 코드는 두 조건에서 깨지는 무한 루프 내부에서 사용자 입력을받습니다. 나는 9보다 큰 숫자를 입력 할 때 프로그램이 잘못된 결과를 반환한다는 것을 알아 차렸다. 내가 원하는 것은 사용자가 숫자를 입력 할 때마다 그 숫자를 이전 숫자와 비교하고 사용자로부터 입력 된 최대 및 최소 숫자를 얻는 것입니다. 예를 들어raw_input의 반복 비교

: 난처한 상황에 빠진

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 

:

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

가 최대가 여기에 10되지 1.해야 내 코드입니다.

답변

2

당신은

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 

당신은 문자열을 반복 다음 코드를 사용하여

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

, raw_input에서 문자열을 얻을. 첫 번째 for 루프에서 루프는 두 개의 값인 10에 대해 실행되고 '1' > '0' 이후로 최대 값은 1이며 다른 루프에서도 마찬가지입니다. 가장 작은 값은 0입니다. done이 경우

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 

아니면 단지 목록에 번호를 유지하고 수 :

>>> '1' > '0' 
True 

당신은 최대 및 최소 번호를 찾을 수있는 방법을 찾고 있다면, 나는 다음을 제안 할 수 있습니다 입력하면 max()min() 목록이 인쇄됩니다.

1

아마도 내가이는 어떻게해야 무엇인지 이해하지 않지만, 당신은 수 반복하고 0

해서는 안이

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

1을 비교보다는 가장 작은 해당된다 하나, 대신 이런 식으로?

if largest is None or inp > largest: 
    largest = inp 
1

코드는 한 번에 한 문자 씩 '10' 문자열을 반복합니다. 여기서 문자 '1'은 ASCII 코드 포인트가 높기 때문에 '0'보다 큽니다. 어느 시점에서든 실제로는 숫자 목록을 작성합니다.

numbers = [] 

while True: 
    # get input 

    numbers.append(num) 

그런 다음 numbers 이상 루프가 최소 및 최대를 계산하는 :

는에 번호를 추가 할 목록을 사용합니다.

보너스 팁 : smallestlargest의 이름을 각각 None 대신 float('inf') 및 으로 설정하십시오.당신이 루프에서 모두 테스트를 할 수

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

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

참고 :이 두 값이 가장 크고 작은 숫자로 보장되어 있기 때문 최소 및 최대 테스트를 단순화합니다.