刚到手《Make Your Own Python Text Adventure: A Guide to Learning Programming》一书,打算将它的例程用木兰语言重写并改为中文标识符。一方面看看已重现的木兰功能对新手入门教程是否足够,顺便对之前小结的木兰与 Python 的语法对比进行补充。下面代码在木兰发布版本 0.0.15.0 运行通过。
该书三四五六章分别介绍用户输入、条件语句、函数、列表,直接跳到第七章:循环,因为例程包含了前几章的技术:
func 玩 {
库存 = ['匕首','金币(5)','面包棍']
println("逃出生天!")
loop {
输入 = 获取命令()
if ['n', 'N'].__contains__(输入) {
println("往北!")
} elif ['s', 'S'].__contains__(输入) {
println("往南!")
} elif ['e', 'E'].__contains__(输入) {
println("往东!")
} elif ['w', 'W'].__contains__(输入) {
println("往西!")
} elif ['i', 'I'].__contains__(输入) {
println("库存:")
for 家伙 in 库存 {
println('* ' + str(家伙))
}
} else {
println("不懂!")
}
}
}
func 获取命令 {
return input('行动:')
}
玩()
比较大的不适是不支持 Python 元素 in 列表
的判断语法,这里用 __contains__
代替,尚待确认是否有更简便的木兰语法没发现。
可以用 ..
和 ..<
代替 Python 中的 range:
for 数 in 1..<11 {
因数 = []
for 除数 in 1..数 {
因数.append(除数) if 数 % 除数 == 0
}
println("`数`的因数:" + str(因数))
}
第八章:类型和个体
type 人 {
func $人(名称, 年龄, 爱吃的) {
$名称 = 名称
$年龄 = 年龄
$爱吃的 = 爱吃的
}
func $出生年份 {
return 2015 - $年龄
}
func $__str__ {
return "姓名:{} 年龄:{} 爱吃的:{}".format(
$名称, $年龄, $爱吃的[0])
}
}
各人 = [人("Ed", 11, ["hotdogs", "jawbreakers"])
, 人("Edd", 11, ["broccoli"])
, 人("Eddy", 12, ["chunky puffs", "jawbreakers"])]
年龄和 = 0
年份和 = 0
for 某人 in 各人 {
年龄和 = 年龄和 + 某人.年龄
年份和 = 年份和 + 某人.出生年份()
}
println("平均年龄:" + str((年龄和 + 0.0) / len(各人)))
println("平均出生年份:" + str(int(年份和 / len(各人))))
println("普查中的人:")
for 某人 in 各人 {
println(某人)
}
第九章、异常,需要木兰的 try...catch
语法,打算在 gitee 项目重现该语法后继续本系列。