提问人:TheAX 0198 提问时间:10/6/2023 最后编辑:TheAX 0198 更新时间:10/6/2023 访问量:82
Fonction 跳过布尔值,不计算 [duplicate]
Fonction skip bool and doesn't calculate [duplicate]
问:
欢迎我的痛苦。
我是编码:)的新手/初学者 我一直在尝试编写一个计算器来检测 所提供输入中的异常。
我的第一个问题是忽略任何字母和 这很容易用 .isalpha() 修复。
现在我的第二个问题是保留符号(例如:!@#$%?) 離開。我从这里查找代码以尝试解决它 通过创建一个带有符号的字符串 (sym),然后比较 num1 和 num2 一起查看是否有任何不需要的 其中的符号。如果有,它会将布尔值 (NoSym) 设置为 false 并通过验证 NoSym 的值来得出结论 说出函数是否应该执行或否。
但是现在如果我尝试运行它,系统将跳过 过度验证检查点或进行数学运算。
我很乐意接受任何帮助,因为我想 为我未来的项目发展我的编程技能:)
代码:
sym = "!@#$%?"
fo = ["+", "-", "*", "/"]
NoSym = True
def calc():
cal = input()
#(...)
if cal == "*":
num1 = input("num1 - ")
num2 = input("num2 - ")
if num1.isalpha() or num2.isalpha():
print("No variables.")
calc()
for i in sym:
if i in num1 or num2:
NoSym = False
break
if NoSym == False:
print("No symbols")
else:
num1 = float(num1)
num2 = float(num2)
ans = num1 * num2
print(ans)
calc()
if cal != fo[0] and fo[1] and fo[2] and fo[3]:
print("no")
calc()
答:
0赞
Tiago Iesbick
10/6/2023
#1
在检查是否满足变量为 false 的条件之前,您没有初始化该变量,因此请将 放在 之前的行中。
我认为最好使用正则表达式来检查无效字符,如下所示:NoSym = True
NoSym = True
for i in sym:
import re
p = re.compile(r'[^!@#\$%\?]')
s = 'agbnjash!gg@@#$$%?ii#'
for i in s:
if bool(re.search(p,i)):
print(i)
结果:
a
g
b
n
j
a
s
h
g
g
i
i
如果您希望 num1 和 num2 仅按数字(包括十进制数)格式化,您可以执行如下操作:
import re
p = re.compile(r'^\d+(\.\d+)?$')
num1 = '4556tree888'
num2 = '76673.98'
if bool(re.search(p,num1)) and bool(re.search(p,num2)):
print('Calculate')
else:
print('Please input valid numbers')
关于这句话,我想说的最后一件事是:
if cal != fo[0] and fo[1] and fo[2] and fo[3]:
将其更改为:
if cal != fo[0] and calc != fo[1] and calc != fo[2] and calc != fo[3]:
评论
0赞
Ignatius Reilly
10/6/2023
你不需要 .每当发生时,如果还不是布尔值,它就会被转换。bool
if <condition>
<condition>
评论
and
并且不要像他们用英语那样工作。这已经问了一千次了,但我不知道重复。or
if i in num1 or num2
除非是空字符串。True
num2