我想做一個簡單的計算器,你只需輸入“2 2*2”之類的東西,它就會計算出答案。第一步是找到并洗掉我在下面嘗試做的各個數字。
print("Put an equals sign at the end to finish the equation.")
equation = input("Calculate: ")
symbols = [" ","-","*","/","="]
x = 0
for symbols in equation:
subequation = {f"N{x}" : equation[0:equation.find(symbols)]}
x = x 1
print(subequation)
但是當我輸入:
Calculate: 2 2*2=
我沒有得到預期的輸出:
{'N0':'2 ', 'N1':'2*','N2':'2='}
反而:
{'N5': '2 2*2'}
我對python還是很陌生,所以也請告訴我是否有什么我可以做得更好的。謝謝。
uj5u.com熱心網友回復:
有很多小的變化可以得到你添加到你的問題的結果,所以我將逐一介紹。
我創建了一個空字典來存盤你的子方程:subequation = {}
您原來的 for 回圈for symbols in equation:會覆寫您的符號串列,我相信您要做的是遍歷每個符號并檢查它們是否在等式中,您可以使用 for 回圈然后使用 if 陳述句作為以下:
for symbol in symbols:
if symbol in equation:
正如 Jhanzaib Humayun 在評論中提到的那樣,您在每個回圈中都覆寫了您的子方程,而不是添加,因此他們提供了添加到 dict 的代碼,如下所示:
subequation[f"N{x}"]= equation[0:equation.find(symbols)]
但是equation[0:equation.find(symbols)]總是從等式的開頭開始并回傳所有內容(不包括符號),所以會回傳:
{'N0': '2', 'N1': '2 2', 'N2': '2 2*2'}
這不是您想要的,所以我將其更改為:
equation[equation.find(symbol)-1:equation.find(symbol) 1]
現在只包括數字和符號,但正如 Titouan L 評論的那樣,這不適用于多位數的數字,所以我想出了一個last_symbol變數,它將從它正在尋找的符號向后作業以找到最后一個,并在兩者之間保留任何內容。我這樣做如下:
last_symbol = max([i for i in range(equation.find(symbol)-1, 0, -1)
if equation[i] in symbols] [-1])
subequation[f"N{x}"]= equation[last_symbol 1:equation.find(symbol) 1]
這從符號向后作業以查找所有先前符號的索引 ( [i for i in range(equation.find(symbol)-1, 0, -1) if equation[i] in symbols]) 并找到該符號的最大值(即最近的)。我在這個串列中添加了 [-1] 作為第一個符號,不會有前一個符號,當添加到字典時,我已經完成了equation[last_symbol 1:equation.find(symbol) 1],所以對于第一個符號,這將從0:equation.find(symbol) 1
完整的代碼是:
print("Put an equals sign at the end to finish the equation.")
equation = input("Calculate: ")
symbols = [" ","-","*","/","="]
subequation = {}
x = 0
for symbol in symbols:
if symbol in equation:
last_symbol = max([i for i in range(equation.find(symbol)-1, 0, -1)
if equation[i] in symbols] [-1])
subequation[f"N{x}"]= equation[last_symbol 1:equation.find(symbol) 1]
x = x 1
print(subequation)
根據需要回傳以下內容:
{'N0': '2 ', 'N1': '2*', 'N2': '2='}
uj5u.com熱心網友回復:
正如一些評論所提到的,您在subequation每個回圈中都會覆寫您的變數。最重要的是,您的變數symbols被回圈變數覆寫。
為了獲得與您請求相同的輸出,我更改了 for 回圈以遍歷每個字符并檢查它是否與 list 的符號匹配symbols。
print("Put an equals sign at the end to finish the equation.")
equation = input("Calculate: ")
symbols = [" ", "-", "*", "/", "="]
subequation = {}
x = 0
for i in range(len(equation)):
if equation[i] in symbols:
subequation[f"N{x}"] = equation[x:i 1]
x = i 1
print(subequation)
輸出如下:
{'N0': '2 ', 'N2': '2*', 'N4': '2='}
uj5u.com熱心網友回復:
正如 Emi OB 評論的那樣,您在 for 回圈中覆寫符號以及子方程。
我想你的意思是這樣的:
print("Put an equals sign at the end to finish the equation.")
equation = input("Calculate: ")
symbols = [" ","-","*","/","="]
subequation = {f"N{x 1}" : equation[0:equation.find(symbols[x])] for x in range(len(symbols))}
print(subequation)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/465158.html
下一篇:回圈中的嵌套字典
