python3实现计算器基本功能

用Python3写一个计算器:实现基本功能如+,-,*,/,^,
要注意的是:输入含有括号( ),小数点 .
欢迎来踩我的博客:http://dr-von.top/
思路就是逆波兰表达式的算法:

从中缀式的左端开始逐个读取字符x,逐序进行如下步骤:

1.若x是操作数,将x直接压入栈s2;

2.若x是运算符,则分情况讨论:

若x是’(',则直接压入栈s1;

若x是’)‘,则将距离栈s1栈顶的最近的’(‘之间的运算符,逐个出栈,依次压入栈s2,此时抛弃’(';

若x是除’(‘和’)'外的运算符,则再分如下情况讨论:

若当前栈s1的栈顶元素为’(',则将x直接压入栈s1;

若当前栈s1的栈顶元素不为’(‘,则将x与栈s1的栈顶元素比较,若x的优先级大于栈s1栈顶运算符优先级,则将x直接压入栈s1。否者,将栈s1的栈顶运算符弹出,压入栈s2中,直到栈s1的栈顶运算符优先级别低于(不包括等于)x的优先级,或栈s2的栈顶运算符为’(',此时再则将x压入栈s1;

这代码是刚接触时候写的。。自己都不忍心看下去了,有空再改改吧

#!//bin/python
# -*- coding: UTF-8 -*-
import sys 
'''
date : 2017-09-08
@author: vassago
'''

#get and update the data
def process_args(args):
    #合并,组成正确的小数
    while(1):
        try:
            x=args.index('.')
        except :
            break
        args[x-1]+=args[x]
        args[x-1]+=args[x+1]
        del args[x]
        del args[x]
    #合并,组成正确的多位数
    llen =len(args)
    i=1
    while(i<llen):
        if(args[i-1]=='(' or args[i-1]==')' or args[i-1]=='+' or args[i-1]=='-' or args[i-1]=='*' or args[i-1]=='/' or args[i-1]=='^'):
            i+=1
            continue
        if(args[i]!='(' and args[i]!=')' and args[i]!='+' and args[i]!='-' and args[i]!='*' and args[i]!='/' and args[i]!='^'):
            args[i-1]+=args[i]
            del args[i]
            llen-=1
            i-=1
        i+=1
    return args

def get_nibolan_list(args):
    #get nibolan list
    pri={'(':0,')':0, '+':1,'-':1, '*':2,'/':2,'^':3}
    stack1,stack2=[],[]
    
    for x in args:
        if(x=='main.py' or x==' '):
            continue
        if(x=='('):
            stack1.append(x)
        elif(x==')'):
            top=stack1.pop()
            while(top!='('):
                stack2.append(top)
                top=stack1.pop()
        elif(x=='+' or x=='-' or x=='*' or x=='/' or x=='^'):
            if(len(stack1)==0):
                stack1.append(x)
            else:
                top1=stack1.pop()
                if(pri[x]>pri[top1]):
                    stack1.append(top1)
                    stack1.append(x)
                else:
                    while(1):
                        if(pri[x]>pri[top1]):
                            stack1.append(top1)
                            break
                        stack2.append(top1)
                        if(len(stack1)==0):
                            break
                        top1=stack1.pop()
                    stack1.append(x)
        else:
            stack2.append(x)

    while(len(stack1)!=0):
        stack2.append(stack1.pop())

    nibolan=[]
    while(len(stack2)!=0):
        nibolan.append(stack2.pop())

    #print(nibolan)
    return nibolan

def process_nibolan(nibolan):
    #output the answer
    stack,fla=[],1
    while(1):
        top=nibolan.pop()
        if(top=='+' or top=='-' or top=='*' or top=='/' or top=='^'):
            try:
                y=float(stack.pop())
                x=float(stack.pop())
            except IndexError:
                print('FORMAT ERROR')
                fla=0
                break
            except ValueError:
                print('INPUT ERROR')
                fla=0
                break

            try:
                if(top=='+'):
                    stack.append(x+y)
                if(top=='-'):
                    stack.append(x-y)
                if(top=='*'):
                    stack.append(x*y)
                if(top=='/'):
                    stack.append(x/y)
                if(top=='^'):
                    stack.append(x**y)
            except ValueError :
                print('Value Error')
                fla=0
                break

            while(len(stack)!=0):
                nibolan.append(stack.pop())
        else:
            stack.append(top)
        if(len(nibolan)==0):
            break
    return stack[0]

if __name__ == '__main__':
    string=""
    for x in sys.argv:
        if(x=="main.py" or x==' '):
            continue
        string+=x

    args=list(string)
    print (process_nibolan(get_nibolan_list(process_args(args)))

测试时:
采用命令行输入

python main.py "1+2^2-3*(2-1)/3"

输出:

4.0

可以给我留言,留言板使用的是disqus,需要代理

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是Python实现计算器的四则运算功能基本步骤: 1. 从用户那里获取要计算的表达式。 使用 input() 函数来获取用户输入的表达式。 2. 将表达式转换为可计算的形式。 使用 eval() 函数来计算表达式的值。在这个过程中,Python会自动将字符串类型的表达式转换为可执行的代码,并返回其计算结果。 3. 实现用户输入的表达式中的四则运算。 在 Python 中,加法用 "+" 表示,减法用 "-" 表示,乘法用 "*" 表示,除法用 "/" 表示。您可以使用这些符号来实现四则运算。 4. 输出计算结果。 将计算结果打印出来,使用 print() 函数来实现。 以下是一个基本Python 计算器示例代码: ``` # 从用户输入中获取表达式 expr = input("请输入要计算的表达式:") # 将表达式转换为可计算的形式并计算结果 result = eval(expr) # 输出计算结果 print("计算结果为:", result) ``` 请注意,使用 eval() 函数可以很方便地计算表达式,但也有安全问题。如果用户输入的表达式中包含了恶意代码,那么可能会对计算器程序造成危害。因此,在实际应用中,我们需要对用户输入的内容进行合理的检查和过滤,以确保计算器程序的安全性。 ### 回答2: Python是一种常用的编程语言,可以用来实现多种功能,其中之一是实现四则运算计算器。下面是一个简单的计算器实现方法,包含加减乘除四个基本运算。 1. 输入数字和运算符号:首先需要从用户那里获取需要运算的数字和运算符号,并进行判断,判断运算符号是加、减、乘、除中哪一个。 2. 定义运算函数:在得到数字和运算符号后,需要定义四个函数来实现加、减、乘、除四种运算操作。 3. 调用运算函数:在定义完四个运算函数后,需要根据用户输入的运算符号调用相应的运算函数,进行相应的运算。 4. 输出结果:最后,将计算结果输出给用户,显示在屏幕上。 下面是一个示例代码,可以实现这个功能: ``` def add(x, y): return x + y def subtract(x, y): return x - y def multiply(x, y): return x * y def divide(x, y): return x / y num1 = float(input("请输入第一个数字:")) operator = input("请输入运算符号(+、-、*、/):") num2 = float(input("请输入第二个数字:")) if operator == "+": print("计算结果:", add(num1, num2)) elif operator == "-": print("计算结果:", subtract(num1, num2)) elif operator == "*": print("计算结果:", multiply(num1, num2)) elif operator == "/": print("计算结果:", divide(num1, num2)) else: print("输入错误,请输入正确的运算符号。") ``` 这个代码首先定义了四个函数,分别为加、减、乘、除四种运算函数。然后从用户那里获取需要运算的数字和运算符号,并判断输入的运算符号是哪一个。根据不同的运算符号,调用相应的运算函数,并将计算结果输出给用户。如果用户输入的不是四种基本运算符号,则会输出错误提示。 以上就是用Python实现计算器四则运算的方法,通过以上代码可以清晰地看到四个基本运算函数的实现过程,以及如何根据用户输入的运算符号来调用相应的运算函数。由于Python语言简单易懂,因此可以用来实现多种功能,包括实现这个计算器。 ### 回答3: Python是一种高级编程语言,它易于学习和使用,同时它也是一种功能强大的语言,可以用来开发各种类型的应用程序,包括计算器应用程序。Python可以通过使用基本的算术运算运算符来实现计算器的四则运算功能。 在Python中,可以使用加(+)、减(-)、乘(*)、除(/)和取模(%)等基本算术运算符来完成计算。例如,可以使用以下代码将两个数字相加: ```python num1 = input("请输入第一个数字: ") num2 = input("请输入第二个数字: ") # 将输入的字符串类型的数字转换为整数类型 num1 = int(num1) num2 = int(num2) result = num1 + num2 print("两个数字的和为: ", result) ``` 以上代码首先通过input()函数获取用户输入的两个数字,然后将这些数字转换为整数类型,并使用加(+)运算符将它们相加,最后将结果打印出来。其他基本运算符的用法也类似。 注意:在进行除法运算时,需要注意分母是否为零的情况,避免程序因为除以0而出现错误。 实现计算器的四则运算功能,需要根据用户输入的运算符(加、减、乘、除)来判断执行哪种运算,代码可以如下: ```python num1 = input("请输入第一个数字: ") num2 = input("请输入第二个数字: ") operator = input("请输入运算符(+、-、*、/):") # 将输入的字符串类型的数字转换为浮点数类型 num1 = float(num1) num2 = float(num2) if operator == '+': result = num1 + num2 elif operator == '-': result = num1 - num2 elif operator == '*': result = num1 * num2 elif operator == '/': if num2 == 0: print("除数不能为零!") else: result = num1 / num2 else: print("输入有误,请输入正确的运算符!") print("运算结果为:", result) ``` 以上代码首先获取用户输入的两个数字和运算符,然后将这些数字转换为浮点数类型,并根据运算符执行相应的运算。其中,当运算符是除法运算符时,需要判断除数是否为零。最后,将运算结果打印出来。 以上就是使用Python实现计算器的四则运算功能实现过程。需要注意的是,在编写程序时,要尽可能考虑到各种异常情况,如除数为零、输入有误等情况,以提高程序的健壮性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值