[英]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.