0
 import pickle
filename=input('Enter a file name:')

def commands():
    f=open(filename,'w')
    names=[]
    grades=[]
    while True:
            name=input("Give a student's name:")
            if name.lower()=='end':
                    f.close()
                    print("File closed")
                    print("Back to Menu")
                    break
            else:
                    x=names.append(name)
                    f.write(str(x))
            grade=input("Give student's grade:")          
            try:
                grade=float(grade)
                if 0<=grade<=10:
                    y=grades.append(grade)
                    f.write(str(y))
                else:
                    print("Please give a grade!Between 0-10! ")
            except ValueError:
                print(grade,"is not a number...Give only Numbers!")




def syn2(filename):
    try:
        f=open(filename,'r')
        f.read(names)
        f.read(grades)
        d1={}
        d1[names]=grades
        print(d1)
        print("Back to Menu")
    except IOError:
        return False

syn2(filename) を呼び出すと:

トレースバック (最新の呼び出しが最後):
  ファイル「file1.py」の 68 行目
  syn2 のファイル「file2.py」、45 行目
NameError: グローバル名 'names' が定義されていません
4

4 に答える 4

1

プログラムが予期する前に、ファイル「EOF」の終わりに到達しています。

于 2009-12-09T19:11:15.457 に答える
1

global name 'names' is not defined内部で宣言しており、このスコープ内でのみ表示されるためnamesdef entoles()エラーが発生 します。

アクセスできるようにする場合namesは、外部で宣言する必要があります。dev entoles()

また

x=names.append(name)
f.write(str(x))

append は、リストに渡された項目をその場で追加するメソッドです。メソッドは「なし」を返すため、「f.write(str(x))なし」と書き込みます。

編集: f.read() の入力/出力に関する Python ドキュメントと、input/raw_input のこの Python ドキュメント

于 2009-12-10T00:37:59.467 に答える
1

学生/成績を辞書に入れておくことをお勧めします。ユーザーが入力を完了するとpickle、辞書がファイルに保存されます。お気に入り

grades = {}
while True:
    # ask for student's name n
    # ...

    if n.lower() == 'end':
        break

    # ask for student's grade g
    # ...

    grades[n] = g

pickle.dump(grades, yourfile)
于 2009-12-09T19:38:23.527 に答える
0

問題は、myfunc関数が各反復でファイルを再度開き、その内容を削除することです。openwhile ループの前に呼び出しを移動する必要があります。

于 2009-12-09T19:40:38.423 に答える