HAI 1.2
HOW IZ I GetNum
VISIBLE "Entr yr numbr: "
I HAS A WatzNum
GIMMEH WatzNum
FOUND YR WatzNum
IF U SAY SO
HOW IZ I ProovFibo YR Num
I HAS A Fibo1 ITZ 1
I HAS A Fibo2 ITZ 2
IM IN YR Nums
BOTH SAEM Num AN Fibo1, O RLY?
YA RLY
VISIBLE "YEAH, FIBONACCI NUM!"
GTFO
NO WAI
OIC
BOTH SAEM Num AN Fibo2, O RLY?
YA RLY
VISIBLE "YEAH, FIBONACCI NUM!"
GTFO
NO WAI
OIC
BOTH SAEM Fibo2 AN BIGGR OF Num AN Fibo2
O RLY?
YA RLY
DIFFRINT Num AN Fibo1, O RLY?
YA RLY
DIFFRINT Num AN Fibo2, O RLY?
YA RLY
VISIBLE "BOO, IZ NO FIBONACCI NUM!"
GTFO
NO WAI
OIC
GTFO
NO WAI
OIC
NO WAI
OIC
Fibo1 R SUM OF Fibo1 AN Fibo2
Fibo2 R SUM OF Fibo1 AN Fibo2
IM OUTTA YR Nums
IF U SAY SO
I HAS A Num
I HAS A MaxNum ITZ 50
Num R I IZ GetNum MKAY
Num IS NOW A NUMBR
I IZ ProovFibo YR Num MKAY
KTHXBYE
#1 楼
BOTH SAEM Fibo2 AN BIGGR OF Num AN Fibo2
O RLY?
YA RLY
DIFFRINT Num AN Fibo1, O RLY?
YA RLY
DIFFRINT Num AN Fibo2, O RLY?
YA RLY
VISIBLE "BOO, IZ NO FIBONACCI NUM!"
GTFO
NO WAI
OIC
GTFO
NO WAI
OIC
NO WAI
OIC
等于此伪代码
if (Fibo2 >= max(Num, Fibo2))
{
then
if (Num != Fibo1) {
then
if (Num != Fibo2) {
then
print "BOO, IZ NO FIBONACCI NUM!"
break
else
}
break
else
}
else
}
基本上,您所做的内容有些奇怪。
让我们清理一下。好吧,我们不需要双重休息。
Fibo1 == Num
和Fibo2 == Num
以确定它是否是斐波那契数)。删除不需要的检查。if (Fibo2 >= max(Num, Fibo2))//weird check, replace with Fibo2 > Num instead
{
then
if (Num != Fibo1) {
then
if (Num != Fibo2) {
then
print "BOO, IZ NO FIBONACCI NUM!"
break
else//remove useless else
}
break
else//remove useless else
}
else//remove useless else
}
并转换回LOLCODE。 !
缩进
我还是不喜欢缩进。一条if语句需要三行?
将它们组合起来:
if (Fibo2 > Num) {
then
if (Num != Fibo1) {
then
if (Num != Fibo2) {
then
print "BOO, IZ NO FIBONACCI NUM!"
break
}
break
}
}
这是我要做的最少的事情。甚至更短一些:
if (Fibo2 > Num) {
then
if (Num != Fibo1) {
then
if (Num != Fibo2) {
then
print "BOO, IZ NO FIBONACCI NUM!"
}
break
}
}
但是基本上我们又有了大括号样式的参数;
LOLCODE内部工作方式
我将自己弄糊涂了几次。
例如,您进行了一次
BOTH SAEM Fibo2 AN BIGGR OF Num AN Fibo2
检查,但这就是规范所说的内容:那么,您要使用的版本是什么呢?好,如果我们将它分成两个语句...
你需要。它基本上检查“ Fibo2和Num中的较小者”是否是“ Fibo2”。
#2 楼
关注点分离我喜欢提取
ProovFibo
...,但是我发现它做的太多了:我本来希望有一个返回布尔值的函数(Troof
),但没有执行其他操作。该信息全部用于自身,并负责还输出结果。可读性/命名
您正在声明一个
Num
变量,并且ProovFibo
过程使用一个Num
参数...命名为Nums
-当然,命名循环(AFAIK)非常依赖LOLCODE,而且很难,但是我更希望看到它命名为Sequence
或其他名称。将参数名称复数只是感觉不对,而global-scope参数的名称与local-scope参数相同会使它有些混乱。不是
UPPIN YR {variable}
的LOLCODE循环是本质上是一个while循环...但是您应该只循环到某个MaxNum
,对吗? ...但是从未使用过MaxNum
!前两个条件(
Num
vs. Fibo1
和vs. Fibo2
)似乎可以合并为一个条件。从未验证-用户输入LOL
会发生什么?还是-200
?该脚本愉快地将输入转换为数字-您完全将其留给语言实现来确定会发生什么……这不是很漂亮:程序仅因转换错误而崩溃。评论
\ $ \ begingroup \ $
该参数必须绝对称为MebbeFibo或类似名称
\ $ \ endgroup \ $
– Ben Voigt
2015年2月2日在3:30
\ $ \ begingroup \ $
糟糕,当我将MaxNum限制为小于50的值并手动检查时,该值是从后退的。永远不会使用该值。
\ $ \ endgroup \ $
–user34073
2015年2月2日,下午4:30
评论
只有在这里我们才认真对待LOLCODE ...最好的LOLCODE
@RubberDuck PPCG也是。 :P
@Riker * CGCC现在