2015-06-03 53 views
1

好吧內交換價值,所以我把我的GCSE計算機科學考試今天,我無法完成最後一個問題,因爲我覺得這是一個十足的鬥爭。我不記得問題的確切用詞,但我確實記得它提出的問題。因此,有6人的陣列,然後用戶可以輸入每個球員移動的位置數。然後我必須創建一個算法,在每次移動之後更新每個人在陣列中的陣列。問題在於這些人坐在一張桌子旁邊,他們的座位數量是從1到6,所以如果他們全部移動了2個空格,那麼第六個人就會坐在第二個座位上,這使得他們在排列當中排在第二位。因爲這個問題讓我感到非常困惑,所以我回到家看到我是否可以使用python創建一個算法。Python 3.3.4。如何數組

這裏是我想出了:

array = ["susan", "mary", "david", "tom", "richard", "mark"] 

places_moved = int(input("How many places would you like to move?")) 

for i in range (0,6): 
    if i + places_moved > 5: 
     array[i] = (array[i + places_moved - 6]) 
    print (array[i]) 
else: 
    array[i] = (array[i + places_moved]) 
     print (array[i]) 

正如你可以看到,這實際上並不在所有的,因爲這只是我的第一種方法更新陣列來看看,如果我能得到它的打印看看新的數組值是什麼。但是,即使如此,我也未能成功,因爲代碼只會更改要打印的數組,並且不會更改數組數據的位置。

這是一種很難解釋,所以我懷疑的答案,但如果我真的沒有任何意義,我會非常感激,如果任何人都可以給我給出問題的工作算法。謝謝你們/ gals!

+1

問題,像這些都是正常,如果你探測熟悉使用模數。當像這樣的積分指數圍成一圈時,模數是一個很好的解決方案。 :) –

+0

因此......在座位改變期間 - 每個人都前進x座位,還是用戶必須定義​​每個*個人會移動多少座位? – konart

+0

@konart用戶定義每個人移動多少個座位,是的。 – TheNoobiestCoder

回答

1

這是一個解決方案。唯一的'技巧'是使用模運算符將座位限制在0 ... 5。此外,該公式增加6以避免產生負數座位數。

def main(): 
    array = ["susan", "mary", "david", "tom", "richard", "mark"] 

    places_moved = int(input("How many places would you like to move?\n" + \ 
          "(positive is to the right) ")) 

    new_list = [] 
    for seat in range(6): 
     new_list.append(array[(seat + 6 - places_moved) % 6]) 

    print new_list 

    return 0 

if __name__ == '__main__': 
    main() 

(只是一個觀察:數組不是一個數組,但在這種情況下的列表) 在此之後,您可以分配new_list數組,如果你喜歡:

array = copy.deepcopy(new_list) 

而且,只是對於不想使用一個額外的變量,誰較真:)

def main(): 
    array = ["susan", "mary", "david", "tom", "richard", "mark"] 

    places_moved = int(input("How many places would you like to move?\n" + \ 
          "(positive is to the right) ")) 

    if places_moved >= 0: 
     for move in range(places_moved): 
      array = [array[-1]] + array[0:-1] 
    else: 
     for move in range(abs(places_moved)): 
      array = array[1:] + [array[0]] 

    print array 

    return 0 

if __name__ == '__main__': 
    main() 
1

,如果你想換一個清單正好有兩個元素:如果你想「旋轉」列表

seq[i], seq[j] = seq[j], seq[i] 

,使每個元素都是一段距離起點遠:

seq = [seq[(i + distance_to_move) % len(seq)] for i in range(len(seq))] 
+0

準確!注意使用modulo :) –

+0

我們不能只用'new_arr = array [-n:] + array [:n]'哪裏'n'是他們移動的座位數?正面'n' - 右邊,負面 - 左邊 – konart

+0

@konart,或許,雖然我懷疑這種方法可能會失敗,因爲大數值的'n'。例如,'seq = range(10); seq [-100:] + seq [:100]'給出一個數值超過10的數組。 – Kevin

0

@jcoppens(甚至模!):Python的作品完美負指數。例如數組[-1]給出最後一個元素。

new_list.append(array[(seat + places_moved) % len(array)]) 

應該沒問題。

0

可以使用模,或求餘運算符%保持數組的長度和列表理解的範圍內的新指標,以更新數組:

array = ["susan", "mary", "david", "tom", "richard", "mark"] 

places_moved = int(input("How many places would you like to move?")) 
length = len(array) 

array = [array[(i+places_moved) % length] for i, elem in enumerate(array)] 
print(array)