例1:price_tax = 1.05 * price
例1是对输入的价格(price)计算含税(price_tax)售价的程式。 但税率并不是万年不变,当政府调整税率时,会有修改程式的必要。 这里“1.05”就是一种魔术数字,“为什么是1.05”会让人无法马上了解。
下面是去掉魔术数字的范例,程式容易了解也容易修正。
例1 (修正):TAX = 0.05 price_tax = (1.0 + TAX) * price
例2:setColor(text, 0xffffff)
例2是设定以白色显示程式码。 然而十六进制的色码0xffffff很难直觉看懂是“白色”,故也算是一种魔术数字。
下面是一种拿掉魔术数字的方式。
例2 (修正):white = 0xffffff setColor(text, white)
像这样,将魔术数字置换成常数或列举型别是经常用来解决魔术数字问题的手段。由于常数可以赋予易懂的名称,可使帮助阅读者了解数值的意义。
当然,在程式初始化部分定义的常数列表不称为魔术数字。
第一个魔术——“神奇计算器”。首先让你的朋友在一台计算器上随便输一个3位数2遍,如:321321。这时你会得到一个六位数。告诉你的朋友,用7去除一个数时,能够除整的机会只有7分之一,然后让他去试一下用这个6位数去除7,有余数吗?木有余数。不要以为只是靠运气,来,再让他用刚才得到的数字除11,咋样,有余数吗?还是木有。最后再用得到的数除13,还是木有余数。再来看看剩下的数字,是一开始输的那个3位数,如:321321就是321. 第二个魔术——“神奇的1089”。首先找到一本书的第十页第八行第九个字。将它写在纸上,把纸放在信封里,然后把它放在桌子上。现在开始变魔术。让你的朋友随便想一个首尾不同的3位数,然后将这个数字反过来,用大的减去小的。如:321—123=198.再将得到的数字反过来后与原数字相加,如:198+891=1098。现在让你的朋友用所得的数字的前两位作为书的页数,第三位作为行数,最后一位作为字数从你一开始找的书里找到一个字,让他把这个字读出来。最后让他打开信封,他会惊奇发现,他读的字就是纸上写的字!
第三个魔术——“获胜的6”。这是一个能让你永远获胜的游戏。游戏规则是:让你的朋友在1~5中随便选一个数字,接着你也从中挑一个,把两个数相加。你们两个继续轮流在1~5中挑数字并不断加在结果上,谁先加到50谁就获胜。现在我告诉你怎样才能保持不败首先,你每次必须让你的朋友先挑数字。然后当第一次轮到你时,你选的数字应该使你们两所选数字之和等于2 or 8 。也就是说,如果你的朋友以3开始,你就选5(两数之和为8)。到二轮时不论他选什么,你都要挑能使你们第一轮所选数字之和增加6的数。以此类推,接下来你选的数都要保证你和你的朋友所选的两个数之和为6,也就是能使相加结果增加6数。这样你们所选的数字的和应为:2,8,14,20,26,32,38,44。用这种方法,你肯定先加到50
第四个魔术——“魔法配对”。在这魔术里,你可以让一个观众来洗一副扑克牌,而洗完后这些牌都奇迹般地排成了一对一对的(一红一黑为一对)。首先你要偷偷做一些准备,将扑克牌排列成一对一对的。现在你可以开始了。让一位观众切牌,然后做一次“d洗”——用大拇指将两垛牌洗在一起。无论他洗得多烂都无所谓,然后你将牌收回并简要地向观众展示一下——他们只会无目的看看。现在告诉观众你将扑克牌的“魔法点”切牌。找到颜色相同的两张牌,将牌从这两张中间分开,把下面的部分放到上面来。现在魔法显灵了将牌成对的发给观众并让他们把牌反过来,他们会发现每一对都由红黑两张牌组成。
最后一个魔术——“猜生日”首先给你的朋友一台计算器,让他输入他出生的月份,然后对这个数字做以下步骤:
· 乘以4
· 加上13
· 乘以25
· 减去200
· 生日是那个月的几号就加上几
· 乘以2
· 减去40
· 乘以50
· 上出生年份的后两位
· 减去10500
看一看计算器然后告诉他他的生日。计算结果的前两一位 or 两位代表月份,接下来的两位代表几号,最后两位表示年份。
这些令人难以置信的小魔术会让的朋友和家人大吃一惊
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)