首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印(fizz..buzz)

打印(fizz..buzz)
EN

Code Review用户
提问于 2016-08-18 20:08:50
回答 3查看 227关注 0票数 8

我情不自禁地注意到我们还没有FizzBuzz in lua。我一直想向卢阿开枪,所以现在什么都没做。

代码:

代码语言:javascript
复制
function fizzBuzz(maxNum)
  local fizz = "Lua"
  local buzz = "Yay"
  for i = 1, maxNum do
    if i % 15 == 0 then
      print(fizz..buzz)
    elseif i % 3 == 0 then
      print(fizz)
    elseif i % 5 == 0 then
      print (buzz)
    else
      print(i)
    end
  end
end

fizzBuzz(100)

输出:

代码语言:javascript
复制
1
2
Lua
4
Yay
Lua
7
8
Lua
Yay
11
Lua
13
14
LuaYay
16
17

我非常怀疑这是惯用的Lua,所以我愿意接受建议。据我所知,mixedCase和2-空间缩进是路亚的道路,但可以自由地证明我错了。

EN

回答 3

Code Review用户

回答已采纳

发布于 2016-08-19 08:53:36

顾名思义,Lua是一种可嵌入的脚本语言。因此,对于如何创建变量或缩进代码没有指导方针。这在很大程度上是开发人员感到舒服的一个因素。

请注意,尽管Lua可以使用风格指南,但它实际上是Python、C和C++风格指南的融合。

我在许多lua程序/模块中看到了两种常见的情况:函数名(如果不是定义为对象的方法)是在snake_case中定义的,如果定义为对象的方法,则使用CamelCase (两个C都大写)。另一个是,一般数据类型的变量(数字、字符串、函数、表、布尔)遵循匈牙利符号。

在您的菲兹巴斯中,在调用print函数时,您为buzz输出提供了额外的空间,而对于其他输出则没有这样的空间。保持一致:

代码语言:javascript
复制
if i % 15 == 0 then
  print(fizz..buzz)
elseif i % 3 == 0 then
  print(fizz)
elseif i % 5 == 0 then
  print(buzz)    -- remove whitespace
else
  print(i)
end

您还可以将fizz..buzz值存储在循环之外,以避免额外的计算。除此之外,一切看起来都很好。

票数 4
EN

Code Review用户

发布于 2016-09-27 01:46:03

虽然hjpotter92对程序员的要求是正确的,但我可以对您的代码进行改进:

代码语言:javascript
复制
local fizz = "Lua"
local buzz = "Yay"
--Keeping them out of scope means the function isn't redeclaring them each time it's run
function fizzBuzz(maxNum)
   for i = 1, maxNum do
      print(i%15==0 and fizz..buzz or i%5==0 and buzz or i%3==0 and fizz or i)
      --By using Lua's logical operators you can cut down on massive chunks of code like the if statements you had made
   end
end

fizzBuzz(100)
票数 1
EN

Code Review用户

发布于 2017-09-18 13:20:17

Lua逻辑运算符工作有一点独特,因此可以这样做:

代码语言:javascript
复制
function fizzbuzz(num)
  return
      num%15 == 0
      and 'fizzbuzz'
    or
      num%5 == 0
      and 'fizz'
    or
      num%3 == 0
      and 'buzz'
    or
      tostring(num)
end

for i = 1,100 do
  print(fizzbuzz(i))
end

注意,这实际上与前面的答案相同,只是格式不同。

我喜欢用这种风格来描述逻辑,它非常容易读懂。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/139078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档