hgjazhgj / FGO-py

自动爬塔! 自动每周任务! 全自动免配置跨平台的Fate/Grand Order助手.启动脚本,上床睡觉,养肝护发,满加成圣诞了解一下?
http://fgo-py.hgjazhgj.top/
GNU Affero General Public License v3.0
1.53k stars 179 forks source link

运行至第三面时报错IndexError: string index out of range #4

Closed y1s3m0 closed 4 years ago

y1s3m0 commented 4 years ago

py3.7 v3.2.2 将Func中修改为以下能用

def doit(touch,wait):[(press(i),time.sleep(j*.001))for i,j in zip(touch,wait)]
def doit(touch,wait):[(press(i),time.sleep(j*.001))for i,j in list(zip(touch,wait))]

感谢作者 之后快乐的刷情人节吧

hgjazhgj commented 4 years ago

???? 为什么这么改就对了??????

y1s3m0 commented 4 years ago

惭愧,百度到这么一段,然后就“这也能用了?!”

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用` * 号操作符,可以将元组解压为列表。

zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。

hgjazhgj commented 4 years ago

列表生成式是可以应用在可迭代对象上的,强制转换为list应该只是浪费内存吧.... 我从来没有在我自己的机器上遇到过这样的问题, 能不能详细描述一下错误发生时的情况,或者提供出错信息? 比如场上是哪几个从者,是在放技能还是选卡等阶段出现错误之类的

y1s3m0 commented 4 years ago

使用pycharm调试 版本v3.2.2 雷电模拟器1920*1080(同使用127.0.0.1:5555端口) 不知道是否为模拟器问题,更改代码之后能稳定使用 测试了两次(分别为第8回合与第9回合) 获取句柄和连接后,肝禁书级活动 在刚进入到第三面时报错

C:\Users\hsf\Anaconda3\envs\all\python.exe C:/Users/hsf/PycharmProjects/FGO-py/fgoGui.py 2020-03-03_15.53.43 Battle 1 2020-03-03_15.53.48 Friend: gold 2020-03-03_15.54.17 1 1 1 [0, 1, 2] 2020-03-03_15.54.46 2 1 2 [0, 1, 2] 2020-03-03_15.55.02 3 1 3 [0, 1, 2] 2020-03-03_15.55.23 4 2 1 [0, 1, 2] 2020-03-03_15.55.42 5 2 2 [0, 1, 2] 2020-03-03_15.56.06 6 2 3 [0, 1, 2] 2020-03-03_15.56.39 7 2 4 [0, 1, 2] Traceback (most recent call last): File "C:/Users/hsf/PycharmProjects/FGO-py/fgoGui.py", line 51, in f func(*args,*kwargs) File "C:\Users\hsf\PycharmProjects\FGO-py\fgoFunc.py", line 198, in main if not battleFunc(args,**kwargs):doit('VJ',(500,500)) File "C:\Users\hsf\PycharmProjects\FGO-py\fgoFunc.py", line 151, in oneBattle if stageTurn==1:doit('\x69\x68\x67\x66\x65\x64'[dangerPos[stage-1]]+'P',(50,500)) IndexError: string index out of range string index out of range 0

再次点击完成战斗同样报错 定位到doit函数 更改后稳定 附上配置,场上为123号英灵 希望有所帮助 Snipaste_2020-03-03_16-03-56 Snipaste_2020-03-03_16-07-27

hgjazhgj commented 4 years ago

这....这是你优先攻击配置写错了
把鼠标挪到优先攻击的输入框上可以看到详细说明.

右到左依次为dangerPos0-2,当boss血条与小兵血条不在同一行内时(魔伊,鬼岛,罗生门,FA,柱子,etc.)第二行的三个位置为dangerPos3-5

也就是说在大多数活动中dangerpos都应该是0,1,2中的一个.
如果像你一样dangerpos[2]写了6,'\x69\x68\x67\x66\x65\x64'[6]就会发生string index out of range
然后重点来了,为什么在zip外面套上list就能不出错无事发生呢?
我不知道.
就像我自己反复测试的一样,无论如何只要输入不对就应该是会报错的
python的工作原理应该是先计算好'\x69\x68\x67\x66\x65\x64'[dangerPos[stage-1]]+'P'然后传入函数调用,不存在延迟计算的问题.应该和被调用函数没有一星半点的关系,绝不会保留这个错误继续往下执行的.
也不会是模拟器的问题.3.2.2版本是兼容所有安卓设备的
有待继续研究

y1s3m0 commented 4 years ago

好吧,我理解成一二三面按顺序来了 那最后还是感谢作者的脚本 airtest似乎也很有意思 会持续关注的