【问题标题】:How to run python script in Android studio using chaquopy?如何使用 chaquopy 在 Android Studio 中运行 python 脚本?
【发布时间】:2020-09-25 08:17:41
【问题描述】:

我正在尝试使用 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);
}

我在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);
}

【问题讨论】:

    标签: python android chaquopy


    【解决方案1】:

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

    我假设您说的是 Android Studio 编辑器中显示的错误,而不是在运行时发生的错误。正如the documentation 所说,编辑器中的错误是无害的:继续运行您的应用程序,如果确实有错误,详细信息将显示在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)
    

    这将为您提供一个 Java String[] 数组,然后您可以随意处理它。


    编辑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.
    

    【讨论】:

    • 感谢您的回答。但是有一个问题它显示错误是** com.chaquo.python.PyException: TypeError: 'ArrayList' object is not subscriptable**。有什么建议吗?
    • 如果wk, batsman, bowler, ar都是ArrayLists,那么你应该调用toArray进行转换,然后再将它们传递给Python。
    • 代码正在运行,但我无法使用它。我在我的问题中做了一个编辑部分,请检查。
    猜你喜欢
    • 2021-07-20
    • 2020-11-03
    • 2020-07-17
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多