如何在python中将输入字符串拆分为单独的可用整数

时间:2016-09-08 20:48:03

标签: python split coordinates tokenize minecraft

我试图将输入字符串xyz分成3个标记,然后分成3个整数,分别称为x,y和z。 我希望它这样做,以便我必须做更少的输入,然后能够使用它们作为mc.setblocks(x1, y1, z1, x, y, z, BlockId)的坐标。我该如何将它分离出来,使其成为3个不同的整数和\或将它们分成标记来实现呢?我知道如何在java中执行此操作,但我不知道如何在python中执行此操作。看起来应该是这样的:

xyz1 = input("enter first coordinates example: 102 36 74")
st = StringTokenizer(xyz1)
x = st.nextToken
y = st.nextToken
z = st.nextToken

3 个答案:

答案 0 :(得分:1)

您可以获取xyz1中的字符串并将其拆分并将其转换为这样的整数

xyz_list = [int(x) for x in xyz1.split(' ')]

如果你不想在列表中使用这些整数并且希望将它们存储到单独的变量中,那么就这样做

x = xyz_list[0]
y = xyz_list[1]
z = xyz_list[2]

答案 1 :(得分:1)

您可以使用split()对象的string方法,该方法默认用于拆分空格字符。这将为您提供单独字符串的列表。要将每个字符串转换为integer,您可以使用理解。假设输入的形式正确,则以下单行将执行此操作:

x, y, z = ( int(coord) for coord in xyz1.split() )

答案 2 :(得分:0)

我尝试写的更少" pythonically"所以你可以看到发生了什么:

xyz1 = input("Enter first 3 coordinates (example: 102 36 74): ")

tokens = xyz1.split() # returns a list (ArrayList) of tokenized values
try:
    x = int(tokens[0])   # sets x,y,z to the first three tokens
    y = int(tokens[1])
    z = int(tokens[2])
except IndexError:       # if 0,1,2 are out of bounds
    print("You must enter 3 values")
except ValueError:       # if the entered number was of invalid int format
    print("Invalid integer format")

如果您输入的坐标不止三个,那么您可以对输入进行标记化并在其上循环,将每个标记转换为int并将其附加到列表中:

xyz1 = input("Enter first 3 coordinates (example: 102 36 74): ")

tokens = xyz1.split() # returns a list (ArrayList) of tokenized values
coords = []     # initialise empty list
for tkn in tokens:
    try:
        coords.append(int(tkn))     # convert token to int
    except ValueError:       # if the entered number was of invalid int format
        print("Invalid integer format: {}".format(tkn))
        raise
print(coords)   # coords is now a list of integers that were entered

有趣的是,你可以在一个大多数单行中完成上述操作。这是一种更加抒情的方式,因此您可以将其与上述方法进行对比,以了解这意味着什么:

try:
    xyz1 = input("Enter first 3 coordinates (example: 102 36 74): ")
    coords = [int(tkn) for tkn in xyz1.split()]
except ValueError:       # if the entered number was of invalid int format
    print("Invalid integer format: {}".format(tkn))
    raise