我刚开始使用python,并且决定从一个简单的程序开始,将一个行,两个参数的数学表达式直接解析为一个答案。例如:4 + 2、3 / 4、5435 * 3423等 首先,在尝试对程序进行数学处理之前,我试图解释方程式中的两个变量。我的问题是第39、40、42和43行没有在1、3、2和5处修改它们各自的变量。
目前大约是凌晨1点,我不是一个夜猫子(我永远不会把它当作编码人员笑),所以这对我来说可能是一个愚蠢的错误,但以防万一。
primeNumber = None
secNumber = None
num11 = 0
buildList = []
finished = False
def interpret(statement):
i = 0
iMax = len(statement)
while True:
if i >= iMax:
break
parse(statement[i])
i = i + 1
def parse(char, buildList=buildList):
interrupt = [" ", "+", "-", "/", "*"]
if char in interrupt:
buildNumber(buildList)
buildList.clear()
elif num11 == 1:
buildNumber(buildList)
buildList.clear()
else:
buildList.append(char)
def isNumber(att):
try:
int(att)
return True
except ValueError:
return False
def buildNumber(finishedList, num11 = num11):
finishedNumber = ''.join(finishedList)
print(finishedNumber)
if num11 == 0:
primeNumber = finishedNumber # <<< line 39
num11 = 1
elif num11 == 1:
secNumber = finishedNumber
finished = True
在Python中,如果在函数内引用的变量的值在函数内设置,则假定它们是局部变量。要覆盖此默认行为,并从函数内部设置全局变量,您需要使用以下global
语句声明它们(仅当您要编写它们时,才需要预先声明它们才能读取它们)。
代码的其他问题:您将访问全局变量与遍历全局变量和默认设置为全局变量混为一谈–应该最小化全局变量并始终如一地对待它们;选择更多描述性的变量名(为什么要让SO上的人们猜测这num11
意味着什么?);不要重塑布尔值(num11
再次);您会过早启动第二个数字的构建。
考虑到以上问题,我对您的代码进行了重新设计,并添加了足够的包装器和粘合代码以使其运行:
firstNumber = None
secondNumber = None
finishedFirst = False
finishedSecond = False
operation = None
operations = {
" ": None,
"+": lambda a, b: a + b,
"-": lambda a, b: a - b,
"/": lambda a, b: a / b,
"*": lambda a, b: a * b,
}
def interpret(statement):
buildList = []
for character in statement:
parse(character, buildList)
if not finishedSecond:
buildNumber(buildList)
def parse(character, buildList):
global operation
if character in operations:
if buildList:
buildNumber(buildList)
buildList.clear()
if operations[character] is not None:
operation = operations[character]
else:
buildList.append(character)
def buildNumber(finishedList):
global firstNumber, secondNumber, finishedFirst, finishedSecond
finishedNumber = ''.join(finishedList)
if not finishedFirst:
firstNumber = int(finishedNumber)
finishedFirst = True
else:
secondNumber = int(finishedNumber)
finishedSecond = True
statement = input("> ")
interpret(statement)
print(operation(firstNumber, secondNumber))
例子
python3 test.py
> 34 + 56
90
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句