用javaScript与python分别实现简单的计算器。 - Angel's Blog.

ing
 
 
软件开发,程序设计,前端设计
 
 
首页 > code, share > 用javaScript与python分别实现简单的计算器。

用javaScript与python分别实现简单的计算器。

 

用javascript实现的计算器的思路:

属性:记录对象的当前状态(是否是新的操作数)。

方法(操作):改变或者查看对象的当前状态。

也就是说 ,操作可以将对象从一个状态改变到另一个状态。

好了,下面我把javascript实现计算器的code 贴出来。

方案1):

<script type="text/javascript">
	var totals = 0;//totals,累计输入;
	var newTag = true;//判断输入的是否是新的操作数;
	var opp = '';//之前的运算符(OPerationPrevious);
	var status = 1;

	//写一个带参的Get()方法,通过Get()获取元素的Id;
	function Get(Id)
	{
		return document.getElementById(Id);
	}

	//C键,设置txtNumber中的值为0;
	function clearCals()
	{
		totals = 0;
		Get('txtNumber').value = 0;
		status = 1;
	}

	//单击数字按钮的时候,调用getNumber()方法;
	function getNumber(num)
	{
		status = 2;
		if (newTag)//判断输入的是否是新的操作数;
		{
			Get('txtNumber').value = num;//将num 显示到txtNumber上;
			newTag = false;//设置newTag状态为false;
		}
		else
		{
			//否则,newTag不是新的操作数字,进入this branch(两种情况);
			if (Get('txtNumber').value == 0)//如果当前没有输入操作数。
			{
				Get('txtNumber').value = num;
			}
			else
			{
				Get('txtNumber').value += num;//记录输入的操作数,累加拼接”输入的数字;
			}
		}
	}
	//单击运算符按钮的时候,调用operation()方法,参数“op”为运算符;
	function operation (op)
	{
		var num1 = Get('txtNumber').value;
		//使用运算符,将之前在txtNumber上的value赋值给num1。
		newTag = true;//设置输入的为新的操作数;

		if (status == 2)//True;
		{
			if ('+' == opp)
			{
				totals += parseFloat(num1);
			}
			else if ('-' == opp)
			{
				totals -= parseFloat(num1);
			}
			else if ('*' == opp)
			{
				totals *= parseFloat(num1);
			}
			else if ('/' == opp)
			{
				totals /= parseFloat(num1);
			}
			else
			{
				totals = parseFloat(num1);
			}
		}
		Get('txtNumber').value = totals;
		opp = op;//将当前输入的运算符赋给之前的运算符。
		status = 3;
	}
</script>

也可以这样想:

⑴:上课的时候,你只能认真的听课,但是不能去做和上课无关的事情,

譬如:“吃东西、交头接耳、喧哗”等;

⑵:下课的时候,你可以去做学习以外的任何事情。

额,,这个javascript的计算器的实现,有点类似于面向过程的味道,哈哈。。。

方案2):

 

<script type="text/javascript">
var totals = 0;//totals,累计输入;
var newTag = true;//判断输入的是否是新的操作数;
var opp = '';//之前的运算符(OPerationPrevious);
var status = 1;
//写一个带参的Get()方法,通过Get()获取元素的Id;
function Get(Id)
{
	return document.getElementById(Id);
}
//C键,设置txtNumber中的值为0;
function clearCals()
{
	totals = 0; Get('txtNumber').value = 0; status = 1;
}

//单击数字按钮的时候,调用getNumber()方法;
function getNumber(num)
{
	status = 2;
	if (newTag)//判断输入的是否是新的操作数;
	{
		Get('txtNumber').value = num;//将num 显示到txtNumber上;
		newTag = false;//设置newTag状态为false;
	}
	else
	{
		//否则,newTag不是新的操作数字,进入this branch(两种情况);
		if (Get('txtNumber').value == 0)//如果当前没有输入操作数。
		{
			Get('txtNumber').value = num;
		}
		else
		{
			Get('txtNumber').value += num;//记录输入的操作数,“累加拼接”输入的数字;
		}
	}
}

