我使用高级计算器Python3编写项目。它由两个模块组成:科学计算器和基本计算器。我第二个有问题。我想创建一个输入,该输入不需要数字和数学符号之间的空格。我不知道该怎么做。 你能帮忙吗?
我仅附加了基本的代码部分,因为科学模块从许多不同文件中导入功能。
from os import system
zbior = input().split(" ")
liczby = []
dzialania = []
if zbior[0] == "-" or zbior[0] == "+":
for i in range(1, len(zbior), 2):
try:
zbior[i] = float(zbior[i])
except ValueError:
print("Pamiętaj o poprawnym wprowadzeniu działania (odzziel liczby spacją), zobacz instrukcję.")
# calls the function which loops back code
elif zbior[0]=="m":
#calls menu function from differnet file
print("menu")
elif zbior[0] == "+" or str(zbior[0])[0] in "0123456789":
for i in range(0, len(zbior), 2):
try:
zbior[i] = float(zbior[i])
except ValueError:
print("Pamiętaj o poprawnym wprowadzeniu działania (odzziel liczby spacją), zobacz instrukcję.")
# calls the function which loops back code
else:
print("Pamiętaj o poprawnym wprowadzeniu działania, zobacz instrukcję.")
# calls the function which loops back code
if zbior[0] == "-" or zbior[0] == "+":
for znak in zbior:
if zbior.index(znak) % 2 != 0:
liczby.append(znak)
else:
dzialania.append(znak)
else:
for znak in zbior:
if zbior.index(znak) % 2 == 0:
liczby.append(znak)
else:
dzialania.append(znak)
ind = 0
suma = liczby[0]
while (ind+1) <= (len(dzialania)):
if dzialania[ind] == "+":
suma += liczby[ind+1]
if dzialania[ind] == "-":
suma -= liczby[ind + 1]
if dzialania[ind] == "*":
suma = suma*liczby[ind+1]
if dzialania[ind] == "/":
if liczby[ind+1] == 0:
print("""Pamiętaj cholero, nie dziel przez zero!!!""")
system('cls')
# calls the function which loops back code
else:
suma = suma/liczby[ind + 1]
if dzialania[ind] == "%":
if liczby[ind+1] == 0:
print("""Pamiętaj cholero, nie dziel przez zero!!!""")
system('cls')
#calls the function which loops back code
else:
suma = suma % liczby[ind + 1]
ind += 1
print(suma)
答案 0 :(得分:0)
我不知道您脚本中的某些单词是什么意思,但是如果我想输入类似2+2
并得到["2", "+", "2"]
的话,我会这样做:
zbior = [x for x in list(input()) if x != " "]
list(input())
分割输入中的每个字符,if x != " "
确保输入中的空白被忽略。
示例:
>>> zbior = [x for x in list(input()) if x != " "]
1+2*3+4
>>> zbior
['1', '+', '2', '*', '3', '+', '4']
答案 1 :(得分:0)
一个简单的带有空格的列表,然后跟随这些字符将很有效。
暂时。
一旦遇到更复杂的表达式,就会遇到很多问题,请改写一个合适的数学表达式计算器。也就是说,如果您真的是说高级计算器。
请考虑以下指南:https://ruslanspivak.com/lsbasi-part1/
到第6部分,您将拥有一个计算器,该计算器可以计算任何左括号少于(
的输入,然后用)
将其括起来,Python的递归深度为1000,它可以增加,但有一个限制。
我的意思是,在第一个"(" * 999
出现之前使用)
的表达式会很好,但是我不希望任何人写出这种怪诞的文字,除非它们是愿意花三年的时间思考一个表达式或编写一个与此相反的数学表达式生成器。 TL; DR-实际上,这东西可以评估您想要的任何东西。当然可以使用高级计算器。
如果您愿意的话,甚至可以继续遵循它并创建自己的解释器,它的速度很慢,而且如果您想要不同的语法,则必须坐一会儿再考虑一下,但是我认为这值得一生中至少要做一次。