2016-09-08 1 views
0

Я пытаюсь разбить строку ввода xyz на 3 токена и затем разделять на 3 целых числа, называемые x, y и z. Я хочу, чтобы это сделало так, чтобы я делал меньше ввода, а затем мог использовать их для координат mc.setblocks(x1, y1, z1, x, y, z, BlockId). Как его отделить, чтобы оно получилось как 3 разных ints и \ или разделило их на токены? Я знаю, как это сделать в java, но я не знаю, как это сделать в python. Это должно выглядеть примерно так:Как разбить входную строку на отдельные используемые целые числа в python

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

Гарантировано, что они введут 3 действительных цифры, разделенных пробелами? – gowrath

+0

Я буду использовать исключение, если это произойдет – TheLittleCoder

+0

Но будут ли они всегда разделены пробелами? Вы можете использовать метод string.split(). – gowrath

ответ

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") 

Если у Вас есть больше чем только три координаты быть введены, вы бы разметить вход и петлю над ним, превращая каждый маркер в междунар и добавления его в список:

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 
1

Вы можете взять строку, в xyz1 и разделить его и превратить их в целые числа, как этот

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

Если вы не хотите, чтобы эти целые числа в список и предпочли бы хранить их в отдельные переменные, просто сделать это

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

xyz1 - это строка, и мне нужно отделить ее, а затем повернуть значения разделенных токенов на 3 ints. – TheLittleCoder

+1

Просто короткое примечание: это выражение генератора отлично подходит для решения задачи. Поскольку я думаю, что OP нуждается в дополнительной обработке ошибок и форматов, более общий подход, использующий for-loop, будет более гибким. – albert

+1

@ TheLittleCoder вы пробовали? Я думаю, что он выполнит то, о чем вы просите. –

1

Вы можете использовать split() метод string объекта, whic h по умолчанию разбивается на символы пробелов. Это даст вам список отдельных строк. Чтобы преобразовать каждую строку в integer, вы можете использовать понимание. Если предположить, что вход находится в правильной форме, следующий один лайнер будет делать это:

x, y, z = (int(coord) for coord in xyz1.split()) 
Смежные вопросы