【问题标题】:IF statement truth conditionIF 语句真值条件
【发布时间】:2013-09-13 18:07:46
【问题描述】:
我做了一个函数来验证用户参数是否遵循规则(只有带有 A、B、C、D 字母的单词)。
for letter in var:
if letter == 'A' or letter == 'C' or letter == 'C' or letter == 'D':
return True
elif letter == "~" or letter == "!" or letter == "#" or letter == "$" or letter == "%" or letter == "^" or letter == "&" or letter == "*":
return False
else:
return False
我的问题是关于“~!@#$%^&*”字符。如果我进入shell:
function("A&BCD"),结果为真。
有什么问题?
【问题讨论】:
标签:
if-statement
python-3.x
【解决方案1】:
该函数从头开始迭代字符串,因此它首先考虑'A'。 'A' 满足第一个条件,所以函数返回True。它不会继续运行,因为return 会立即结束包含return 语句的函数。
如果您希望您的函数仅在 所有 输入字符都有效的情况下返回 True,请在检查所有字符之前不要以有效大小写返回:
for letter in var:
if letter not in 'ABCD':
# The input contains an invalid character; return immediately.
return False
# Otherwise, everything we've checked so far is OK, but the rest of the
# string might contain invalid characters. Keep going.
# The string had no invalid characters.
return True
【解决方案2】:
为您的 python 版本注释/取消注释末尾的打印行
def check_format(check_string):
validated = True
bad_letters = "~!@#$%^&*"
for letter in bad_letters:
if letter in check_string:
validated = False
break
if validated:
good_letters = "ABCD"
for letter in check_string:
if not letter in good_letters:
validated = False
break
return validated
print(check_format("A&BCD")) #python 3
#print check_format("A&BCD") #python 2
我们检查坏信的部分也是多余的,正如 user2357112 的回答所示,但我把它放在那里是为了告诉你如何去做。