如何在Android studio中使用chaquopy运行python脚本?

2024-05-29 11:29:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Android studio中使用chaquopy使用python脚本。但我有两个问题

  1. 我无法导入python random
  2. 如何检索列表

下面是Python脚本

import random
def getPlayers(wk, batsman, bowler, allRounder):
    chosen = batsman[:3] + bowler[:3] + allRounder[:1] + wk[:1]
    remainder = batsman[3:] + bowler[3:] + allRounder[1:] + wk[1:]
    random.shuffle(remainder)
    chosen.extend(remainder[:3])

    players = {'Batsman': [x for x in chosen if x in batsman],
               'Bowler': [x for x in chosen if x in bowler],
               'AllRounder': [x for x in chosen if x in allRounder],
               'Wk': [x for x in chosen if x in wk]}

    for key in players:
        for name in players[key]:
            return f'{key}: {name}'

它显示未找到名为random的模块

和活动文件

 private String getTeam() {
    Python python = Python.getInstance();
    PyObject file = python.getModule("getTeam");
    return file.callAttr("getPlayers", wk, batsman, bowler, ar);
}

我正在onCreate中调用getTeam方法。那么,如何从python脚本中获取键和值的列表呢

编辑

我使用此代码访问数据,但它显示com.chaquo.python.PyException: TypeError: jarray does not support slice syntax

这是密码

  String[] team = getTeam();
    for (String s : team) {
        Log.d("Player", s);
    }

}

private String[] getTeam() {
    Python python = Python.getInstance();
    PyObject file = python.getModule("getTeam");
    return file.callAttr("getPlayers", wk.toArray(), batsman.toArray(), bowler.toArray(), ar.toArray()).toJava(String[].class);
}

Tags: in脚本forstringifrandomfilechosen
1条回答
网友
1楼 · 发布于 2024-05-29 11:29:00

It is showing no module named random found.

我假设您谈论的是Android Studio编辑器中显示的错误,而不是运行时发生的错误。正如the documentation所说,编辑器中的错误是无害的:只要继续运行你的应用程序,如果真的有错误,详细信息将显示在Logcat

How can I get the list of keys and values from python script?

您可以这样编写Python代码:

return [f'{key}: {name}' for key in players for name in players[key]]

Java代码如下所示:

file.callAttr("getPlayers", wk, batsman, bowler, ar).toJava(String[].class)

这将为您提供一个Java String[]数组,然后您可以根据需要对其进行处理


为^{编辑

这个问题在Chaquopy 9.0.0中得到了修复。对于旧版本,可以通过将数组转换为Python list来解决

要在Python中转换,请执行以下操作:

def getPlayers(wk, batsman, bowler, allRounder):
    wk = list(wk)
    batsman = list(batsman)
    # etc.

或使用Java进行转换:

PyObject list = python.getBuiltins().get("list");
return file.callAttr("getPlayers", 
                     list.call(wk.toArray()), 
                     list.call(batsman.toArray()), 
                     // etc.

相关问题 更多 >

    热门问题