2016-04-05 3 views
-3

Year10 - Year11 A453 Арифметический опрос -Есть ли способ исправить этот код на Python?

Все это, насколько мне известно, работает правильно. Я оставляю это здесь, так что есть какой-то контекст.

file = open 

def menu(): 
    entry = False 
    while entry == False: 
     print('   ***************************') 
     print('   * Arithmetic Quiz Scores! *') 
     print('   ***************************') 
     print('') 
     print('') 
     print('1. Alphabetic Order (Highest)') 
     print('') 
     print('2. Highest - Lowest') 
     print('') 
     print('3. Average (Highest-Lowest)') 
     print('') 
     print('4. Quit') 
     print('') 
     choice=input('What do you want to do - 1, 2, 3, 4? ') 
     if choice == '1': 
      print("") 
      alphabetic_order() 
      entry = False 
     elif choice == '2': 
      print("") 
      highest_lowest() 
      entry = False 
     elif choice == '3': 
      print("") 
      average() 
      entry = False 
     elif choice == '4': 
      print("Goodbye") 
      entry = True 
     else: 
      print("") 
      print("Im Sorry But That Is Not An Option, Please Choose Again!") 
      input("Press Enter!") 
      print("") 

def alphabetic_order(): 
    inputFile = open("Names.txt", 'r') 
    lineList = inputFile.readlines() 
    lineList.sort() 
    for line in lineList: 
     line = line.strip() 
     parts = line.split(" - ") 
     name = parts[0] 
     score1 = parts[1] 
     score2 = parts[2] 
     score3 = parts[3] 
     alphabetical=(max(score1, score2, score3)) 
     print(" "+ name + " " + alphabetical) 
     print("") 
    inputFile.close() 

Это содержимое файла Names.txt:

Tim - 5 - 6 - 7 
Chloe - 6 - 3 - 9 
Zack - 9 - 10 - 8 
Bob - 7 - 4 - 6 
Bo - 8 - 9 - 9 
Adam - 8 - 4 - 5 
Joe - 3 - 2 - 5 
Zoey - 6 - 6 - 6 
Larry - 7 - 3 - 3 
Mary - 5 - 6 - 9 

[FIXED] На данный момент код не сортирует результаты в высоких до низких выводит большинство из них низшего к высшему и I считают, что для одного из них, который имеет 10 баллов, код думает, что это просто 1. [FIXED]

def highest_lowest(): 
inputFile = open("Names.txt", 'r') 
lineList = inputFile.readlines() 
lineList.sort() 
for line in lineList: 
    line = line.strip() 
    parts = line.split(" - ") 
    name = parts[0] 
    score1 = int(parts[1]) 
    score2 = int(parts[2]) 
    score3 = int(parts[3]) 
    total=(score1, score2, score3) 
    highestlowest=sorted(total, key=int, reverse=True) 
    print(" "+ name + " " + str(highestlowest)) 
    print("") 
inputFile.close() 

[HELP] в этой части кода предполагается сделать заказ студентов на основе й EIR средняя (от высшего к низшему), однако он не делает этого. [HELP]

def average(): 
    inputFile = open("names.txt", "r") 
    lineList = inputFile.readlines() 
    lineList.sort() 
    for line in lineList: 
     line = line.strip() 
     parts = line.split(" - ") 
     name = parts[0] 
     score1 = parts[1] 
     score2 = parts[2] 
     score3 = parts[3] 
     total= int(score1) + int(score2) + int(score3) 
     average_= int(total) /3 
     print (" "+ name + " " + str(round(average_))) 
     print("") 
    inputFile.close() 

menu() 

Не могли бы вы помочь мне понять, почему эти цифры не упорядочиваются, как я ожидал? Прошу прощения, если это не то, как я должен задавать вопросы, я новичок.

+0

Как вы думаете, Python будет сортировать строки «1» и «10» по-разному для целых чисел от 1 до 10? – snakecharmerb

+0

@snakecharmerb это не то, что я думаю, что это именно то, что кажется. – Ocean

+1

@ Океан, я думаю, что snamecharmerb намекал на то, что '' 10 "<" 4 "', поскольку они сравниваются как строки, а python по умолчанию будет сортировать от самого низкого до самого высокого, вы можете отменить этот порядок, указав 'lineList.sort (reverse = True) ' –

ответ

1

На ваш вопрос:

Не могли бы вы мне помочь?

Я бы сказал, да, я могу.

К вопросу вы не спросили:

Почему мой код не сортировки чисел, как ожидалось?

Ответ заключается в том, что ваши номера по-прежнему являются строками. Вы должны преобразовать их в число, т.е .:

score1 = int(parts[1]) 

С уважением

+0

Спасибо, что решили некоторые проблемы: 3 – Ocean

+0

Добро пожаловать. Могли бы вы тогда одобрить мой ответ? Вы одобрили другой ответ. @Ocean –

1

Основной проблемой в вашем коде является то, что вы пытаетесь сортировать строки и ожидать, что одни и те же результаты, как с числами.

В обоих ваших методах вы загрузите файл

inputFile = open("names.txt", "r") 

Затем вы читаете строки

lineList = inputFile.readlines() 

Теперь у вас есть список, содержащий строки. Алгоритм сортировки сравнивает строки, а не числа.

Для среднего, например, вы должны попытаться рассчитать среднее значение для каждого человека, а затем отсортировать его по среднему значению.

Приветствия

+0

Как мне это сделать? – Ocean

+0

Я не собираюсь давать вам точный код для этого, потому что это выглядит как учебное упражнение для меня. Просто попробуйте представить, что ваша программа должна делать. Сначала вам нужны все средние значения для каждого игрока. Затем вам нужно отсортировать их, и, наконец, вам нужно распечатать их в правильном порядке. Имейте в виду, что вам нужна ссылка между именем и средним значением, чтобы вы могли распечатать правильное среднее значение с каждым именем. –

+0

Это курсовая работа, которая должна пройти через пару дней. – Ocean

1

Вопрос заключается разница в том, как строки сортируются против целых чисел.

Это может показаться неожиданным, но оказывается логичным сортировать строки и целые числа по-разному. В частности, строки обычно сортируются в lexicographical order. Например: "ab" < "b" и, аналогично "25" < "6".

В Python, вы можете ввести их непосредственно, чтобы увидеть, как они интерпретируются:

"ab" < "b" 
#prints True 

"25" < "6" 
#prints True 

25 < 6 
#prints False 
Смежные вопросы