【发布时间】:2017-11-30 06:34:10
【问题描述】:
我有以下代码,虽然它仅用于检查一个函数(比如小写字母),但在引入两个条件时它会停止工作。有人可以出于教学目的阐明为什么会这样,给出解决方案并解释原因。注意:这不是任何其他问题的重复,因为其他示例没有明确处理字符串布尔命令。
预期结果:仅当用户名输入为小写且包含数字时,才应生成电子邮件地址。 (例如,username123 可以接受,USER 不可以,USER123 不可以)
解决方案/答案必须简单,最好不包括重写代码(即尽可能不重写函数和引入参数等)
代码:
def main():
print("*************************** Create an e-mail address*********************")
print("*************************** ********************** ")
username=input("Please enter your desired username:" )
if username.islower() and username.isdigit():
email=username+"@gmail.com"
print("Your unique email address is now:", email)
else:
print("Your username needs to be lower case ...............")
main()
main()
如前所述,以下代码(仅检查 islower)可以工作....
if username.islower():
email=username+"@gmail.com"
print("Your unique email address is now:", email)
else:
print("Your username needs to be lower case ...............")
main()
工作输出:
*************************** Create an e-mail address*********************
*************************** **********************
Please enter your desired username:USER
Your username needs to be lower case ...............
*************************** Create an e-mail address*********************
*************************** **********************
Please enter your desired username:user
Your unique email address is now: user@gmail.com
>>>
更新: 有人认为是因为缺少 (),但事实并非如此:
def main():
print("*************************** Create an e-mail address*********************")
print("*************************** ********************** ")
username=input("Please enter your desired username:" )
if username.islower() and username.isdigit():
email=username+"@gmail.com"
print("Your unique email address is now:", email)
else:
print("Your username needs to be lower case ...............")
main()
main()
错误输出:
*************************** Create an e-mail address*********************
*************************** **********************
Please enter your desired username:USER
Your username needs to be lower case ...............
*************************** Create an e-mail address*********************
*************************** **********************
Please enter your desired username:user
Your username needs to be lower case ...............
*************************** Create an e-mail address*********************
*************************** **********************
Please enter your desired username:user123
Your username needs to be lower case ...............
*************************** Create an e-mail address*********************
*************************** **********************
Please enter your desired username:
删除递归 main() 调用也不会改变:
def main():
print("*************************** Create an e-mail address*********************")
print("*************************** ********************** ")
username=input("Please enter your desired username:" )
if username.islower() and username.isdigit():
email=username+"@gmail.com"
print("Your unique email address is now:", email)
else:
print("Your username needs to be lower case and contain digits...............")
main()
错误输出:
Please enter your desired username:USERNAME
Your username needs to be lower case and contain digits...............
>>> main()
*************************** Create an e-mail address*********************
*************************** **********************
Please enter your desired username:username123
Your username needs to be lower case and contain digits...............
>>>
使用 OR 代替 AND 也不起作用
下面的输出,当更改为 OR 时
Please enter your desired username:USERNAME
Your username needs to be lower case and contain digits...............
>>> main()
*************************** Create an e-mail address*********************
*************************** **********************
Please enter your desired username:username
Your unique email address is now: username@gmail.com
>>>
使用 set(range(10)).intersection 在下面尝试另一个建议的答案:
以下 - 仍然无法正常工作:
def main():
print("*************************** Create an e-mail address*********************")
print("*************************** ********************** ")
username=input("Please enter your desired username:" )
#if username.islower() or username.isdigit():
if username.islower() and set(range(10)).intersection(username):
email=username+"@gmail.com"
print("Your unique email address is now:", email)
else:
print("Your username needs to be lower case and contain digits...............")
main()
输出
>>> main()
*************************** Create an e-mail address*********************
*************************** **********************
Please enter your desired username:user
Your username needs to be lower case and contain digits...............
>>> main()
*************************** Create an e-mail address*********************
*************************** **********************
Please enter your desired username:username123
Your username needs to be lower case and contain digits...............
>>>
【问题讨论】:
-
您忘记了第一个示例中 islower() 函数调用的括号。
-
对不起,我已经在代码中添加了。那是在原始代码中 - 并且不起作用。运行它看看 -!
-
你的第一个代码 sn-p 是递归的;你打电话给
main()main() -
克里斯,是的,但删除它并不能解决问题(请参阅更新)
-
'and username.isdigit()' ... 'user' 对此是错误的。你的意思是'而不是 username.isdigit()' 并且要求双方都评估为 True
标签: python string function conditional-statements