声明并分配给全局变量时出现语法错误

2024-09-30 18:27:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个二进制和十进制转换器,但我挂断了一个变量

def conversion():
    global binaryOrDecimal = input('''Which way are you trying to convert?
    A: Binary to Decimal
    B: Decimal to Binary
    ''')

conversion()

if binaryOrDecimal == 'a' or 'A':
    print('test')
elif binaryOrDecimal == 'b' or 'B':
    print('test2')
else:
    print('invalid argument, please try again')
    conversion()

我在第2行得到了错误“预期语句结束”和“预期语句,发现Py:EQ”


Tags: ortowhichinputdef二进制语句global
2条回答

我自己也是一个初学者,但我不认为你可以给一个变量赋值,然后在同一行使用全局关键字。因此,首先必须定义全局变量:

global binaryOrDecimal

然后为其指定一个值:

binaryOrDecimal = input('''Which way are you trying to convert?
A: Binary to Decimal
B: Decimal to Binary
''')

因此,总体而言,您的功能应该是:

def conversion():
    global binaryOrDecimal 
    binaryOrDecimal = input('''Which way are you trying to convert?
    A: Binary to Decimal
    B: Decimal to Binary
    ''')

好的,这里有几件事

第一,这不是如何定义全局变量。确保在将全局变量定义为全局变量后,为其指定一个值

global foo
foo = "a"

其次,为了检查一个变量是否等于两个或多个值,binaryOrDecimal == 'b' or 'B':将不起作用。您可以使用in来检查元素是否出现在iterable中

if foo in ["bar1","bar2"]

但是在您的情况下,在接受输入后,如果用户输入是大写的,则可以使用lower()将其小写。这样,您就不必将输入与2个值进行比较

所以,如果我们解决了所有这些问题,你应该得到这样的结果

def conversion():
    global binaryOrDecimal 
    binaryOrDecimal = input('''Which way are you trying to convert?
    A: Binary to Decimal
    B: Decimal to Binary
    ''').lower()

conversion()
if binaryOrDecimal == 'a':
    print('test')
elif binaryOrDecimal == 'b':
    print('test2')
else:
    print('invalid argument, please try again')
    conversion()

我想指出的最后一件事是,尽量不要使用全局变量。而是返回一个值。这样,函数中的所有变量都在局部范围内,其他函数不知道这些变量

def conversion():
    binaryOrDecimal = input('''Which way are you trying to convert?
    A: Binary to Decimal
    B: Decimal to Binary
    ''').lower()
    return binaryOrDecimal

binaryOrDecimal = conversion()
if binaryOrDecimal == 'a':
    print('test')
elif binaryOrDecimal == 'b':
    print('test2')
else:
    print('invalid argument, please try again')
    binaryOrDecimal = conversion()

希望这有帮助:)

相关问题 更多 >