没有按钮的编程计算器(输入整个表达式)

时间:2015-06-28 06:20:51

标签: python

在我的代码中,用户输入一个表达式(userExp),然后代码将其拆分为expression_list下的字符串。我想在打印结果时加入expression_list,因此输出显示如下:2 + 2 = 4,但是当我尝试获得此结果时:

    print (''.join(expression_list.split(',')[::1]), '=', answer)  
AttributeError: 'list' object has no attribute 'split'

如何将其从['3', '-', '4'] = -1更改为3 - 4 = -1

import operator

operList = ["+", "/", "%", "//", "**", "-",""," "]
Error1 = "Something is wrong with your equation: there is nothing in it."
Error2 = "Something is wrong with your equation: it does not feel complete."


def printGreeting():
    print("Hello, welcome to Equation Calculator")
    print("Enter in the expression that you want evaluated and the program will do the rest.")

def getExpression():
    userExp = input("Enter mathematical expression here: ")
    expression_list = userExp.split()
    print(expression_list)
    if not userExp.isdigit() or userExp.isalpha():
        print(Error2)
    if operList[6] or operList[7] in userExp:
        print(Error1)
    return expression_list

def add(expression_list):
    answer = int(expression_list[0]) + int(expression_list[2])
    return answer

def sub(expression_list):
    answer = int(expression_list[0]) - int(expression_list[2])
    return answer

def exp(expression_list):
    answer = int(expression_list[0]) ** int(expression_list[2])
    return answer

def div(expression_list):
    answer = int(expression_list[0]) / int(expression_list[2])
    return answer

def fdiv(expression_list):
    answer = int(expression_list[0]) // int(expression_list[2])
    return answer

def modu(expression_list):
    answer = int(expression_list[0]) % int(expression_list[2])
    return answer


printGreeting()
expression_list = getExpression() 
if operList[0] in expression_list:
    answer = add(expression_list)
    print (answer)

elif operList[5] in expression_list:
    answer = sub(expression_list)
    print (''.join(expression_list.split(',')[::1]), '=', answer)

elif operList[4] in expression_list:
    answer = exp(expression_list)
    print (answer)

elif operList[1] in expression_list:
    answer = div(expression_list)
    print (answer)

elif operList[3] in expression_list:
    answer = fdiv(expression_list)
    print (answer)

elif operList[2] in expression_list:
    answer = modu(expression_list)
    print (answer)

2 个答案:

答案 0 :(得分:0)

如果使用数字和运算符之间的空格输入表达式并且只使用两个值进行简单计算,则可以尝试以下操作,将输入的表达式拆分为列表并传递给add函数(如果它包含+符号)然后add函数添加两个值,将答案返回到调用函数的位置。

import operator

operList = ["+", "/", "%", "//", "**", "-",""," "]
Error1 = "Something is wrong with your equation: there is nothing in it."
Error2 = "Something is wrong with your equation: it does not feel complete."


def printGreeting():
    print("Hello, welcome to Equation Calculator")
    print("Enter in the expression that you want evaluated and the program will do the rest.")

def getExpression():
    userExp = input("Enter mathematical expression here: ")
    expression_list = userExp.split()
    print(expression_list)
    if not userExp.isdigit() or userExp.isalpha():
        print(Error2)
    if operList[6] or operList[7] in userExp:
        print(Error1)

    if operList[0] in expression_list:
        answer = add(expression_list)
        print (answer)

    #carry on ifs for calc.


def add(expression_list):
    answer = int(expression_list[0]) + int(expression_list[2])
    return answer

#add functions for each calc like above


printGreeting()
userExp = getExpression()

答案 1 :(得分:0)

导致错误的直接问题是expression_list已经是一个列表而不是一个字符串,所以对它进行调用split是没有意义的。

但是,如果删除该问题,则您尝试将列表加入两个字符串。您应该加入列表,然后将结果字符串与其他字符串连接或将它们添加到列表中。类似的东西:

''.join(expression_list+['=', answer])

其他人正在处理您是否以合理的方式完成任务 - 这纯粹是在回答您遇到的具体问题。