我的输入是这样的
23 + 45 = astart
当我把它作为raw_input()并然后尝试拆分时的确切输入,它给我一个这样的错误
SyntaxError:语法无效
代码就是这个
k=raw_input()
a,b=(str(i) for i in k.split(' + '))
b,c=(str(i) for i in b.split(' = '))
总是数字+数字= astar
它只是当我给数字+数字= astar我没有得到语法错误.. !!但是当我给空白时我得到了sytax错误
答案 0 :(得分:2)
使用Python 2.5.2进行测试,只要我只有相同的间距,您的代码就会运行正常 在代码和输入中的+和=的两侧。
在代码中,它们的两侧似乎有两个空格,但两者中只有一个空格 在输入方面。此外 - 您不必在生成器中使用str(i)。你可以做 它像a,b = k.split('+')
My cut and pastes:
My test script:
print 'Enter input #1:'
k=raw_input()
a,b=(str(i) for i in k.split(' + '))
b,c=(str(i) for i in b.split(' = '))
print 'Here are the resulting values:'
print a
print b
print c
print 'Enter input #2:'
k=raw_input()
a,b=k.split(' + ')
b,c=b.split(' = ')
print 'Here are the resulting values:'
print a
print b
print c
From the interpreter:
>>>
Enter input #1:
23 + 45 = astart
Here are the resulting values:
23
45
astart
Enter input #2:
23 + 45 = astart
Here are the resulting values:
23
45
astart
>>>
答案 1 :(得分:1)
编辑:正如Triptych所指出的那样,生成器对象不是问题所在。分区解决方案仍然很好,即使对于无效输入也是如此
调用 (... for ...)
只返回一个生成器对象,而不是一个元组
尝试以下方法之一:
a,b=[str(i) for i in k.split(' + ')]
a,b=list(str(i) for i in k.split(' + '))
他们返回一个可以解包的列表(假设一个拆分)
击>
或使用str.partition假设为2.5或更高:
a, serperator, b = k.partition('+')
即使找不到字符串也会返回3元组
编辑:如果您不希望输入中的空格使用strip函数
a = a.strip()
b = b.strip()
编辑:修复str.partition方法,由于某种原因错误的函数名称
答案 2 :(得分:1)
我想我只是使用一个简单的正则表达式:
# Set up a few regular expressions
parser = re.compile("(\d+)\+(\d+)=(.+)")
spaces = re.compile("\s+")
# Grab input
input = raw_input()
# Remove all whitespace
input = spaces.sub('',input)
# Parse away
num1, num2, result = m.match(input)
答案 3 :(得分:1)
你可以使用:
a, b, c = raw_input().replace('+',' ').replace('=', ' ').split()
或[编辑添加] - 这是避免创建额外中间字符串的另一个:
a, b, c = raw_input().split()[::2]
Hrm--只是意识到第二个需要空间,所以不那么好。
答案 4 :(得分:0)
我没有尝试解决您的问题,而是想出了一个基本步骤,您可以尝试理解为什么会出现语法错误:打印您的中间产品。
k=raw_input()
print k.split(' + ')
a,b=(str(i) for i in k.split(' + '))
print b.split(' = ')
b,c=(str(i) for i in b.split(' = '))
这将显示拆分产生的实际列表元素,这可能会对您遇到的问题有所了解。
我通常不喜欢使用print语句进行调试,但是Python的优点之一就是它很容易启动解释器并且只是交互式地混乱,一次一个声明,看看会发生什么上。