0

我正在尝试使用 chaquopy 在 Android 工作室中使用 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);
}

我正在调用getTeam中的方法onCreate。那么,如何从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);
}
4

1 回答 1

1

它显示没有找到名为 random 的模块。

我假设您说的是 Android Studio 编辑器中显示的错误,而不是在运行时发生的错误。正如文档所说,编辑器中的错误是无害的:继续运行您的应用程序,如果确实有错误,详细信息将显示在Logcat中。

如何从 python 脚本中获取键和值的列表?

您可以像这样编写 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)

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


编辑jarray does not support slice syntax:_

此问题已在 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.
于 2020-09-25T12:31:22.653 回答