2016-04-28 182 views
2

當我運行我的代碼,我不明白爲什麼我不斷收到以下錯誤信息:錯誤:錯誤的文件描述符「

with open(classChoice, 'r+') as resultfile: 
OSError: [Errno 9] Bad file descriptor 

這是我的代碼:

import collections 

classChoice = int(input("Which class do you want to order? ")) 
if classChoice == 1: 
    open ("Class 1.txt") 
elif classChoice == 2: 
    open ("Class 2.txt") 
else: 
    open ("Class 3.txt") 

scores = {} 
def alphabetical(): 
    with open(classChoice, 'r+') as resultfile: 
     for line in resultfile: 
      name, score = lines.split(":") 
      scores.setdefault(name, collections.deque(maxlen=3)).append(int(score)) 

    for name in sorted(scores): 
     m = max(scores[name]) 
     print('{name}: {m}'.format(name=name, m=m)) 

def highestScore(): 
    with open(classChoice, 'r+') as resultfile: 
     for line in resultfile: 
      name, score = line.split(":") 
      scores.setdefault(name, collections.deque(maxlen=3)).append(int(score)) 

    for name in sorted(scores, key=lambda name: max(scores[name]), reverse=True): 
     m = max(scores[name]) 
     print('{name}: {m}'.format(name=name, m=m)) 

def averageScore(): 
    with open(classChoice, 'r+') as resultfile: 
     d = {} 
     for line in resultfile: 
      column = line.split(":") 
      names = column[0] 
      scores = int(column[1].strip()) 
      d.setdefault(names, []).append(scores) 
     averages=[] 

     for names, v in d.items(): 
      average = (sum(v[-3:])/len(v[-3:])) 
      averages.append((names, average)) 
     for names, average in sorted(averages, key=lambda a: a[1], reverse=True): 
      print(names, average) 

orderChoice = (input("How do you want to order the data? ")) 
if orderChoice == "alphabetically": 
        alphabetical() 
elif orderChoice == "with highest score for the tests, highest to lowest": 
        highestScore() 
else: 
        averageScore()    
+0

因爲你試圖打開一個數字,所以'如果classChoice == 1:open(「Class 1.txt」)'不會做什麼你試圖做... –

回答

0

預計開放一個字符串,你給它一個int。我認爲你正在試圖做的是

classChoice = int(input("Which class do you want to order? ")) 
if classChoice == 1: 
    classChoice = "Class 1.txt" 
elif classChoice == 2: 
    classChoice = "Class 2.txt" 
else: 
    classChoice = "Class 3.txt" 
+0

謝謝你,但現在它說: – Harry

+0

名,得分= lines.split(「:」) NameError:全局名稱「行」是沒有定義 – Harry

+0

並且:姓名,分數= lines.split(「:」) AttributeError:'dict'對象沒有屬性'split' – Harry

0

你的問題是在這裏:

classChoice = int(input("Which class do you want to order? ")) 
if classChoice == 1: 
    open ("Class 1.txt") 
elif classChoice == 2: 
    open ("Class 2.txt") 
else: 
    open ("Class 3.txt") 

open ("Class <num>.txt")會做什麼打開該文件後。

然而,在這裏:

with open(classChoice, 'r+') as resultfile: 

你試圖打開classChoice。它是什麼?讓我猜,它可能是1,23

  • 當你試圖打開一個號碼,你試圖打開一個文件描述符
  • 當你打開一個文件,巨蟒還創建了一個文件描述符吧......你並不真的需要理解它現在是什麼。

我建議你的代碼更改爲:

classChoice = int(input("Which class do you want to order? ")) 
if classChoice == 1: 
    filename = "Class 1.txt" 
elif classChoice == 2: 
    filename = "Class 2.txt" 
else: 
    filename = "Class 3.txt" 

並改變每個以下行:

with open(classChoice, 'r+') as resultfile: 

到:

with open(filename, 'r+') as resultfile: 
相關問題