如何在python中使用while循环查找输入的第二低值?

2024-04-27 01:13:35 发布

您现在位置:Python中文网/ 问答频道 /正文

students=int(input('输入学生人数:') 计数器=1

while(counter<;=学生):

name = input('Please enter student ' + str(counter) + ' name:')
score = int(input('Please enter student ' + str(counter) + ' score:'))

lowest = 100
secondlowest = 100

if (score < lowest):
    secondlowest = lowest
    lowest = score

elif score > lowest and score < secondlowest:
    secondlowest = score

counter = counter + 1

print("2nd lowest student is " + name + " with score " + str(secondlowest))

Tags: nameinputcounter计数器student学生intscore
2条回答
while True: # Use a "while|true|break to ensure input is correct
    try: 
        students = int(input('Enter number of students: ')) # I fnot an int, raise error
        break # Stops while loop
    except: # Catch not an int error
        print("Input 'students ' must be an integer") # Print explanation, go to next while

counter = 0
lowest_score  = None # None versus high number to avoid limits
lowest_name   = None
second_lowest_score = None
second_lowest_name  = None

testlist = [] # Just for checking alidity of order. Delete before submission

while (counter < students):
    while True: # Get new input
        try: 
            score = int(input('Please enter student {} score:'.format(counter)))
            break
        except: 
            print("Score must be an integer...")

    name = input('Please enter student  name:'.format(counter))

    testlist.append(score) # Just for checking, Delete       

    # Handle first loop
    if lowest_score is None: 
        lowest_score = score
        lowest_name = name
        continue

    # Handle first loop
    if second_lowest_score is None:
        if score > lowest_score:
            second_lowest_score = score
            second_lowest_name = name
        else:
            second_lowest_score = lowest_score
            second_lowest_name = lowest_name
            lowest_score = score
            lowest_name = name
        continue # next iteration of main while

    if (score < second_lowest_score) :
        if (score >= lowest_score) :
            second_lowest_score = score
            second_lowest_name = name
        else:
            second_lowest_score = lowest_score
            second_lowest_name = lowest_name

    if score < lowest_score:
        lowest_score  = score
        lowest_name = name

    counter = counter + 1

print('2nd lowest student is ',
      name, 
      'with score', 
      second_lowest_score)
print(sorted(testlist))

你只需要两个变量来记录最低的两个分数

  • 如果最新分数低于最低分数,则更新该分数并将第二个最低分数设置为第一个分数

  • 否则,如果最新的分数低于当前第二低的分数,只需用新值更新它。

相关问题 更多 >