2017-09-08 3 views
2

私は投票を、ユーザー入力を使用して人々が休暇に行きたい場所を見つけるための練習として作成しようとしています。ここに私のコードは、これまでです:リストを使ってPythonで投票を行う方法

done = False 
places = [] 
while done == False: 
    dreamvacation = input("What is your dream vacation? ") 
    if dreamvacation == "quit": 
     for item in places: 
      number = places.count(item) 
      if number == 1: 
       print("{} occured in the list 1 time.".format(item)) 
      else: 
       print("{} occured in the list {} times.".format(item, number)) 
       while number > 0: 
        places.remove(item) 
        number -= 1 
     done = True 
    places.append(dreamvacation) 

基本的には、それはそれをリストに投票し、誰かが何かを入力するたびに追加ありません。誰かが辞めると言うと、それはアイテムを数え、休暇の場所が何回起こったかによって何か違うと言います。複数回発生した場合は、whileループを使用してカウントした後に、他の重複を削除しました。しかし、重複を取り除くと、リスト全体がシフトし、インデックス・スポットが前方に移動して、スポットをスキップします。たとえば、次のようにカウントした後

[a(index is here),b,c,a,] 

、両方a年代が除去されると、インデックス位置が前方に移動します:

[b,c(index is here)] 

どのように私はそれがとてもインデックス位置が同じ場所にとどまることができますリストは変わるのですか?

私がこれを行うことができれば、私のプログラムは、その文字が数えられた後に重複しているものを削除することができます。

答えて

0

placesのエントリを削除する必要はありません。それは追跡するのが難しいだけです。次の例を参照してください。あなたのコードを少し変更しました。

done = False 
places = [] 

# user input stage 
while not done: 
    dream_loc = input('where to go? ') 
    if dream_loc == 'quit': 
     done = True 
    else: 
     places.append(dream_loc) 

# counting stage 
for loc in set(places): 
    count = places.count(loc) 
    if count == 1: 
     print("{} occured in the list 1 time.".format(loc)) 
    else: 
     print("{} occured in the list {} times.".format(loc, count)) 
関連する問題