Я хочу разделить числа и оператор в строке, как я могу это сделать?

Я использую split и получаю числа, но я не могу получить оператор. Этот код работает, только когда оператор равен «+», в противном случае выдает ошибку!

T = "123+456"
op = '+' or '-'
for i in range(T):
    n = input()
    n1,n2 =  n.split(op)
    print(n1)
    print(n2)
2
gaurav 23 Июн 2019 в 10:35

3 ответа

Лучший ответ

Вы можете использовать регулярное выражение, чтобы найти как числа, так и операторы, присутствующие в строке, через r'(\d+)|([+\-\*/])', который соответствует либо одной или нескольким цифрам, либо оператору из +,-,*,\

import re

def get_num_op(s):

    #Get all matches
    matches = re.findall(r'(\d+)|([+\-\*/])', s)
    #[('123', ''), ('', '+'), ('456', ''), ('', '*'), ('7', ''), ('', '*'), ('8', '')]

    #Remove empty matches from the list
    matches = [item for t in matches for item in t if item]

    return matches

print(get_num_op("123+456"))
print(get_num_op("123+45*6/7"))

Выход будет

['123', '+', '456']
['123', '+', '45', '*', '6', '/', '7']
3
Devesh Kumar Singh 23 Июн 2019 в 08:10

Этот код прекрасно работает с "+","-","*","/" этим набором операторов. Он даст вам operand1, operand2 и operator.

user_input="12-23"
operator_list = ["+","-","*","/"]

input_list = [x for x in user_input]

for operator in operator_list:
    if operator in input_list:
        index = input_list.index(operator)
        break

operand1 = user_input[:index]
operand2 = user_input[index+1:]
print(operand1 , operator, operand2)

< Сильный > Выход

12 - 23

1
0xPrateek 23 Июн 2019 в 07:47

Вы можете разделить это с помощью re:

import re

T = "123+456"
re.split('((\w)[0-9]*)', T)

out:['', '123', '+', '456', '']
2
RaminNietzsche 23 Июн 2019 в 08:12