簡體   English   中英

不能做負數的減法

[英]Cant do subtractions with negative numbers

print('=====CALCULADORA==========')
conta = str(input('')).strip()
operadores = ('+', '-', 'x', '/')
for o in range(0,4):
    if operadores[o] in conta[1:len(conta)]:
        if operadores[o] == '+':
            print(f'{conta[0:conta.find("+")].strip()} + {conta[conta.find("+") + 1:].strip()} = {int(conta[0:conta.find("+")]) + int(conta[conta.find("+") + 1:])}')
        if operadores[o] == '-':
            print(f'{conta[0:conta.find("-")].strip()} - {conta[conta.find("-") + 1:].strip()} = {int(conta[0:conta.find("-")]) - int(conta[conta.find("-") + 1:])}')

我正在創建一個簡單的計算器代碼。

加法有效,但是當我嘗試執行 -4-6 之類的操作時,程序無法正常工作。 出現錯誤,說:“ ValueError:以 10 為底的 int() 的無效文字:''”

該代碼應該正確地執行表達式,它特別有效,似乎問題出在我重復運算符時。 -4 + 3 或 +4 - 3 實際上有效,但 +4 + 3 或 -4-3 無效。

仔細查看輸入'-4-6'時代碼的作用。

首先是數據輸入:

conta = str(input('')).strip()

這按預期工作,盡管這會做完全相同的事情:

conta = input().strip()

然后是運算符的定義,然后循環遍歷它:

operadores = ('+', '-', 'x', '/')
for o in range(0,4):
    ...  # code using operadores[o]

這也有效,盡管它再次比需要的更復雜:

operadores = '+-x/'
for o in operadores:
    ...  # code using o as the current operator

然后是有問題的部分:

    if operadores[o] in conta[1:len(conta)]:

您專門跳過第一個字符,可能是為了避免在開始時將-檢測為實際操作員。 但是, -仍然存在於'-4-6'中。

然后,稍后:

        if operadores[o] == '-':
            print(f'{conta[0:conta.find("-")].strip()} - {conta[conta.find("-") + 1:].strip()} = {int(conta[0:conta.find("-")]) - int(conta[conta.find("-") + 1:])}')

在這里,您使用conta.find("-")來查找運算符的 position,但當然在這里它實際上找到了第一個- ,而不是第二個。

您可以像這樣修復此代碼:

print('=====CALCULADORA==========')
conta = str(input('')).strip()
operadores = '+-x/'
for o in operadores:
    if o in conta[1:len(conta)]:
        if o == '+':
            print(f'{conta[0:conta[1:].find("+")+1].strip()} + {conta[conta[1:].find("+")+2:].strip()} = {int(conta[0:conta[1:].find("+")+1].strip()) + int(conta[conta[1:].find("+")+2:].strip())}')
        if o == '-':
            print(f'{conta[0:conta[1:].find("-")+1].strip()} - {conta[conta[1:].find("-")+2:].strip()} = {int(conta[0:conta[1:].find("-")+1].strip()) - int(conta[conta[1:].find("-")+2:].strip())}')

然而,由於大量重復,這仍然非常復雜。 它也不考慮像'4--2'這樣的東西,它是從4中減去-2 ,結果應該是6 不要介意更長的表達式,例如'4+3+2'

將輸入字符串分解為標記然后按應有的方式執行操作更有意義。 因此, '-4+3+2'將分解為['-4', '+', '3', '+', '2']並且您可以計算出遍歷它的結果。

當然,這個問題以前已經解決過很多次,所以有更好的策略的好例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM