Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无按钮编程计算器(输入整个表达式)_Python - Fatal编程技术网

Python 无按钮编程计算器(输入整个表达式)

Python 无按钮编程计算器(输入整个表达式),python,Python,在“我的代码”中,用户输入一个表达式(userExp),然后代码将其拆分为expression\u列表下的字符串。打印结果时,我想加入表达式列表,因此输出显示如下:2+2=4,但当我尝试获得此结果时: print (''.join(expression_list.split(',')[::1]), '=', answer) AttributeError: 'list' object has no attribute 'split' 我如何将它从['3','-','4']=-1更改为

在“我的代码”中,用户输入一个表达式(
userExp
),然后代码将其拆分为
expression\u列表下的字符串。打印结果时,我想加入
表达式列表
,因此输出显示如下:
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)

如果表达式是用数字和运算符之间的空格输入的,并且它是一个仅使用两个值的简单计算,则可以尝试以下操作,其中输入的表达式被拆分为一个列表并传递到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()

导致错误的直接问题是,表达式\u list已经是一个列表而不是字符串,因此对其调用split没有意义

但是,如果您删除该问题,那么您将尝试将列表与两个字符串连接起来。您应该加入列表,然后将结果字符串与其他字符串一起加入,或者将它们添加到列表中。比如:

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

其他人正在处理你是否以明智的方式进行这项任务——这纯粹是回答你遇到的具体问题

你能不能
eval(userExp)
?或者这是作弊?你会支持这个计划吗?你会支持吗?它比看起来更复杂,例如,你需要考虑优先级和括号。我想看看。或者,如果你想为教育目的实现整个事情,考虑一下。最后,Python模块可能会有所帮助。