if语句中的可变问题

jakendrick3

我刚开始使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

批量If语句中的问题

来自分类Dev

if语句中的setState()问题

来自分类Dev

if 语句中的问题

来自分类Dev

awk if 语句中的问题

来自分类Dev

findall 语句中的 " 问题

来自分类Dev

在其他If条件语句中可变

来自分类Dev

if语句中的数学问题

来自分类Dev

在if语句中检查范围的问题

来自分类Dev

if语句中的数学问题

来自分类Dev

JOIN语句中的SQL问题

来自分类Dev

在If语句中使用.toggleClass的问题

来自分类Dev

Rcpp中if-else语句中的问题

来自分类Dev

简单语句中的BigInteger逻辑问题

来自分类Dev

SQL语句中的预期参数存在问题

来自分类Dev

SQL语句中的语法错误问题

来自分类Dev

if语句中的剔除怪异绑定问题

来自分类Dev

在else语句中遇到问题

来自分类Dev

Rcpp中if-else语句中的问题

来自分类Dev

此条件语句中的逻辑问题

来自分类Dev

非常简单的 if 语句中的逻辑问题

来自分类Dev

if/else 语句中的大括号问题

来自分类Dev

调用shopify设置时在液态if语句中可变

来自分类Dev

WHERE 子句中 CASE 语句中的 BETWEEN 问题

来自分类Dev

问题在razor if语句中调用javascript函数

来自分类Dev

在create语句中处理拒绝问题-不触发

来自分类Dev

在if / else语句中使用子字符串的问题

来自分类Dev

SQL语句中有多个PHP变量的问题

来自分类Dev

在SELECT语句中使用参数时的性能问题

来自分类Dev

在if语句中嵌入foreach的代码出现问题