【发布时间】:2012-10-24 18:57:42
【问题描述】:
我对编程很陌生。这与python有关。所以想法是取一个表达式,例如 3/5 或最多 3/5*2(最多两个运算符,注意运算符可以是 +、-、/、* 中的任何一个)并解决它。空格可以存在于表达式中的任何位置。
用户输入表达式,比如 3/5,程序需要求解表达式并显示答案。我尝试过的如下。注意,我只尝试了第一部分,一旦我可以正确拆分用户输入的原始表达式(这将是一个字符串),创建函数将是简单的部分:
expres= str(input("something:"))
ssplit= hit.partition("/")
onec= int((ssplit[0].lstrip()).rstrip())
twoc= (ssplit[1].lstrip()).rstrip()
threec= int((huns[2].lstrip()).rstrip())
print(onec,"...",twoc,"...",threec) #just a debug test print
因此,在上面,我可以将 3/5 之类的表达式拆分为三个单独的字符串:3、/ 和 5。我还可以删除运算符/操作数前后的所有空格。我在拆分 4/5+6 之类的表达式时遇到问题,因为我无法为 ssplit[3] 或 ssplit[4] 输入代码,然后输入 3/5 之类的表达式,因为它不会被定义。基本上我需要你帮助找出如何拆分像 3/4-6 等的表达式。我还需要“ssplit= hit.partition("/")”行的帮助,以便它可以查看输入的表达式并使用 +、- 和 *。任何和所有的帮助表示赞赏。另外,如果我上面的代码看起来很糟糕而且效率低下,请给我批评。谢谢!
注意我不能,也不想使用 eval。 操作顺序是必需的。 我不能使用复杂的命令。我需要保持简单,我最多可以使用字符串库,在字符串/整数/浮点数等以及 if、and 等之间进行转换。陈述。我也可以使用函数。
【问题讨论】:
-
你不应该需要
str(input(...))。如果您使用的是 py3k,则输出已经是一个字符串。如果你使用的是 py2k,那么你应该使用raw_input。 -
eval(raw_input())怎么样:P -
@JohnVinyard 我会将其发布为答案...
-
@user1716168 -- 你需要担心操作的顺序吗?例如,你希望从
2+3*2中得到什么——如果你从左到右解析,你会得到 12,如果你使用操作顺序解析,你会得到 8 ... -
@abought -- 是的。你可以做一些事情让它变得更好。您可以通过全局和本地字典来限制
eval可以做什么。即使这样,也有一些鲜为人知的问题,但是如果您小心并知道自己在做什么,则可以解决它们。也就是说,如果您不确定自己在做什么,最好避免这样做。
标签: python string parsing split expression