2016-04-19 13 views
0

ここ最近、別のユーザーが下記のコードを改良するのを手伝ってくれました。私は整数のソートされたリストを持っていますが、元のリストを取得する方法はわかりません。なぜなら、with文はそれが読んでいるファイルを閉じるからです。変数を "List"に戻し、printステートメントを持っていれば、それを生成する方法を見つけることができます。私はreadlines機能を使うのは簡単だと思っていましたが、それをどうやって行うのか分かりません。助けてくれてありがとう!私はまだPythonを初めて使っています...Python(2.7)クローズファイルエラーの操作

import random 
with open("1000.txt", "w") as f: 
    for x in range(1000): 
     f.write(str(random.randint(0, 9999))+"\n") 

def readList(): 
    infile = raw_input("Input File Name: ") 
    rawList = list()  
    with open(infile, 'r') as infi: 
     for line in infi: 
      rawList.append(int(line)) 
    sortedList = sortList(rawList) #function call for sorting the list, returned sorted list is stored 
    n = int(raw_input("Which number do you want to return?: ")) 
    user_num = int(float(n-1)) 
    return sortedList, user_num, List 

def sortList(inpList): #function needs list as input and returns sorted list 
    inpList.sort() 
    return inpList 

if __name__=='__main__': #This is how the main is defined in python 
    sortedList, List, user_num = readList() #function call of readList, returned two objects are stored in variables 
    first = sortedList[0] 
    lines = len(sortedList) 
    orig_min_val = min(List) 
    orig_max_val = max(List) 
    minimum_val = min(sortedList) 
    maximum_val = max(sortedList) 
    if user_num > 1000: 
     print user_num, "is greater than 1000!" # you don't need brackets when printing 
    elif user_num > lines: 
     print "There aren't that many numbers in the list!" 
    elif lines < 1000: 
     print "WARNING: only", lines, "numbers were read into the list!" 
    print "Before sort:" 
    print "Min is", orig_min_val 
    print "Max is", orig_max_val 
    print "After sort:" 
    print "Min is", minimum_val 
    print "Max is", maximum_val 
    print user_num 
+0

:私はあなたがListからrawList__main__方法であなたの変数の名前を変更し、あなたの変数が正しくそうのように順序付けられていることを確認してくださいお勧めします私がちょうどそれを生産する方法を見つけることができれば」と言いました。*正確にはどういう意味ですか?あなたは 'main()'から 'readList()'を呼び出します - >ファイル名の入力を求められます - >ファイルが読み込まれ、リストに変換され、sorted - > 'sortedList、List、user_num'が返され、 'main()'から(ただし、変数の順序は乱れています)。私は密接にコードを読んでいないが、何がうまくいかないの? – jDo

答えて

0

プログラミングではスペルと順序が非常に重要です。あなたはいくつかの小さな破損があります。

まず、この行:

return sortedList, user_num, List 

Listと呼ばれるものを返しています。しかし、実際にはそのメソッドのどこにでもListという変数がありません。あなたが実際に返すものは、PythonクラスListへの参照です(あなたのポストのシンタックスハイライトが青色に色付けされていることに注意してください)。あなたは、おそらく代わりに、このようなrawListを返すようにしたい:

return sortedList, user_num, rawList 

第二に、この行:

sortedList, List, user_num = readList() 

が戻ってそのリターンからの結果を得ているが。よく見ると、実際には間違った順序で表示されます。それだけでなく、値の1つをPythonクラスListに割り当てています!これは非常に悪いです。一覧 『"私はすでに変数を返した』とそのためのprint文を持っている*

sortedList, user_num, rawList = readList()