Python 随机化坐标

Python 随机化坐标,python,Python,我对Python很陌生,但我发现编写代码真的很有趣 dictionary\u of\u位置={ “位置_1”:(22141026),#x,y坐标 ‘地点2’:(23791016), "地点":(20451092), ‘地点四’:(21631080), ‘地点五’:(22141080), "地点(2262,1078),, } 我想运行一个代码来选择位置坐标,并将x和y值随机化+-15 我想做的是: 位置的字典中的i的。值(): pyautogui.click(i),print('click o

我对Python很陌生,但我发现编写代码真的很有趣

dictionary\u of\u位置={
“位置_1”:(22141026),#x,y坐标
‘地点2’:(23791016),
"地点":(20451092),
‘地点四’:(21631080),
‘地点五’:(22141080),
"地点(2262,1078),,
} 
我想运行一个代码来选择位置坐标,并将x和y值随机化+-15

我想做的是:

位置的字典中的i的
。值():
pyautogui.click(i),print('click on location'+str(i+1)+'!'),time.sleep(.75)

使用
random.randint

随机导入
loc=…#做任何事情来获得你想要的坐标
loc=(loc[0]+random.randint(-15,15),loc[1]+random.randint(-15,15))
或者,如果您不仅需要整数,还需要浮点数:

随机导入
loc=…#做任何事情来获得你想要的坐标
loc=(loc[0]+random.random()*30-15,loc[1]+random.random()*30-15)

我喜欢python的一点是它如何温和地引导人们进行功能性思考。所以当我看到这样的问题时,我想——“在这种情况下,哪一个单一的、可重用的函数会真正有帮助?”

在回答这个问题时,我猜某种模糊器,在给定输入和一些参数的情况下,会吐出一个模糊版本。也许我们想要模糊一个固定的量(+15,根据你的问题),或者也许以后,我们可能想要模糊一个定义为比率的量

这里是一个涵盖第一个想法(固定范围的模糊)的起点,我们将调用输入值和模糊量,模糊(其他命名想法可用)

Python的模块中有很多有用的随机化代码,因此我们也将为其中一些功能导入这些代码

import random
def blur(value, blur):
    blur_sign = random.choice([-1,1]) # is the blur going to be positive or negative?
    blur_rand = random.randint(0,blur) * blur_sign # pick a random number up to "blur" and multiply by sign
    return value + blur_rand
注意:上面使用的
random.choice
可能有点过时 笨重的一面,正如其他人在这里展示的,呼唤
random.randint
带有下限和上限作为参数是 更干净的方式获得您想要的范围,并将跨越 肯定/否定,无需像我所做的那样明确设置 在这里

试试看,给“blur”函数输入任何值和一些模糊参数,它应该会给出你想要的结果。现在,您已经有了一个完成这项工作的函数,只需使用一些python将其粘贴到您感兴趣的任何工作流中即可

下面是一个示例,说明在给定现有代码的情况下可能会出现的情况:

for x,y in dictionary_of_locations.values():
    i = (blur(x,15), blur(y,15))
    pyautogui.click(i), print('clicking on location ' + str(i + 1) + ' !'), time.sleep(.75)
您可以使用
randint(lb,ub)
获取介于下限/上限之间的随机整数

from random import randint
for loc in dictOfLoc:
    newLoc = (dictOfLoc[loc][0] + randint(-15, 15),
              dictOfLoc[loc][1] + randint(-15, 15))
    dictOfLoc[loc] = newLoc
你可以用

例如:

将numpy导入为np
导入时间
字典中的位置={
“位置_1”:(22141026),#x,y坐标
‘地点2’:(23791016),
"地点":(20451092),
‘地点四’:(21631080),
‘地点五’:(22141080),
"地点(2262,1078),,
}
def get_random(x,y):
"""
根据rand_range获取(x,y)并返回(random_x,random_y)
+1被添加到上限,因为randint是高独占[低,高)
:参数x:位置x
:参数y:位置y
:返回:范围为15的x和y的随机值
"""
rand_范围=15#表示-/+15
x_低=x-随机范围
x_高=x+rand_范围+1
y_低=y-rand_范围
y_高=y+rand_范围+1
rand_x=np.random.randint(低=x_低,高=x_高)
rand\u y=np.random.randint(低=y\u低,高=y\u高)
返回rand_x,rand_y
对于位置,字典\u中的位置为\u位置。项()
当前_x,当前_y=位置
new_x,new_y=随机获取(当前_x,当前_y)
打印(点击{location}(x,y):({new_x},{new_y})!)
时间。睡眠(.75)
#输出
#点击位置_1(x,y):(22091040)!
#点击位置2(x,y):(23641005)!
#点击位置3(x,y):(20521086)!
#点击位置_4(x,y):(21601092)!
#点击位置5(x,y):(22221079)!
#点击位置_6(x,y):(22751082)!

查找Python中的
random
模块。要获得范围为-15..+15的随机整数,请执行
random.randint(-15,15)
。元组是不可变的,因此您的代码需要基于旧元组创建一个新的随机坐标,类似于
newcoord=(oldcoord[0]+random.randint(-15,15),oldcoord[1]+random.randint(-15,15))
。Thomas Kimber的答案还提出了将其封装到可重用函数中的好主意。