1

私は C++ のバックグラウンドはかなりありますが、Python は初めてです。ユーザーが会社の株主数を指定し、各株主の 3 つの品質 (仕事の有用性、仕事の重要性、仕事の難しさ) の評価を尋ねることができる基本的なプログラムを作成しようとしています。

これら 3 つのスケールでのユーザーの評価をどこかに保存し、後で表示したいと考えています。3 つの性質ごとに 3 つのリストを使用することが最も効率的な方法かどうかはまだわかりません。とにかく、次のコードで私がやろうとしたことはuserrem、リスト内のどの新しいアイテムが追加されるかを使用して、変数を識別子として割り当てることです。

したがって、たとえば、の初期値は0です。したがって、入力された値をリストの最初の項目として追加する必要userremがあると理解しています。usefulness[userrem] = input()次に、コードでわかるように、while ループが進行し、userrem1 ずつ増加します。そのため、ループの 2 回目の反復ではusefulness[userrem]=input()、入力された値をリストの 2 番目の項目として追加する必要があると考えました。

ただし、ループの最初の反復でIndexError: list assignment index out of range値を入力した直後にエラーが発生し続けます。usefulness[userrem]

だから、私の質問は次のとおりです: -

  1. リストを使用することは、これを行う最も効率的な方法ですか?
  2. 私が達成したいことを達成するための代替方法は何ですか?
  3. アイテムの数が不明な (おそらく無限!) 3 つのリストを作成するよりも、株主ごとに 3 つの資質についてそれぞれ 3 つのアイテムを含むリストを作成したほうがよいでしょうか? しかし、各株主のリストがある場合、リストの数は不明であり、各リストのアイテムが 3 つしかない場合でも無限になる可能性があります。どのアプローチが最も効率的かを判断するにはどうすればよいですか?

ありがとう!

def func_input():  
    userrem=0 # Variable used as the identifier while adding items to the lists
    global user_n # Total number of users, accessed during input
    user_n=0 
    user_n=int(input('How many shareholders are there?'))
    while userrem<user_n:
        usefulness[userrem]=int(input('Rate the usefulness of the work performed by shareholder# '+str(userrem+1)+' [Range=0-5]'))
        significance[userrem]=int(input('Rate the significance of the work performed by shareholder# '+str(userrem+1)+' [Range=0-5]'))
        difficulty[userrem]=int(input('Rate the difficulty of the work performed by shareholder# '+str(userrem+1)+' [Range=0-5]'))
        userrem=userrem+1
4

1 に答える 1

3

必要なことを行う最も簡単な方法は、リストから辞書に変更することです。

usefulness = {}
significance = {}
difficulty = {}

アクセスのリストと同じ構文を使用し、以前に割り当てられていないインデックスへの割り当てを可能にします。

リストにとどまりたい場合は、別の変数に入力してからappendリストに入力するか、事前に必要なサイズでリストを作成する必要があります。

3 つのリストまたは辞書を持つ代わりに、3 つの値を組み合わせてタプルまたはリストにし、それを 1 つのリスト/辞書に格納できます。タプルをリストに格納する方法を示すコードを次に示します。

scores = [None]*user_n
for userrem in range(user_n):
    usefulness = int(input('Rate the usefulness of the work performed by shareholder# '+str(userrem+1)+' [Range=0-5]'))
    significance = int(input('Rate the significance of the work performed by shareholder# '+str(userrem+1)+' [Range=0-5]'))
    difficulty = int(input('Rate the difficulty of the work performed by shareholder# '+str(userrem+1)+' [Range=0-5]'))
    scores[userrem] = (usefulness, significance, difficulty)
于 2013-09-13T15:52:15.707 に答える