首页 > 解决方案 > 如何在python中故意导致翻转?

问题描述

我想引起一个翻转,例如在原始文明游戏中,甘地已经是最和平的,然后玩家将最大和平主义值(255)增加一并变为 0(愤怒)。我想对列表或数组进行算术运算并定义一个范围(例如 0-255),如果算术运算后的值超出范围(负值或超过 255 的任何值),它将从头开始或倒退。例子:

list1 = [10,118,251,43,195] # add 150 to each value
output_list = [160,268,401,193,345] # but I want [160,13,146,193,90]

同样,如果我从每个值中减去,任何低于 0 的值都会从 255 回滚。

ps 它不一定是列表,也可以是数组或其他方式。目前,我编写了一个 for 循环检查每个值,但它并不优雅,并且仅在超过/低于值不超过该范围内的最小值/最大值的 2 倍时才有效。

# My current code:
for i in range(len(list1)):
    if list1[i] > 255:
        list1[i]=list1[i] - 255
    if list1[i] < 0:
        list1[i]=list1[i] + 255

谢谢!

标签: pythonarrayslistmathrollover

解决方案


您所指的这种“翻转”操作通常称为“模”或“余数”,因为它对应于查找欧几里得除法的余数。它有时也被称为“环绕”。

例如,当我们计算一天中的小时数时,我们以 12 为模数,因此 13:00 等于 01:00。

模运算%在python中表示。您可以实现一个add将阈值考虑在内并应用模运算符的自定义函数:

def add(x, y, threshold=256):
  return (x + y) % threshold

list1 = [10,118,251,43,195]
output_list = [add(x, 150) for x in list1]

print(output_list)
# [160, 12, 145, 193, 89]

推荐阅读