我编写了一个基本的程序来进行算术运算,其中用户输入将在一行中,包含两个整数和操作符(+,-,*,/和%),类似于3 + 5
。到目前为止,我写的代码适用于所有正整数但当我试图给出一个负整数时它会抛出IndexError
def calculator(given_input):
cal = []
def operation(given_input):
int_input = given_input.split()
for i in int_input:
if i.isdigit():
cal.append(int(i))
#for addition
if ("+" in given_input):
operation(given_input)
print(cal[0] + cal[1])
#for subraction
if ("-" in given_input):
operation(given_input)
print(cal[0] - cal[1])
#for division
if ("/" in given_input):
operation(given_input)
print(cal[0] - cal[1])
#for multiplication
if ("*" in given_input):
operation(given_input)
print(cal[0] * cal[1])
#for modulous
if ("%" in given_input):
operation(given_input)
print(cal[0] % cal[1])
given_input = input()
calculator(given_input)
假设每个元素都是空格分隔的(不像3+4
),因为您使用的是分隔空间的given_input.split()
,您可以直接使用该元素的索引。另外,不要在每个分支中调用operation
,最好在直接执行代码之前调用它
def calculator(given_input):
cal = []
int_input = given_input.split()
cal.append(int(int_input[0]))
cal.append(int(int_input[2]))
if "+" == int_input[1]:
print(cal[0] + cal[1])
elif "-" == int_input[1]:
print(cal[0] - cal[1])
elif "/" == int_input[1]:
print(cal[0] - cal[1])
elif "*" == int_input[1]:
print(cal[0] * cal[1])
elif "%" == int_input[1]:
print(cal[0] % cal[1])
要处理多种情况,使用空格或非空格内容,请使用re
模块的正则表达式,如(-?d+)s*([+-/*%])s*(-?d+)
(-?d+)
一个可能的负号,然后是数字的数量s*
一个可能的空格量([+-/*%])
+-/*%
s*
一个可能的空格量(-?d+)
一个可能的负号,然后是一个数字量
import re
def calculator(given_input):
int_input = re.search("(-?d+)s*([+-/*%])s*(-?d+)", given_input)
if not int_input:
print("Format error of '", int_input, "'")
return
a, operator, b = int_input.groups()
a, b = int(a), int(b)
if "+" == operator:
print(a + b)
elif "-" == operator:
print(a - b)
elif "/" == operator:
print(a / b)
elif "*" == operator:
print(a * b)
elif "%" == operator:
print(a % b)