如何在 Lua 编程中打印星号和井号图案,使得每四个星号后面都有一个井号

图案应该是这样的:

****#****#****
****#****#****

我尝试了这种方式:

-- 生成打印星号(*)和井号(#)图案的函数unction generatePattern()
    --n = tonumber(io.read())
    for i=14, 1, -1 do
        for j=1, i, 1 do
            io.write("*")
            if (i==5) then
                char = "*"
                newchar=char.gsub(string,"#")
                print("#")
            end
        end
        print("  ")
    end
end

-- 读取测试用例输入
tc = tonumber(io.read())

-- 对于每个用例,调用 generatePattern 函数打印图案
for i=1,1 do
    generatePattern()
end
点赞
用户2858170
用户2858170

让我们看看你的代码做了什么:

-- 定义一个函数 generatePattern
function generatePattern()

    -- 循环14次,每次减少 i = 14
    for i=14, 1 ,-1 do
        -- 循环i次
        for j=1, i, 1 do
            -- 输出星号
            io.write("*")
            -- 如果 i == 5 (这只会发生一次!)
            if (i==5) then
                -- 创建一个名为char的全局变量,存储字符串"*"
                char = "*"
                -- 使用字符串库的表作为字面量字符串引起lua错误
-- 看起来你试图用井号替换一些东西
                newchar=char.gsub(string,"#")
                -- 打印一个井号
                print("#")
            end
        end
        print("  ")
    end
end

-- 读取一个未使用的值
tc = tonumber(io.read())

-- 在循环中调用你的函数
for i=1,1 do
    generatePattern()
end

我不知道你是怎么想出这个逻辑的。请用纸笔写下需要做什么才能实现你的目标。

你肯定不想打印14个星号,然后13个星号,一直到你打印单个井号的5个星号。这是完全无意义的(无意冒犯!)

那么我们需要做什么呢?我们想要打印"****#****#****"(四个星号、一个井号、四个星号、一个井号、四个星号)

显然的方式是 print("****#****#****")

只有当有参数可以改变这个字符串时,创建生成此字符串的函数才有意义。比如说井号的数量,这样你可以轻松打印 "****#****""****#****#****#****" 等等。

那么为什么不直接采用井号数量作为输入呢。

function generatePattern(numHashes)
  numHashes = numHashes or 0
  local output = ""
  local numCharacters = numHashes + 4 + numHashes * 4
  for i = 1, numCharacters do
    -- 如果 i 是5的倍数,则添加#,否则添加*
    output = output .. (i % 5 == 0 and "#" or "*")
  end
  return output
end

-- 测试
for i = 0, 5 do
  print(generatePattern(i))
end

输出:

****
****#****
****#****#****
****#****#****#****
****#****#****#****#****
****#****#****#****#****#****

如果您还希望可以调整星号的数量,则可以这样做:

function generatePattern(numHashes, numAsterisks)
  numHashes = numHashes or 0
  numAsterisks = numAsterisks or 4
  local output = ""

  local numCharacters = numHashes + numAsterisks + numHashes * numAsterisks
  for i = 1, numCharacters do
    output = output .. (i % (numAsterisks + 1) == 0 and "#" or "*")
  end
  return output
end

-- 测试
for i = 1, 5 do
  print(generatePattern(i, 6))
end
2020-10-14 07:56:57