好的,所以我今天参加了我的GCSE计算机科学考试,但我无法完成最后一个问题,因为我觉得这太过艰难了。我不记得问题的确切措辞,但我确实记得它的要求。因此,有一个由6人组成的阵列,然后用户可以输入每个玩家将移动多少个位置。然后我必须创建一个算法,该算法将在每次移动后更新每个人在阵列中的位置数组。问题是这些人坐在桌子旁边,他们的座位从1-6开始编号,所以如果他们都移动了2个空格,那么6人将在座位2中,当然他们排在第二位。因为这个问题让我烦恼不已,所以我回到家看看是否可以使用python创建算法。
以下是我提出的建议:
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])
正如您所看到的,这实际上并没有实际更新数组,因为这只是我的第一个方法,看看我是否可以打印出新的数组值。但是,我甚至没能成功,因为代码只会改变正在打印的数组,并且不会改变数组数据的位置。
这很难解释,所以我对答案感到怀疑,但如果我确实有任何意义,我非常感谢有人能给我一个有效的算法吗?对于给出的问题。谢谢伙计们/加尔斯!
答案 0 :(得分:1)
如果你想要在列表中交换两个元素:
seq[i], seq[j] = seq[j], seq[i]
如果你想“旋转”一个列表,这样每个元素都离它的起点有一段距离:
seq = [seq[(i + distance_to_move) % len(seq)] for i in range(len(seq))]
答案 1 :(得分:1)
这是一个解决方案。唯一的“技巧”是使用模运算符将座位限制为0 ... 5。此外,该公式增加了6,以避免产生负座位数。
<div class="container">
<div class="row">
<div class="col-md-3">
<form class="form-inline">
<div class="form-group col-md-7">
<div class="input-group">
<input type="text" class="form-control input-sm" placeholder="Search Ticket">
<span class="input-group-btn">
<button class="btn btn-default btn-sm btn-default-gradient" type="button">
<i class="glyphicon glyphicon-search"></i>
</button>
</span>
</div>
</div>
<button type="button" class="btn btn-default btn-sm btn-default-gradient col-md-5">
<span class="glyphicon glyphicon" aria-hidden="true"></span> Search Tools
</button>
</form>
</div>
<div class="col-md-3"></div>
<div class="col-md-3">
<button type="button" class="btn btn-default btn-sm btn-default-gradient pull-right">
<span class="glyphicon glyphicon" aria-hidden="true"></span> New Ticket
</button>
</div>
</div>
</div>
(只是观察:数组不是数组,但在这种情况下是列表) 在此之后,如果您愿意,可以将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) "))
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()
而且,对于那些不想使用额外变量的纯粹主义者,(甚至是模数!):)
array = copy.deepcopy(new_list)
答案 2 :(得分:0)
@jcoppens:Python与负面索引完美配合。例如array [-1]给出最后一个元素。
new_list.append(array[(seat + places_moved) % len(array)])
应该没事。
答案 3 :(得分: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)