我刚刚开始使用python,我决定从一个简单的程序开始,将一行两个参数的数学表达式直接解析成一个答案。例如:4+2、3/4、5435*3423等。首先,我试图解释方程中的两个变量,然后再让程序对它们进行数学化。我的问题是第39、40、42和43行没有修改它们在1、3、2和5处的变量。在PyCharm中,它们会因将名称隐藏在范围之外的错误而变灰。你知道吗
现在已经快凌晨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
语句声明它们(仅当您希望写入它们时,不需要预先声明它们以读取它们)代码中的其他问题:您随机地将访问globals与传递globals和默认为globals混合在一起,您应该最小化globals并一致地对待它们;选择更具描述性的变量名(为什么希望人们猜测
num11
的意思?);不要重新构造布尔(num11
);过早地开始构造第二个数。你知道吗考虑到上述问题,我重新编写了您的代码,并添加了足够的包装器和粘合代码以使其运行:
示例
相关问题 更多 >
编程相关推荐