raw_input 围绕字符串的多个输入

raw_input multiple inputs around strings

用户是否可以围绕字符串输入多个变量(因此它们在键入时就在那里)。 我希望用户输入数字 x、y、u、v,如

(x,y) 到 (u,v) 其中括号和逗号用于指导他们的输入。

我希望它是这样的(我知道这段代码是错误的):

a1, a2, a3, a4 = raw_input("("+x1+", "+x2+") to ("+x3+", "+x4+")").split()

其中第 i 个变量取第 i 个 x 值的值。

你的代码没有错。

实际有效:

>>> x1,x2,x3,x4 = 'xyuv'
>>> a1, a2, a3, a4 = raw_input("("+x1+", "+x2+") to ("+x3+", "+x4+")").split()
(x, y) to (u, v)1 2 3 4
>>> a1
'1'
>>> a2
'2'
>>> a3
'3'
>>> a4
'4'

但是:

  • 输出(a1a2a3a4)是字符串。
  • 它需要一个严格的格式,由 4 个数字以空格分隔。偏离这种格式会导致解释器抛出各种异常。

您可以这样解决 map(int, ...) 的第一个问题:

a1, a2, a3, a4 = map(int, raw_input("("+x1+", "+x2+") to ("+x3+", "+x4+")").split())

对于第二个问题,也许你可以用 try: ... except: ... 包围代码,并用 while True 包围它,这样直到它得到一个异常,它重复它:

while True:
    try:
        a1, a2, a3, a4 = map(int, raw_input("("+x1+", "+x2+") to ("+x3+", "+x4+")").split())
        break
    except:
        continue

这里我试着给它一些不好的输入,最后是一个好的输入(它在得到好的输入时终止):

(x, y) to (u, v)a
(x, y) to (u, v)a a a a
(x, y) to (u, v)1 2 3 4