乘法和除法破坏了我的代码

时间:2019-01-28 22:02:18

标签: python

当我进行加法和减法运算时,计算器会工作,而当我进行除法和乘法运算时,计算器会完全损坏。对代码的注释更深入

我曾尝试编辑列表中的数字/变量,但是如果我解决了乘法和除法问题,则会破坏加法和减法。

s=input('What would you like to calculate? ') 

index = s.find("-") #goes through the equation to find it, and numbers it

if index == -1: 
    index = s.find('+') 

elif index == -1: 
    index=s.find('*')

elif index == -1: 
    index = s.find('/') 
if index == -1: 
    index = s.find('+')

op = s[index] # defines index as op 
lp = len(s) #defines the length of it as lp

p1 = s[0:index] #set variable for beginning through the operator 

sign = s[index] #this defines the sign 

p2=s[index+1:lp]#this goes from the number past the sign to the end 

print(p1) #these three are just to visualize

print(sign) #each individual part of the equation

print(p2) #for + and - it shows each part correctly, for * or / doesn't 

if sign == '+': #this is all the code that does the math 
    ans = int(p1)+int(p2) #variable that is defined as the answer 

elif sign == '-': 
    ans = (int(p1)-int(p2)) 

elif sign == '*': 
    ans = (int(p1)*int(p2)) 

elif sign == '/': 
    ans = (int(p1)/int(p2)) 

else: 
    print ('I do not understand') 

print (p1,sign,p2,'=',ans) #for the user, visualizes equation

当我输入2/2时,我应该得到1,但我却得到一个错误代码。当我在单独的变量前面放一个打印语句时,我应该得到2 / 2 但是相反,我得到类似的东西: 2 / 2 2/2 当我去做,我得到了 10 + 10 正确的

2 个答案:

答案 0 :(得分:1)

此代码中有几个错误:

index = s.find("-") 

if index == -1: 
    index = s.find('+') 

elif index == -1: 
    index=s.find('*')

elif index == -1: 
    index = s.find('/') 
if index == -1: 
    index = s.find('+')

首先,最底部的if语句是重复的,因此请立即将其删除。

接下来,考虑一下elif语句的作用。这是 else if 的简写形式,表示这样的代码:

if index == -1:
elif index == -1:
elif index == -1:

是自动错误的。 “如果index为-1,则如果index为-1,否则,如果index为-1”。

控制流不允许在ifelif之间执行任何其他语句。执行语句的唯一方法是当其中一个条件匹配时,这将意味着由于匹配而停止对elif/else个替代项的求值。

我怀疑您有最下面的代码块(if ... s.find('+')),并且您插入了其他代码以尝试添加额外的操作。实际上,您以前使用的是简单的if语句。对于其他情况,只需复制它们即可:

index = s.find('-')
if index == -1:
    index = s.find('+')
# Note: no ELSE here, just another 'if'
if index == -1:
    index = s.find('*')
if index == -1:
    index = s.find('/')
if index == -1:
    print("Ack! No operator found")

此处的区别在于,每个if语句在控制流中都会创建一个 fork 。但是下一条if语句将两个替代分支重新组合在一起:无论第一个if是对还是假,第二个if都会运行

答案 1 :(得分:0)

我认为您想这样做

...
index = s.find("-") #goes through the equation to find it, and numbers it

if index == -1: 
    index = s.find('+') 

if index == -1: 
    index=s.find('*')

if index == -1: 
    index = s.find('/') 
if index == -1: 
    index = s.find('+')
...