2012-03-18 87 views
1

所以对于一个任务,我需要让python从左到右进行数学运算。数学从左到右

从这里阅读, http://www.sthurlow.com/python/lesson02/

它说,“还记得数学计算,从左至右,除非你把在括号中。最里面的括号先计算。”

但无论如何强迫python实际上没有括号从左到右做数学,并忽略操作的顺序?

我的代码是简单地只是一个变量与用户之后在打印输入的数学方程

x = input("Enter numbers and operators: ") 
print x 

我需要它能够例如做, 4 + 5 * 5 = 45

代替4 + 5 *在python 5 = 29

任何帮助理解

编辑1

userinput = raw_input("Enter numbers and operators: ") 
parts = userinput.split() 
print parts 
print eval(parts) 

我输入1 + 1并打印结果为['1','+','1'] < ---这是一个列表吗? 我尝试eval(部分)和错误说,必须是字符串或对象,我应该使用“eval”?

回答

6

否。分配的要点可能是您实际上必须自己编写一些代码,而不是让python为您做所有事情,并且您必须学习如何使用列表和循环。 :-)这里有一种可能的方法:

  1. 使用input()来获得用户想要评估的表达式。你会得到这个作为一个字符串,也就是一个单独的字符序列。
  2. 将字符串拆分为更小的字符串列表,每个字符串都是数字或运算符。所以"42 + 8 * 9"应该成为"42", "+", "8", "*", "9"。 (有一个内置函数split()这样做,假设在操作符和数字之间有空格。)
  3. 创建一个变量,例如: result,这将保持目前的结果,并将第一个数字放入其中。请注意,包含数字的字符串是而不是与数字相同,但可以使用int()将此类字符串转换为数字。
  4. 使用for循环查看列表的其余元素。每次找到作为操作员的元素时,请在result和列表中的后续号码上使用该操作。

尝试沿着这些线攻击问题,让我们知道如果你卡住了。

+1

我觉得他应该使用的raw_input'()'代替或他得到一个机会来改变运算符优先级规则:) – 2012-03-18 21:50:45

+1

@TimPietzcker之前Python将评估输入3.x的'raw_input'拼写'input' – 2012-03-18 21:53:57

+0

所以我只需要 x = raw_input(“Enter numbers and operators:”) y = x.split() 我不知道你会怎么做第3步。有没有办法做到这一点没有?喜欢使用,而 – glors 2012-03-18 21:59:58