【转】Seraph 从零开始学编程 第二节 条件判断

来源:互联网   编辑:思良  发表时间:2015-07-13  关注度:1164  

 第二节 条件判断

1.条件判断语句的格式
首先说下几个单词的意思,IF是"如果"的意思 THEN 是"那么"的意思,ELSEIF是"否则如果"
ELSE是"否则", END IF 是判断语句的结束标志
具体的格式如下 
IF <表达式> THEN          
...
[ELSEIF <表达式> THEN] 
...
[ELSE]
...
END IF

其中用 [ ] 括起来的是可选择项,就是可用可不用,用现在的话讲,他不是必须的
下面重点说下什么是"表达式"
1.1   表达式的意义
表达式是将同类型的数据(如常量、变量、函数等),用运算符号按一定的规则连接起来的、有意义的式子称为表达式。
例如:算术表达式、逻辑表达式、字符表达式等。 运算是对数据进行加工处理的过程,
   得到运算结果的数学公式或其它式子统称为表达式。表达式可以是常量也可以是变量或算式,
   在表达式中又可分为:算术表达式、逻辑表达式和字符串表达式
1.2 表达式的分类
1.2.1 算术表达式
算术表达式是最常用的表达式,又称为数值表达式。它是通过算术运算符来进行运算的数学公式。
例子 6*7=42 
    32+2=34
    48-21=27
    2.76/1.2=2.3
    25 mod 4=1     #25除以4的余数是1
1.2.2 逻辑表达式
逻辑运算的结果只有两个:True(真)和False(假)
在IF <表达式> THEN   这里的"表达式" 我们也可以理解为这个表达式的逻辑运算结果成立(True,真)或者不成立(False,假)
我们来看例子
1=1 
对了1当然等于1,那么这个表达式就是成立(True,真)
那 1=2 很显然这个等式不成立(False,假)
我们用SP的print()来看下结果

function main
print(1=1)
print(1=2)
end function

运行一下看看,是不是有
true
false
2个结果,这就是表达式的成立和不成立

回到主题,逻辑运算不是只有=(等于),还有
<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<>(不等于),NOT(非)、AND(与)、OR(或)
我们再看例子

function main
print(1>1)
print(1<2)
end function
很明显2个结果
false
true
当然数值可以进行判断,字符也是可以的,大家可以自己看下结果,多用几个字符来看看
1.2.3 字符表达式
function main
print("我">"你")
       print("a">"b")
end function
看这样的结果是什么

1.2.4 表达式的运算优先顺序
看SP帮助里面的   语法->运算符
这个表没有什么好说的,就是死记硬背,和加减乘除的道理是一样.

括号 → 函数 → 乘方 → 乘、除 → 加、减 → 字符连接运算符 → 关系运算符 → 逻辑运算符


2 表达式明白了,就可以看语句了
IF <表达式> THEN     #这句的意思就是:如果表达式成立那么就执行下面的语句
......             #这里就是我们需要执行的语句了
END IF             #IF 的结束标志
例子
dim a
function main
a=10             #让A=10
if a>0 then        #判断A是否大于0
print(a) #a>0 的表达式成立,则输出a 的数值
end if          #判断结束
end function

下面我们看下 [ELSEIF <表达式> THEN]
我们举例说明一下
dim a,b
function main
a=1
b=2
if a>b then        #判断a是否大于b
print(a) #a>b成立则输出a 的数值
elseif a<b then #如果a>b不成立,则运行elseif 语句
print(b) #a<b成立则输出b 的数值
end if
end function
上面的例子说明了,当if 后面的判断表达式在不成立的情况才运行elseif 后面的判断,如果成立
就运行下面的语句,那如果不成立就退出判断语句了

我们再看一下,上面的例子也可以写成这样
dim a,b
function main
a=1
b=2
if a>b then
print(a)
else              #这里else后面的语句是在if 后面的表达式不成立的情况下才运行
                         #他后面的语句是否运行,就取决与if 后面的表达式是否成立,不成立才能运行
print(b)
end if
end function
这2个例子的结果是一样的,用来判断a,b的大小,输出最大的数
这个就是 [ELSE] 的用途
而[ELSE]和[ELSEIF]的区别在于
[ELSE]是对IF判断不成立时需要运行语句时用的
而[ELSEIF]是在IF判断不成立时另行做判断用的
例:判断3个数的大小,然后从大到小输出
dim a,b,c
function main
a=1
b=2
c=3
if a>b then
if a<c then
print(c & "," & a & "," & b )
elseif b>c then
print(a & "," & b & "," & c )
else
print(a & "," & c & "," & b )
end if
elseif a>c then
print(b & "," & a & "," & c )
elseif b>c then 
print(b & "," & c & "," & a )
else
print(c & "," & b & "," & a )
end if 
end function
上面的输出结果就是
3,2,1
有些人看不懂了,没关系,拿出纸和笔来按照程序一步一步的走,多写多看就能懂了!