//单击运算符按钮的时候,调用operation()方法,参数“op”为运算符;
function operation (op)
{
	var num1 = Get('txtNumber').value;//使用运算符,将之前在txtNumber上的value赋值给num1。
	newTag = true;//设置输入的为新的操作数;
	if (status == 2)//True;
	{
		if ('+' == opp)
		{
			totals += parseFloat(num1);
		}
		else if ('-' == opp)
		{
			totals -= parseFloat(num1);
		}
		else if ('*' == opp)
		{
			totals *= parseFloat(num1);
		}
		else if ('/' == opp)
		{
			totals /= parseFloat(num1);
		}
		else
		{
			totals = parseFloat(num1);
		}
	}
	Get('txtNumber').value = totals;
	opp = op;//将当前输入的运算符赋给之前的运算符。
	status = 3;
} </script>

 

 

 

<script type="text/javascript">
	var totals = 0;
	var num = null;
	var opp = "";

	function Get(Id)
	{
		return document.getElementById(Id);
	}

	function clearCals()
	{
		totals = 0;
		Get("txtNumber").value = 0;//清除结果
		Opp = "";
		num = null;
	}

	function getNumber(Num)
	{
		if (num == null || num == "")
		{
			Get("txtNumber").value = Num;
		}
		else
		{
			if (Get("txtNumber").value == "0")
				Get("txtNumber").value = Num;
			else
				Get("txtNumber").value += Num;
		}
		num = Get("txtNumber").value;
	}

	function operation (op)
	{
		if(num == null && opp == "")
			return;
		if(opp == "")
		{
			totals += parseFloat(num);
		}
		else if(num != null)
		{
			if ( '+' == opp)
				totals += parseFloat(num);
			else if ( '-' == opp)
				totals -= parseFloat(num);
			else if ( '/' == opp)
				totals /=parseFloat(num);
			else if ( '*' == opp)
				totals *= parseFloat(num);
			else
				totals = parseFloat(num);
		}
		Get("txtNumber").value = totals;
		opp = op;
		num = null;
	}
</script>

 

 

最近也在业余时间看了一点python的资料,python和我想象中的并不太一样,相反地,python的确是一门很容易学习的语言,python有很多优势,汲取其他语言的精华;可能是我学过java和c#、javascript等,有了所谓的思想吧,语言这东西都是相通的。

下面,我在python中,用一个超级简陋的类和方法,实现一个所谓的”计算器“,需要在python idle(no console)运行(唉,,这段python计算器的代码,拿出来丢人咯):

 

    class Cals():
	#初始化各种类型
	signs = ''
	num1 = 0.0
	num2 = 0.0
	totals = 0.0
	#各种计算的方法
	def Counters(self):
		print '请先输入一个运算符:'
		signs = raw_input()
		print '请输入第一个数字:'
		num1 = float(raw_input())
		print '请输入第二个数字:'
		num2 = float(raw_input())
		if signs == '+':
			totals = num1 + num2
		if signs == '-':
			totals = num1 - num2
		if signs == '*':
			totals = num1 * num2
		if signs == '/':
			totals = num1 / num2
		print '计算结果是:%f' %(totals)

然后实例化对象就可以用了,譬如new一个myCals对象:

>>> myCals = Cals()#实例化对象
>>> myCals.Counters()#调用对象的方法。
请先输入一个运算符:
*
请输入第一个数字:
5
请输入第二个数字:
6.5
计算结果是:32.500000
>>> 

ok,这就实现了这个丑陋的计算器。。

我认为,学习语言重要的是有好的资料在身边,推荐大家到这里查看python的学习资料,这些都是dengmin 老师整理好的,感谢他的无私分享,嘿嘿,顺便在即将开课的java oop,也把python的oop学习下。

额。。最近没有宽带是一件很不爽的事情,只能用联通的3G偶尔上上网啥的,,唉,,有宽带能怎样,,just waste time,开始干活吧。。。

Update:17:49:

