如何编写同时兼容Python与Lua的Polyquine多语言兼容程序?
Python与Lua兼容的Polyglot程序实现
你遇到的问题主要是代码存在跨语言语法冲突、语言判断逻辑错误,以及参数获取方式不兼容的问题。以下是修正后的可运行代码,同时会解释你的代码问题所在:
正确代码
n = (not 0) and eval("import sys; int(sys.argv[1]) if len(sys.argv)>1 else int(input())") or load("return tonumber(...) or tonumber(io.read())")() print( (not 0) and ("Even in Python" if n%2==0 else "Odd in Python") or ((n%2==0) and "Even in Lua" or "Odd in Lua") )
代码说明
- 语言判断逻辑:利用Python和Lua对
0的布尔值判定差异——Python中0是假值,not 0返回True;Lua中0是真值,not 0返回False。通过这个表达式实现语言环境的区分。 - 参数获取:
- Python环境:通过
eval执行内嵌的Python代码,优先读取命令行参数,无参数时读取标准输入。 - Lua环境:通过
load执行内嵌的Lua代码,优先读取命令行可变参数...,无参数时读取标准输入。 - 利用短路求值特性,当前语言不会执行另一语言的参数获取代码,避免未定义变量的运行时错误。
- Python环境:通过
- 输出逻辑:根据语言环境和
n的奇偶性,分别输出对应字符串,两种语言的条件表达式语法各自兼容。
你的代码问题分析
- 语法冲突:
- Python中不存在
nil关键字,if n==nil会直接报错; - Python字符串拼接使用
+而非Lua的..,"Even in "..(...)会触发语法错误。
- Python中不存在
- 语言判断失效:
_ and "Python" or "Lua"在两种语言中都会返回"Python"——因为_=1在Python和Lua中都是真值,无法区分语言环境。 - 参数获取错误:Python中
n=...是将Ellipsis对象赋值给n,并非读取命令行参数,无法正确获取输入值。
内容的提问来源于stack exchange,提问作者ksheerabdinath TSP
相关产品推荐
相关产品推荐

