-1

elif 原因内で番号のリストを更新できるように、Python コードを作成するにはどうすればよいですか? 空の空のリストから始めて、そこから、リストに追加したい新しいスコアの数をユーザーに尋ね、それらの番号をリストに追加する必要があります。次に、メニューシステムに戻って、リスト内のそれらの数値の平均が必要な場合は、ユーザーは 3 を押します。ここで私が抱えている問題の下の私のコードは、elif句でスコアが更新されているということですが、句を取得すると、リストは空に戻ります。助けてください!

4

3 に答える 3

0

空のリストをバインドするステートメントをループの前に移動します。

scores = []
while 1:
   ...
于 2012-10-05T15:24:18.867 に答える
0

addScores メソッドはリストを返しているように見えます。append メソッドは単一の要素用です。elif ステートメントで append の代わりに extend を使用します。

同様に、addScores メソッドは、追加するローカル スコア リストをインスタンス化していないため、インスタンス化されないため、空のリストが返されます。変更したいリストを渡すか、それが返すローカルリストを持っていますが、現在はどちらも行っていません。

于 2012-10-05T16:08:32.677 に答える
0

まず第一に、関数は while ループで定義されるべきではありません。それらをループの外側で定義し、引数を渡します。スコア リストを追跡するクリーンな方法は、グローバル変数を使用して、プログラム内のすべての関数がそれにアクセスできるようにすることです。

変更されたコードは次のようになります。

scores = []

def addScores():
    enteredScores = []
    while True:
        numOfScores = input("How many new scores would you like to add: ")
        try:
            if int(numOfScores) > 0:
                for i in range(int(numOfScores)):
                    newInput = input("Please enter a score: ")
                    enteredScores.append(newInput)
                print(enteredScores)
                return enteredScores
            else:
                print("Please enter a positive integer.")
                continue
        except ValueError:
            print("Please enter a positive integer.")

while True:
    print("0 - Clear scores")
    print("1 - Input more scores")
    print("2 - Print scores")
    print("3 - Average scores")
    option = input("Please choose an option: ")

    if option == 0:
        scores = []
    elif option == 1:
        scores += addScores()
    elif option == 2:
        print("Scores:", scores)
    elif option == 3:
        try:
            avgScore = sum(scores)/len(scores)
            print("Average:", avgScore)
        except TypeError:
            print("Invalid score contained in list.")
    else:
        print("Quitting current program.")
        break
    replay = input("Do you wish to continue? (Y/N)")
    replay = replay.lower()
    if replay == "y" or replay == "yes":
        continue
    else:
        break

print("Goodbye!")

2 つの try/except ステートメントを追加しました。プログラムでエラーが発生し、それが前述のタイプ (ValueError および TypeError) のいずれかに該当する場合、プログラムをシャットダウンする代わりに、except ステートメントでエラーを処理します。それらをカバーしていない場合は、それらを削除することができ、プログラムは正常に動作するはずです。また、ロジックを少しクリーンアップしました。もともと、リプレイ変数は何もしなかったため、ループに移動することで、プログラムを続行するか中断するようになりました。

于 2012-10-05T16:35:47.710 に答える