+ -
当前位置:首页 → 问答吧 → 程式写法一问

程式写法一问

时间:2014-04-30

来源:互联网

点解Excel/VBA/VB程式唔可以咁写?
if 10>=a>=0 then...
而要咁写
if a<=10 and a>=0 then...

作者: alee001   发布时间: 2014-04-30

因为每个Comparison operator都会返回一个bool type

10 >= a >= 0

当a = 5会变成
((10 >= 5) >= 0) 10大过5...变成TRUE
(TRUE >= 0) TRUE会替代成1...所以大过0
TRUE

而当a = -1会变成
((10 >= -1) >= 0) 10大过-1...变成TRUE
(TRUE >= 0) TRUE会替代成1...所以大过0
TRUE

作者: Susan﹏汪汪   发布时间: 2014-04-30

啊...明白了,但如果程式另写成咁
if a>=10>=b then...
又得唔得?

作者: alee001   发布时间: 2014-04-30

引用:原帖由 alee001 於 2014-4-19 02:48 PM 发表
啊...明白了,但如果程式另写成咁
if a>=10>=b then...
又得唔得?
唔得..
只可以咁.
if a>=10 and 10>=b then..

作者: McLoneIII   发布时间: 2014-04-30

我就系问点解唔得原因?

作者: alee001   发布时间: 2014-04-30

引用:原帖由 alee001 於 2014-4-19 03:50 PM 发表
我就系问点解唔得原因?
关乎programming language syntax同compiler既设计。
即系设计VB既人员,佢地要设计一套程式文法,
而呢个programming language syntax唔容许一个variable同时间比较两件事 (10<a<20),
或两个variable同时间比较两件事 (b<10<a)。
只可能一次比较一件事 (b<10 and 10<a)。

作者: McLoneIII   发布时间: 2014-04-30

if a>=10>=b then
当电脑parsing 时候汪,汪讲得好清楚,有先后序而变成
if ((a>=10)>=b) then
分开一步一步咁睇
a>=10 # 你expect 佢return bool which is true /false, 之后代入去, let say true
True >=b #bool vs int

问题就系bool vs int
有D language得(c++),有d唔得(java), c++ 既true系等於1, java冇呢回事, 你自己check下VB

我反而理解下你既logic, 点解你咁想用a>b>c之类既野?

作者: IamG33k   发布时间: 2014-04-30

听闻python语言可以,但碍於唔熟悉python, 无可核究。

作者: me888   发布时间: 2014-04-30

作者: me888   发布时间: 2014-04-30

我唔明点解程式唔可做到同一条件下同时比较两个变数输出?有时遇到一啲好似统计分配嘅时候只好用EXCEL内Frequency去表达,如果用程式就要好多组a(t)<x and a(t)>y...程序写好长?

作者: alee001   发布时间: 2014-04-30

引用:原帖由 me888 於 2014-4-19 04:34 PM 发表
听闻python语言可以,但碍於唔熟悉python, 无可核究。

vb.net allow
复制内容到剪贴板代码: i = 10
... (True < i < 10)
always True
vb.net allow converting bool to unsigned integer,
the above code can be reversed in C#( but it allows bool to uint convertion)
复制内容到剪贴板代码: (-((uint) (-1 < i) > 0U ? 1 : 0) < 10)
but 1 < i < 10 in python is so called pythonic way of expressing 1 < i and i < 10

[ 本帖最后由 form5 於 2014-4-20 01:52 AM 编辑 ]

作者: form5   发布时间: 2014-04-30

引用:原帖由 alee001 於 2014-4-19 10:05 PM 发表
我唔明点解程式唔可做到同一条件下同时比较两个变数输出?有时遇到一啲好似统计分配嘅时候只好用EXCEL内Frequency去表达,如果用程式就要好多组a(t)y...程序写好长?
for loop

作者: 烟民比食屎9更贱   发布时间: 2014-04-30

引用:原帖由 alee001 於 2014-4-19 10:05 PM 发表
我唔明点解程式唔可做到同一条件下同时比较两个变数输出?有时遇到一啲好似统计分配嘅时候只好用EXCEL内Frequency去表达,如果用程式就要好多组a(t)y...程序写好长?
你第1条问题,呢样野就系关於compiler入边parsing既问题,
sorry 我唔可能3言两语讲到你明,我亦唔敢教,
系CS其中必修科会教,我唔系教授,我唔想教错你...你可能wiki 下我比你既hash tag

总之电脑系由左至右上至下咁读你写既code,而你咁写就系面对紧bool vs integer 既问题,系oo或者functional lang (excel) 既世界系唔可以用苹果同橙黎做比较
上面有C兄都比左example, python 会读到a<i<b 而佢一样系parse 为 (a<i) and (i<b) 变成bool and bool, 橙vs 橙

excel(vb)我唔太熟, 不过楼上c兄答得好好,当你有好多组野做同样既野,你可以考虑用loop 或者recursive
或者你不如分开column 黎计

#compiler #automata theory #parser #code generator #for loop #while loop #pattern matching #c++ case switch #recursive

作者: IamG33k   发布时间: 2014-04-30