Fonction 跳过布尔值,不计算 [duplicate]

Fonction skip bool and doesn't calculate [duplicate]

提问人:TheAX 0198 提问时间:10/6/2023 最后编辑:TheAX 0198 更新时间:10/6/2023 访问量:82

问:

欢迎我的痛苦。

我是编码:)的新手/初学者 我一直在尝试编写一个计算器来检测 所提供输入中的异常。

我的第一个问题是忽略任何字母和 这很容易用 .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()

Python 函数 输入 布尔 运算符

评论

0赞 Mark Ransom 10/6/2023
and并且不要像他们用英语那样工作。这已经问了一千次了,但我不知道重复。or
0赞 Ignatius Reilly 10/6/2023
if i in num1 or num2除非是空字符串。Truenum2
0赞 Codist 10/6/2023
对于本练习,您可能应该避免递归。此外,请举一些您认为有效的输入值的示例

答:

0赞 Tiago Iesbick 10/6/2023 #1

在检查是否满足变量为 false 的条件之前,您没有初始化该变量,因此请将 放在 之前的行中。
我认为最好使用正则表达式来检查无效字符,如下所示:
NoSym = TrueNoSym = Truefor 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
你不需要 .每当发生时,如果还不是布尔值,它就会被转换。boolif <condition><condition>