2015-01-07 4 views
0

숫자 입력을 받아 0과 0의 두 시작 값이있는 목록과 비교하고 싶습니다. 숫자가 list[0]보다 큰 경우 list[0]을 number로 바꿉니다. list[1]에도이 작업을 수행하십시오. 음수가 입력되면 루프를 끝내고 새 번호로 목록을 인쇄하십시오. 음수 이전에 2 개 미만의 양수가 입력 된 경우 해당 효과에 대한 설명을 인쇄하십시오.배열의 파이썬 첫 번째 항목이 캡처되지 않음

또한 컴퓨터가 새 목록을 표시하기를 원합니다.

문제는 이것입니다. 입력 한 첫 번째 숫자는 코드에서 무시되고 목록에 캡처되지 않습니다. 그 이유는 확실하지 않습니다. 아래 코드를 실행 한 결과뿐만 아니라 내 코드도 포함 시켰습니다.

def printTwoLargest(): 
    number = eval(input('Please enter a number')) 
    largest = [0,0] 
    while number > -1: 
     if number > largest[0]: 
      largest[1] = largest[0] 
      print (largest) #remove after debug 
      largest[0] = number 
     elif number > largest[1]: 
      print (largest) # remove after debug 
      largest[1] = number 
     number = eval(input('Please enter a number')) 
    if largest[0] == 0 or largest [1] == 0: 
     print('You have not entered enough positive numbers, please enter at least two positive numbers') 
    else: 
     print (largest) 

## print statements are a debug test. Cant figure out why, but it seems largest[0] 
## and largest[1] are not filled until the 3rd postive number input. It should be 
## the second one. 

및 실행 후 쉘의 결과 :

>>> printTwoLargest() 
Please enter a number 5 
[0, 0] 
Please enter a number 4 
[5, 0] 
Please enter a number 6 
[5, 5] 
Please enter a number -1 
[6, 5] 
>>> printTwoLargest() 
Please enter a number 9 
[0, 0] 
Please enter a number 8 
[9, 0] 
Please enter a number -1 
You have not entered enough positive numbers, please enter at least two positive numbers 
>>> printTwoLargest() 
Please enter a number -1 
You have not entered enough positive numbers, please enter at least two positive numbers 
+1

'int (input())'not eval을 사용합니다. 훨씬 더 안전합니다. –

+3

'가장 큰 [1] == number'는 저에게 오타처럼 보입니다. 할당 할 때는'=='보다는 "="를 사용하십시오. – Kevin

+0

감사합니다. @ RyanHaining 나는 그것을 바꿨고 당신에게 감사합니다. 두 가지 모두 수정했습니다. 문제가 아직 남아있는 것 같습니다. >>> printTwoLargest() 이 number4 [6, 0] 나는 당신의 질문에 의해 혼란 조금 해요 숫자 –

답변

1

이 시도 :

def printTwoLargest(): 
    number = int(input('Please enter a number')) 
    largest = [0,0] 
    while number > -1: 
     if number > largest[0]: 
      largest[1] = largest[0] 
      largest[0] = number 
      print (largest) #remove after debug 
     elif number > largest[1]: 
      largest[1] = number 
      print (largest) # remove after debug 
     number = int(input('Please enter a number')) 
    if largest[0] == 0 or largest[1] == 0: 
     print('You have not entered enough positive numbers, please enter at least two positive numbers') 
    else: 
     print (largest) 

출력 :

C:\Users\so>C:\Python27\python.exe ptl.py 
Please enter a number6 
[6, 0] 
Please enter a number4 
[6, 4] 
Please enter a number-1 
[6, 4] 

C:\Users\so> 
+0

모두에게 감사드립니다. 나는 모든 코드를 살펴본 결과 그 결함을 발견했다. 다들 감사 해요 –

0

짧은 버전이 마지막에 나열됩니다. 이를 해결하기 위해

if number > largest[0]: 
    # you're losing largest[1] here 
    # but it may not be smaller than largest[0] (example: [4,9] -> [number, 4]) 
    largest[1] = largest[0] 
    largest[0] = number 
elif number > largest[1]: 
    print (largest) # remove after debug 
    largest[1] = number 

한 가지 방법은 당신이 한 것과 비슷한 코드를 유지 (이 더욱 향상 될 수 있지만, 더 편집 필요) :

이 부분은 실제 두 개의 가장 큰 번호를 가진 망쳐 놨어요 - carry과 같은 동작 을 사용하고 있습니다. "OK, 이보다 더 큰 것이 있지만 오른쪽보다 크지 않습니까?". 삽입 과정이 끝날 때까지 정렬을 생략합니다.

그래서 우리는이를 얻을 :

if number > largest[0]: 
     carry = largest[0] 
     largest[0] = number 
     # compare carried number to next number, remove if needed 
     if carry > largest[1]: 
      largest[1] = carry 
    elif number > largest[1]: 
     largest[1] = number 
    number = eval(input('Please enter a number')) 

    # sort the numbers 
    largest = sorted(largest) 

    if largest[0] == 0 or largest [1] == 0: 
     print('You have not entered enough positive numbers, please enter at least two positive numbers') 
    else: 
     print (largest) 

그리고 전체 코드 : 당신이 짧은 버전이 필요한 경우

def printTwoLargest(): 
    number = int(input('Please enter a number')) 
    largest = [0,0] 

    while number > -1: 

     if number > largest[0]: 
      carry = largest[0] 
      largest[0] = number 
      # compare carried number to next number, remove if needed 
      if carry > largest[1]: 
       largest[1] = carry 
     elif number > largest[1]: 
      largest[1] = number 
     print(largest) 
     number = eval(input('Please enter a number')) 

    # sort the numbers 
    largest = sorted(largest) 

    if largest[0] == 0 or largest [1] == 0: 
     print('You have not entered enough positive numbers, please enter at least two positive numbers') 
    else: 
     print (largest) 

가 :

def printTwoLargest(): 
    largest = [0,0] 
    while True: 
     number = eval(input('Please enter a number')) 
     if number < 0: 
      break 
     largest = sorted(largest + [number])[-2:] 

    if 0 in largest: 
     print('You have not entered enough positive numbers, please enter at least two positive numbers') 
    else: 
     print (largest) 
1

를 나는 내가 안다고 생각을 코드를 원하는대로 조정하고 다음 :

def printTwoLargest(): 
    largest = [0,0] 
    print largest 
    number = int(input('Please enter a number\n')) 
    while number > -1: 
     if number > largest[1]: 
      largest[0] = largest[1] 
      largest[1] = number 
     elif number > largest[0]: 
      largest[0] = number 
     print largest 
     number = int(input('Please enter a number')) 
    if largest[0] == 0 or largest [1] == 0: 
     print('You have not entered enough positive numbers, please enter at least two positive numbers') 
    else: 
     print (largest) 

이 코드는 새로운 번호를 사용하고 가장 높은 번호 (오른쪽 또는 색인 1)와 비교합니다. 그 값보다 크지 않으면 더 낮은 값 (인덱스 0)을 검사합니다. 이것은 한 번에 하나씩 만 업데이트됩니다. 이것은 어떤 입력을 어떻게 보느냐입니다.

In [3]: printTwoLargest() 
[0, 0] 
Please enter a number 
1 
[0, 1] 
Please enter a number5 
[1, 5] 
Please enter a number6 
[5, 6] 
Please enter a number-1 
[5, 6] 
관련 문제