下午的时候,胖子来我们寝室了,先是讨论辩论赛的事情,然后就是扯淡,,后来更无聊了,,竟然想出让我搞一个按键速度比试(比一比用左手在一分钟内用单个手指头能按多少下)。。不得已,我应付他,蛋疼地写了一个.net下的c#控制台程序:

    class Program
    {
        static void Main(string[] args)
        {
            int number = 1000;//循环1000次才break循环
            int counts = 1;//设置初始status。
            for (int i = 0; i < number; i++)
            {
                Console.ReadKey(true);//必须设置为true,否则,你懂得。
                Console.WriteLine(counts);
                counts++;//尽情的按吧。。我擦。。
            }
        }
    }

 

或者通过RSS 关注本站的更新 ^ O ^ 。” —  by  转载请注明:来自 Angel's Blog.
本文永久链接: http://www.0ee.com/2010/12/08/use-javascript-vs-python-to-achieve-calculator.html
 
分类: code, share标签: , , ,
 
  • QQ书签
  • Del.icio.us
  • 百度收藏
  • Google
  • 饭否
  • FriendFeed
 

 
评论 (10) Trackbacks (0)
发表评论 Trackback
 
10 Comments Contributed by Visitors
  1.     Angel 2010年12月8日10:14 1#

    @Code之行人
    呵呵,临摹别人的themes;
    恩,评论框用的jQuery控制的class样式(jQuery的even和odd),,不得不说,jQuery真的很nb,只需要调用jQuery库+两行code,一切都搞定。

  2.     Code之行人 2010年12月8日10:08 2#

    这个主题挺不错的,评论框也很特别 ok

  3.     学夫子 2010年12月9日05:27 3#

    做一个更加形象,更加真实化的计算器,现在网络上的都是差不多

  4.     Angel 2010年12月9日05:56 4#

    @学夫子
    嘿嘿,我这个就是随便做着玩的,,还没接触太深的gui啊。。。暂时做不出来。

  5.     水车 2010年12月13日11:26 5#

    不错,收藏一下

  6.     学夫子 2010年12月11日05:09 6#

    @Angel
    估计也就是进行一些美化而已的

  7.     等待思索 2010年12月11日13:09 7#

    哎,现在Google企业域名邮箱不好申请啊。申请域名真的 好麻烦!!!也不好解析啊!

  8.     Angel 2010年12月11日13:44 8#

    @等待思索
    额。。。应该不会太难的,顶多第一次搞可能有一点麻烦,弄好一次以后省得折腾了;
    用godaddy的dns吧,我之前用的dnspod,也是半个月前修改成godaddy的,感觉还不错。

  9.     等待思索 2010年12月11日13:48 9#

    @Angel
    网上的教程对我不实用,一直弄不好。godaddy,老是伺候不好。所以N久之前就放弃了。要不我早就用顶级域名了。哎。。代理也写的那个ghs.you8g.com.还是不行。哎我已经彻底失去信心了。。不弄了。域名和我无关。有时间还得去弄和独立IP,折腾WP博客。可惜我不想这么做。先这么写的吧!

  10.     fall 2010年12月13日05:17 10#

    看着挺好玩的。。。

Leave Comments Here...

:) :-D :( :-o 8-O :-? 8) lol :-x :-P oops cry evil twisted wink ? idea :-| arrow mrgreen roll !

(required)

(required)

网址随您("http://"可以省略)

(Ctrl+Enter)

  • 本站不会泄露您的 Email 地址, 敬请放心.
  • 本站已开启缓存, 请不要重复提交评论.
  • 请注意: 带有 《广告(链)、不健康、或者 产品名字》 的评论一律视为spam.
  • 支持常用 HTML 标签调用, 插入 HTML 标签需注意: < == &lt;> == &gt;.
  • 仅当某人针对您的评论做出回应时, 您才会收到由本站发出的邮件通知.
  • 如您希望以相同方式通知某位网友, 请点击  按钮进行回复.
  • 允许在评论中使用如下代码: 
    <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> 
    <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> 
    .
  • 鼠标悬浮到评论中的 @someone 区域即可自动显示 someone 的评论内容.
 
 
  • 正在加载...