计算器通过以下算法工作:
您可以在数字和运算之间加一个空格,然后计算出结果。
当我输入此代码时,python表示calset[1]
索引超出范围,这没有任何意义。
我该怎么办?
这是我得到的错误:
Traceback (most recent call last):
File `"D:/pycharm projects/helloworld/calc 2.py"`, line 5, in <module>
while
calset[1] != '**' or '*' or '+' or '-' or '/':
IndexError: list index out of range"
代码:
cal = input("Calculation Required: ")
calset = cal.split(' ')
y = 0
while calset[1] != '**' or '*' or '+' or '-' or '/':
if '**' in calset:
for i in calset:
if (i == "**"):
x = calset.index("**")
y = float(calset[x - 1]) ** float(calset[x + 1])
del calset[x - 1]
del calset[x - 1]
del calset[x - 1]
calset.insert(x - 1, y)
elif '/' in calset:
for i in calset:
if (i == "/"):
x = calset.index("/")
y = float(calset[x - 1]) / float(calset[x + 1])
del calset[x - 1]
del calset[x - 1]
del calset[x - 1]
calset.insert(x - 1, y)
elif '*' in calset:
for i in calset:
if (i == "*"):
x = calset.index("*")
y = float(calset[x - 1]) * float(calset[x + 1])
del calset[x - 1]
del calset[x - 1]
del calset[x - 1]
calset.insert(x - 1, y)
elif '+' in calset:
for i in calset:
if (i == "+"):
x = calset.index("+")
y = float(calset[x - 1]) + float(calset[x + 1])
del calset[x - 1]
del calset[x - 1]
del calset[x - 1]
calset.insert(x - 1, y)
elif '-' in calset:
for i in calset:
if (i == "-"):
x = calset.index("-")
y = float(calset[x - 1]) - float(calset[x + 1])
del calset[x - 1]
del calset[x - 1]
del calset[x - 1]
calset.insert(x - 1, y)
else:
calset.clear()
cal = input("Calculation Required: ")
calset = cal.split(' ')
print(calset[0])
答案 0 :(得分:1)
这是一个简洁的版本,效果很好。它不处理运算符优先级,并且假定输入的格式正确,但是它将计算形式为“ v1 [
cal = input("Calculation Required: ")
calset = cal.split(' ')
ops = {
'**': lambda v1, v2: v1 ** v2,
'+': lambda v1, v2: v1 + v2,
'-': lambda v1, v2: v1 - v2,
'*': lambda v1, v2: v1 * v2,
'/': lambda v1, v2: v1 / v2,
}
while len(calset) > 2:
v1 = float(calset[0])
op = calset[1]
v2 = float(calset[2])
if op not in ops:
raise Exception("Bad Op: " + op)
calset[0:3] = [ops[op](v1, v2)]
print(calset[0])
样品运行:
Calculation Required: 2 ** 3 + 2 * 5
50.0
答案 1 :(得分:0)
没有涵盖全部情况,例如用户输入两个空格或两个运算符,则需要编写所有可能发生的逻辑检查。 如我所做的很少的更改,以便您可以获取输出并建立更多的高级校准。 在您的溶胶中,删除列表后,删除列表的索引为1 因为您从列表中删除+,/ etc并将新列表分配给只有一个索引0的结果,所以它给您error。尝试使用'in'(not =='**'或'*'或'+'或'-'或'/')
这是更新的代码...
cal = input("Calculation Required: ")
calset = cal.split(' ')
print(calset)
y = 0
lng=len(calset)
index=1
while calset[index] == '**' or '*' or '+' or '-' or '/':
if '**' in calset:
for i in calset:
if (i == "**"):
x = calset.index("**")
y = float(calset[x - 1]) ** float(calset[x + 1])
del calset[x - 1]
del calset[x - 1]
del calset[x - 1]
calset.insert(x - 1, y)
elif '/' in calset:
for i in calset:
if (i == "/"):
x = calset.index("/")
y = float(calset[x - 1]) / float(calset[x + 1])
del calset[x - 1]
del calset[x - 1]
del calset[x - 1]
calset.insert(x - 1, y)
elif '*' in calset:
for i in calset:
if (i == "*"):
x = calset.index("*")
y = float(calset[x - 1]) * float(calset[x + 1])
del calset[x - 1]
del calset[x - 1]
del calset[x - 1]
calset.insert(x - 1, y)
elif '+' in calset:
for i in calset:
if (i == "+"):
x = calset.index("+")
y = float(calset[x - 1]) + float(calset[x + 1])
del calset[x - 1]
del calset[x - 1]
del calset[x - 1]
calset.insert(x - 1, y)
elif '-' in calset:
for i in calset:
if (i == "-"):
x = calset.index("-")
y = float(calset[x - 1]) - float(calset[x + 1])
del calset[x - 1]
del calset[x - 1]
del calset[x - 1]
calset.insert(x - 1, y)
else:
calset.clear()
cal = input("Calculation Required: ")
calset = cal.split(' ')
lng=len(calset)
if lng == 1 :
index=0
print(calset)
print(lng)
print(calset[0])
答案 2 :(得分:0)
我还制作了另一个更简单的计算器
z = float(input('Number: '))
while True:
operation = input('Operation: ')
if operation == "clear":
print(0)
z = float(input('Number: '))
elif operation == "p":
n = float(input('Number: '))
z = z + n
print(z)
elif operation == "m":
n = float(input('Number: '))
z = z * n
print(z)
elif operation == "d":
n = float(input('Number: '))
z = z / n
print(z)
elif operation == "s":
n = float(input('Number: '))
z = z - n
print(z)
elif operation == "e":
n = float(input('Number: '))
z = z ** n
print(z)
else:
print('Error: Incorrect Operation')
z = float(input('Number: '))