2016-04-05 12 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() 

コードが目に基づいて学生を注文することになっている。この部分で、[ヘルプ] EIR平均(最低から最高)、しかし、それはそれをしません。[ヘルプ]

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

@Ocean、私はsnamecharmerbが文字列として比較しているので、 '' 10 "<" 4 "'とヒントしていると思います。pythonはデフォルトで、最も低いものから高いものにソートします。 '' lineList.sort(reverse =真) ' –

答えて

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 
関連する問題