Variables 在Elixir上输出一个简单的棋盘游戏,但变量不是递减的。如何解决这个问题?
我有一个名为main(row,col)的函数,它将取2个整数,分别放入row和col中。然后它将创建一个板的输出,因此main(2,3)将创建一个2×3板Variables 在Elixir上输出一个简单的棋盘游戏,但变量不是递减的。如何解决这个问题?,variables,for-loop,elixir,decrement,Variables,For Loop,Elixir,Decrement,我有一个名为main(row,col)的函数,它将取2个整数,分别放入row和col中。然后它将创建一个板的输出,因此main(2,3)将创建一个2×3板 spaces= row*col 在这种情况下,空格=6,每次创建一个单元格时应该减少1。然而,它并没有做到这一点。我运行此命令时的输出是 Main.main(2,3) +---+---+---+ | 6| 6| 6| | | | | +---+---+---+ | 6| 6| 6| | | | | +
spaces= row*col
在这种情况下,空格=6,每次创建一个单元格时应该减少1。然而,它并没有做到这一点。我运行此命令时的输出是
Main.main(2,3)
+---+---+---+
| 6| 6| 6|
| | | |
+---+---+---+
| 6| 6| 6|
| | | |
+---+---+---+
我需要它
Main.main(2,3)
+---+---+---+
| 6| 5| 4|
| | | |
+---+---+---+
| 3| 2| 1|
| | | |
+---+---+---+
这是我的密码:
defmodule Main do
def main(row,col) do
spaces = row*col
for i <- 0..(row-1) do
for j <- 0..(col-1) do
if j == 0 do
IO.write "+"
end
IO.write "---+"
end
IO.puts ""
columns = col
for columns <- 1..columns do
if columns == 1 do
IO.write "|"
end
if spaces < 10 do
IO.write " "
IO.write spaces
IO.write "|"
else if spaces < 100 do
IO.write " "
IO.write spaces
IO.write "|"
end
if spaces > 99 do
IO.write spaces
IO.write "|"
end
spaces = (spaces - 1)
end
end
IO.puts ""
columns = col
for columns <- 1..columns do
if columns == 1 do
IO.write "|"
end
IO.write" |"
end
IO.puts ""
if i == row-1 do
botside = col
for botside <- 1..col do
if botside == 1 do
IO.write "+"
end
IO.write "---+"
end
end
end
end
end
不会因为任何原因而减少。。谢谢您的时间和帮助。电话线
spaces = (spaces - 1)
被放在理解中并不能达到你的期望。它将新的局部变量空格
声明为最外层的空格
减一。这个局部变量空格,尽管它与最外层的变量同名,但在理解结束时会消失
整个代码都是非长生不老药的习惯用法,因此很难在这里提出任何优雅的解决方案。一般来说,在长生不老药中要避免状态
在这里,我们可以使用:
spaces = spaces + 1 - columns
线路
spaces = (spaces - 1)
被放在理解中并不能达到你的期望。它将新的局部变量空格
声明为最外层的空格
减一。这个局部变量空格,尽管它与最外层的变量同名,但在理解结束时会消失
整个代码都是非长生不老药的习惯用法,因此很难在这里提出任何优雅的解决方案。一般来说,在长生不老药中要避免状态
在这里,我们可以使用:
spaces = spaces + 1 - columns
正如@mudasobwa所指出的,很难告诉您如何解决这个问题,因为它与函数式编程中通常采用的方式完全相反
也就是说,这里有一个在Elixir中实现递减循环的示例:
defmodule Test do
def decrementing_loop(initval) do
IO.inspect initval
if (initval > 0) do
decrementing_loop(initval-1)
end
end
end
除非您可能希望将函数传递给递减循环,如下所示:
这样就可以称之为:
Test.decrementing_loop(10,&IO.inspect/1)
关键是我实际上并没有修改initval
,而是将当前initval-1
的新参数传递给函数的递归调用
综上所述,如果你真的想学习长生不老药,你最好投资一本好书,而不是通过问一系列的问题来啃一啃一啃 正如@mudasobwa所指出的,很难告诉您如何解决这个问题,因为它与函数式编程中通常采用的方式完全相反
也就是说,这里有一个在Elixir中实现递减循环的示例:
defmodule Test do
def decrementing_loop(initval) do
IO.inspect initval
if (initval > 0) do
decrementing_loop(initval-1)
end
end
end
除非您可能希望将函数传递给递减循环,如下所示:
这样就可以称之为:
Test.decrementing_loop(10,&IO.inspect/1)
关键是我实际上并没有修改initval
,而是将当前initval-1
的新参数传递给函数的递归调用
综上所述,如果你真的想学习长生不老药,你最好投资一本好书,而不是通过问一系列的问题来啃一啃一啃 以下是我首先创建列表的意思
rows=3
cols=2
top = rows*cols
labels = Enum.to_list top..1 # [6,5,4,3,2,1]
c = Enum.to_list 1..rows # [1,2,3]
c = List.duplicate c, cols # [[1,2,3],[1,2,3]]
c = List.flatten c # [1,2,3,1,2,3]
r = Enum.to_list 1..cols # [1,2]
r = List.duplicate r, rows #[[1,2],[1,2],[1,2]]
r = List.flatten r # [1,2,1,2,1,2]
list = List.zip( [r, c, labels] )
board = list |> Enum.each( fn {r,c,label} -> print_cell r,c, label, rows, cols end)
defp print_cell r,c, label, rows,cols do
# your conditional cases for each edge case here
end
下面是我首先创建列表的意思
rows=3
cols=2
top = rows*cols
labels = Enum.to_list top..1 # [6,5,4,3,2,1]
c = Enum.to_list 1..rows # [1,2,3]
c = List.duplicate c, cols # [[1,2,3],[1,2,3]]
c = List.flatten c # [1,2,3,1,2,3]
r = Enum.to_list 1..cols # [1,2]
r = List.duplicate r, rows #[[1,2],[1,2],[1,2]]
r = List.flatten r # [1,2,1,2,1,2]
list = List.zip( [r, c, labels] )
board = list |> Enum.each( fn {r,c,label} -> print_cell r,c, label, rows, cols end)
defp print_cell r,c, label, rows,cols do
# your conditional cases for each edge case here
end
你需要放弃对易变性的思考。Elixir是一种函数式语言,这意味着你不能做破坏性的赋值。gspaces=(spaces-1)
最好先创建列表,然后再对其进行操作。一个单元格标签列表;另一个用于行编号,另一个用于列。然后把它们拉在一起。然后使用Elixir优秀列表、枚举或流模块来创建您喜欢的板。您需要放弃对可变性的思考。Elixir是一种函数式语言,这意味着你不能做破坏性的赋值。gspaces=(spaces-1)
最好先创建列表,然后再对其进行操作。一个单元格标签列表;另一个用于行编号,另一个用于列。然后把它们拉在一起。然后使用Elixir优秀列表、枚举或流模块来创建您喜欢的板。这是一个完美的理解用例:)r=for@mudasobwa:true——这是关于它对您的可读性的,谢谢您的帮助。现在是时候看看Enum教程了,因为每个人都在不断地提到它,而我不知道它是什么。这是一个完美的理解用例:)r=for@mudasobwa:true——这是关于它对你、你自己以及你的帮助的可读性。现在是时候看看Enum教程了,因为每个人都在不断地提到它,而我不知道它是什么。不过似乎很有用。