python - 如何在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
谢谢!
解决方案
您所指的这种“翻转”操作通常称为“模”或“余数”,因为它对应于查找欧几里得除法的余数。它有时也被称为“环绕”。
例如,当我们计算一天中的小时数时,我们以 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]
推荐阅读
- python - 在 Python 中以 LRU 缓存方式管理服务集合?
- angular - Rxjs, fromEvent 处理多个事件
- javascript - Packery - 多个网格之间的可拖动项目
- javascript - 带有小数分隔符的 HTML 数字输入问题
- javascript - 将 confirm() 转换为 Bootstrap 模式对话框
- gradle - Gradle:为什么 assemble 任务被跳过说它没有动作?
- azure - Azure Kinect 相机中的扭曲对象
- reactjs - 如何为 Next.js 设置 Pug?
- c# - 如何生成列表框算法?
- mongodb - 如何自省 MongoDB 中的所有集合并将其预加载到 Spark SQL 目录中?