2017-06-21 35 views
0

我正在研究一个简单的计算器,它可以带多个数字。我从我写的一个更简单的计算器中获得了所需的其他代码。运算符问题和分解数学表达式

这段代码试图分解字符串。我在oper_lib变量变量 中放置运算符时遇到问题此外,我可以使用泛型变量定义函数,并在需要使用它的任何东西上调用相同的函数?

>""" basic calc - designed to take multiple >variables   """ 

    from datetime import * 

    now = datetime.now() 

    #Intro 

    print ("\n") 

    print ("Welcome to BasicCalc:Unstable! \n") 

    print ("If you need HELP, type help \n") 


    print (now) 

    #Beginning processing intake 


    ui1 = input("Please enter figure: ") 


    intake_list = ui1.split(" ") 

    lenth_list= len(intake_list) 


    if lenth_list % 2 == 0: 
     print ("invalid entry") 
    else: 
     print ("") 

    """ 
    Thoughts on this/ ideas: 

    - build a secondary math op list 
    - add two for - in loops in quick succession 
    """ 

    def do_math(intake_list): 
     """ proforms math function from a list""" 

    oper_lib = [ 
      "+" , 
      "-" , 
      "*" , 
      "/" 
       ] 


    for i in intake_list: 
     for n in i: 
      if n in oper_lib: 
       intake_list.insert(i-1 , " ") 
       intake_list.insert(i+1 , " ") 
       print(intake_list) 



    print (do_math(intake_list))  
    print (intake_list) 
    print (lenth_list) 
+0

该程序请求一个数字。这个数字是一个数字,一个表达式,是什么?我输入了22,然后用不同的方式输出这三个结果:无['22'] 1.你可以给出你期望输出结果的提示吗? –

+0

这个想法是你输入一个完整的表达式,每个整数/操作数之间有一个空格。该程序将其作为一个字符串,将其分解成一个列表并处理furthor并返回一个答案。所以如果你尝试用5-5来运行程序,> do_math应该把它分解为> ['5',' - ','5'] – user43850

+0

我认为你是自相矛盾的。它看起来像你试图让它'['5','','','','5']'。此外,'do_math(...)'将始终返回None,因为除非您指定具有相应值的'return'关键字,否则函数将返回None。 – BLaZuRE

回答

0

在数学中,您遍历用户输入的字符列表。如果用户输入'5 - 5',intake_list包含['5',' - ','5']。所以当你迭代它时,使用迭代变量i时会发生错误,它的值是' - '。你的程序正试图从减1“ - ”在该行:

intake_list.insert(i-1 , " ") 

我建议这样做:)

ui1 = input("Please enter figure: ") 

try: 
    print(eval(ui1)) 
except: 
    print("Error on input") 
sys.exit() 
0

它可以帮助,至少在开始的时候,要想到的循环遍历“set”/“array”/“list”/ etc中的每个项目。正确的术语是for循环在提供的可迭代中的每个值上重复

for *variable* in *iterable* 
    #do something 

for listValue in [12, 'apple', 24] 
    print listValue 

上面会打印(安慰......从返回关键字不同)

12 
apple 
24 

然而

for listValue in '12' 
    print(listValue) 

上面会打印

12 

我我想我明白你想要什么o做第二个循环,但你做了太多的工作,它会给你不正确的结果。 (为自己和未来几年/几十年的调试提示:使用简单输入(例如具有0,1或2值的列表)在您的头部或纸张上运行代码,并充当程序并逐行运行看看它会做什么。)你可以迭代一次字符串的次数是一次。基于以上所述,in都不会在列表中提供有关索引/键/“放置”的任何信息,这就是您想要插入到列表中的那种东西。

你想要做的就是抓住当前的“放置”并用迭代器上的空格包围它。

一个简单的解决方案可能是保留一个计数器(每个数字或运算符添加1)。这将允许您跟踪需要为当前值放置空间的位置。

另一种解决方案可能是统计新列表中的项目数量并根据该数量进行追加。

+0

不会第二个循环能够迭代列表中的对象吗?我一直试图做到这一点无济于事。在python中做“合法”吗? – user43850

+0

任何对象都不是可迭代的。你想通过迭代一件事来达到什么目的?你所做的只是'listValue ='12'',除非它是一个数字,在这种情况下你会错误的。 '12!='12''如果某件事是合法的并不意味着你应该这样做。 – BLaZuRE