如果用来判断未知数呢,这里将用到几个函数
Randomize()   #重置随机数。用于生成新的随机数序列,他的作用就是配合下面rnd()函数的,让rnd()每次的随即数都不一样
rnd()        #函数返回一个小于 1 但大于或等于 0 的随机数
int()        #取整函数 int(1.1)=1 ,int(1.5)=1, int(99.9)=99,取整函数只把小数部分去掉而不进行四舍五入
这样我们就随即生成3个数,来看看效果了
dim a,b,c
function main
Randomize()
a=int(rnd()*100)          #随即生成100以内的整数并赋值给变量a
b=int(rnd()*100)          #随即生成100以内的整数并赋值给变量b
c=int(rnd()*100)          #随即生成100以内的整数并赋值给变量c
print(a & "," & b & "," & c )
if a>b then
if a<c then
print(c & "," & a & "," & b )
elseif b>c then
print(a & "," & b & "," & c )
else
print(a & "," & c & "," & b )
end if
elseif a>c then
print(b & "," & a & "," & c )
elseif b>c then 
print(b & "," & c & "," & a )
else
print(c & "," & b & "," & a )
end if 
end function
我的结果是这样
32,74,13
74,32,13
大家自己运行一下看看,主要是仔细看下IF语句里面的逻辑和else,elseif的用法
当然有的朋友会说你这么写很是复杂.是很复杂,我这里主要讲的是IF语句的逻辑性和else,elseif的用法
如果还是上面的题目,我们可以这样写,这样可以简单明了一些
dim a,b,c,d
function main
Randomize()
a=int(rnd()*100)
b=int(rnd()*100)
c=int(rnd()*100)
if a<b then          #如果a<b 那么a,b的数值对换
d=a
a=b
b=d
end if
if a<c then          #如果a<c 那么a,c的数值对换
d=c
c=a
a=d
end if
if b<c then          #如果b<c 那么b,c的数值对换
d=c
c=b
b=d
end if

print(a & "," & b & "," & c )
end function
我们通过置换的方法来达到目的,这样始终保持a,b,c的输出结果为 大,中,小
再来说下IF的嵌套

function main
if a=1 then                         <1>
   | if b=1 then                    <2> 
   |    | if c=1 then          <3>
   |    |     | print("abc")
   |    | end if                 <3>
   | end if                      <2>
end if                                   <1>
end function
end if的个数要和if的个数一致,而end if结束的是他所对应的if语句
象上面的例子,<3>end if所结束的是<3>的if 而不是结束 <1>或<2>的if语句
这个和我将要在后面讲到了循环嵌套也是一样的,不能交叉结束,这一点要记清楚.

下面说下这个,看例子

dim a,b
function main
a=true
b=10
if a then           #这里大家要问了,怎么if 后面就一个变量 a 啊,这是怎么回事
print(b)
end if 
end function
这个a就是我们上节课说的布尔变量
上面一行 a=true 就个给变量a赋值为true,意思就是"真"的意思
那么到了IF 后面,a所代表的就是一个表达式,那这条IF语句会对a进行判断,a的值为True(真),也就是成立
那么他就执行了Then后面的语句了
那有人会问了,我怎么这么写不可以吗?
dim a,b
function main
a=100
b=10
if a=100 then          
print(b)
end if 
end function
可以,但我要说的是
用 if a then 要比 if a=100 then 的运算速度快
如果在大的循环体中,这个判断就决定你的脚本的运行速度了
我给出一个程序,大家在自己的机器上测试一下就知道速度的差距了
dim a,b,c,d=0
function main
b=gettime()
a=100                                        #第二次测试把 100换成 true
for c=1 to 10
for i=1 to 100
for j=1 to 100
for k=1 to 100
if a=100 then    #第二次测试把 a=100 换成 a
end if
next
next
next
print(gettime()-b)
d=d+gettime()-b
wait(500)
b=gettime()
next
print("平均:"& int(d/10) & "毫秒")
end function
看看2次的输出结果的差距,是不是很大~!
那有朋友就问了,怎么避免呢?

那我们只有在必须的情况下才这么写,如果没有必要,那我们完全可以转化一下
还是用上面的程序
在 a=100 的下面一行加入一个判断

if a=100 then
a=true
else
a=false
end if

加入上面代码后把 if a=100 then 换成 if a then 就可以了


********************************************
if a=100 then
a=true
else
a=false
end if
这5行程序可以换成一行来节省代码,程序如下:

a=(a=100)
********************************************

好了,这一节就讲这么多,上面的例子就是下节课的课程--循环

    支付宝扫码领红包,不用多说,用过的人都知道,双赢的,你得红包,我得到同等推广红包,比如你扫到1元,我也得1元,大家得到的红包可以去实体店消费!新用户至少10元以上哦,每天都有!希望大家每天来本站扫码!感谢感谢!

    把打赏改成扫码红包了!支持本站就扫码下!


下一篇:【转】Seraph 从零开始学编程 第一节 变量


上一篇:【转】Seraph 从零开始学编程 第三节 循环(一)


小提示:按 回车[Enter]键 返回,按 ←键 返回上一页, 按 →键 进入下一页。

网友评论(0条评论)

选择头像
     

新闻评论(共有 0 条评论)

手机访问

本站APP

联系我

加我微信