Dar*_*han -3 python calculator
我目前正在使用这个Python代码:
valid_chars = "0123456789-+/* \n";
while True:
x = "x="
y = input(" >> ")
x += y
if False in [c in valid_chars for c in y]:
print("WARNING: Invalid Equation");
continue;
if(y == "end"):
break
exec(x)
print(x)
Run Code Online (Sandbox Code Playgroud)
当用户执行类似这样的操作时崩溃:9/0.错误:
ZeroDivisionError: division by zero
Run Code Online (Sandbox Code Playgroud)
有什么方法可以防止用户将某些东西除以零?
您可以除了ZeroDivisionError像这样
x = "1/0"
try:
exec(x)
except ZeroDivisionError:
print ("WARNING: Invalid Equation")
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Python 2.x,则输入数据将在此处进行评估
y = input(" >> ")
Run Code Online (Sandbox Code Playgroud)
所以,在Python 2.x中,你应该使用
y = raw_input(" >> ")
Run Code Online (Sandbox Code Playgroud)
除此之外,您可以改进这段代码
if False in [c in valid_chars for c in y]:
Run Code Online (Sandbox Code Playgroud)
像这样
valid_chars = set("0123456789-+/* \n") # We make this a set, because
if not all(c in valid_chars for c in y): # c in valid_chars will be in O(1)
Run Code Online (Sandbox Code Playgroud)
正如@gnibbler,在评论部分中建议的那样,if条件可以这样写
if any(c not in valid_chars for c in y): # c in valid_chars will be in O(1)
Run Code Online (Sandbox Code Playgroud)
另一个建议是,不需要使用半冒号来标记Python中的行尾:)
| 归档时间: |
|
| 查看次数: |
6875 次 |
| 最近记录: |