如何在Julia中发生异常后继续从readline(STDIN)获取输入?
我试图通过编写经典的猜数字游戏来学习Julia:如何在Julia中发生异常后继续从readline(STDIN)获取输入?,julia,Julia,我试图通过编写经典的猜数字游戏来学习Julia: function main() secret_number = rand(1:10) println("Guess my number! ") guess_number = try int(chomp(readline(STDIN))) catch ex println("Invalid number. Please enter a number:") #
function main()
secret_number = rand(1:10)
println("Guess my number! ")
guess_number =
try
int(chomp(readline(STDIN)))
catch ex
println("Invalid number. Please enter a number:")
# how to continue here?
int(chomp(readline(STDIN)))
end
while(guess_number != secret_number)
validate(guess_number, secret_number)
guess_number = int(chomp(readline(STDIN)))
end
println("You win!")
end
function validate(g_num,s_num)
if g_num < s_num
println("Too small!")
elseif g_num > s_num
println("Too big!")
else
println("Equal")
end
end
函数main()
秘密号码=兰特(1:10)
println(“猜猜我的号码!”)
猜猜你的号码=
尝试
int(chomp(readline(STDIN)))
缉捕犯
println(“无效数字。请输入一个数字:”)
#如何在这里继续?
int(chomp(readline(STDIN)))
结束
while(猜测号码!=秘密号码)
验证(猜测号码、秘密号码)
猜数=int(chomp(readline(STDIN)))
结束
println(“你赢了!”)
结束
函数验证(g_num,s_num)
如果g_nums_num
println(“太大了!”)
其他的
println(“相等”)
结束
结束
此程序只能处理一次输入异常(即,如果用户输入不是数字)。用户第二次输入无效数字时,程序停止。如何在Julia中解析
int
?验证循环中的第二个循环,以验证guess\u number
实际上是一个数字,可以解决此问题,例如:
function main()
secret_number = rand(1:10)
println("Guess my number! ")
guess_number = 0
while(guess_number != secret_number)
valid = false
response = ""
while (!valid)
guess_number =
try
valid = true
response = chomp(readline(STDIN))
int(response)
catch ex
if (response == "q")
return
end
println("Invalid number. Please enter a number:")
valid = false
end
end
validate(guess_number, secret_number)
end
println("You win!")
end
function validate(g_num,s_num)
if g_num < s_num
println("Too small!")
elseif g_num > s_num
println("Too big!")
else
println("Equal")
end
end
main()
函数main()
秘密号码=兰特(1:10)
println(“猜猜我的号码!”)
猜一猜数字=0
while(猜测号码!=秘密号码)
有效=错误
response=“”
while(!valid)
猜猜你的号码=
尝试
有效=真
响应=chomp(读线(标准输入))
内部助理(回应)
缉捕犯
如果(响应=“q”)
返回
结束
println(“无效数字。请输入一个数字:”)
有效=错误
结束
结束
验证(猜测号码、秘密号码)
结束
println(“你赢了!”)
结束
函数验证(g_num,s_num)
如果g_nums_num
println(“太大了!”)
其他的
println(“相等”)
结束
结束
main()
这种方法也应用了这一原理,只获取原始代码中一行而不是两行的输入
(编辑)
根据评论中的要求,我还提供了一种退出
main()
函数的方法,在要求输入数字时输入“q” 非常感谢您的解释,特别是DRY
原理的应用。while(!valid)
在这里真的很耀眼!我想你必须高度重视编程和生活中最好的方法。我可以问一下你最喜欢的编程书是什么吗?有没有办法不退出julia repl而退出猜谜游戏Ctrl-d
,Ctrl-c,Ctrl-c
在猜数字时不起作用。很高兴提供帮助。我对答案进行了编辑,提出了一种方法,可以在不退出Julia REPL的情况下退出main()
函数。为书籍提出建议超出了堆栈溢出(基于观点)的范围,但我个人的观点是Hunt和Thomas的“务实程序员”是DRY原则的一个很好的来源(这是一个比不重复代码行更深的概念)。Kernighan和Pike的“编程实践”也很出色。正如所料,q
退出了该程序。我在网上搜索,发现ctrl-c
应该退出程序执行,但它不起作用,人们对此抱怨很多。我想在以后的版本中,Julia将能够通过ctrl-c
处理中断。感谢您的q
选项-它解决了问题。你提到的那些书很有名气,我已经把它列入了我的阅读清单。再次感谢。你打了几个错字,我帮你改正了。@BrianTompsett谢谢你。下次我会注意打字的。