python字符串输入问题与空白!

时间:2009-06-12 22:05:41

标签: python

我的输入是这样的

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错误

5 个答案:

答案 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的优点之一就是它很容易启动解释器并且只是交互式地混乱,一次一个声明,看看会发生什么上。