检查python中两个函数的字符串是否为真(字符串操作)

检查python中两个函数的字符串是否为真(字符串操作),python,string,function,conditional-statements,Python,String,Function,Conditional Statements,我有下面的代码,虽然它只用于检查一个函数(比如小写),但当引入两个条件时,它就会停止工作。是否有人能为教学目的提供一些线索,解释为什么会出现这种情况,给出解决方案,并解释理由。注意:这不是任何其他问题的重复,因为其他示例没有显式处理字符串布尔命令 预期结果:仅当用户名输入为小写且包含数字时,才应生成电子邮件地址。(例如,username123可接受,USER不可接受,USER123不可接受) 解决方案/答案必须简单,理想情况下不包括代码重写(即不重写函数和引入参数等,如果可能的话) 代码: de

我有下面的代码,虽然它只用于检查一个函数(比如小写),但当引入两个条件时,它就会停止工作。是否有人能为教学目的提供一些线索,解释为什么会出现这种情况,给出解决方案,并解释理由。注意:这不是任何其他问题的重复,因为其他示例没有显式处理字符串布尔命令

预期结果:仅当用户名输入为小写且包含数字时,才应生成电子邮件地址。(例如,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()
*************************** 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
>>> 
*************************** 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:
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...............
>>> 
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()
如前所述,下面的代码(仅检查孤岛者)工作正常

   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()
工作输出:

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 unique email address is now: user@gmail.com
>>> 
*************************** 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:
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...............
>>> 
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()
更新: 有人认为这是由于缺少(),但事实并非如此:

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()
输出错误:

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 unique email address is now: user@gmail.com
>>> 
*************************** 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:
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...............
>>> 
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()调用也不会改变任何事情:

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 unique email address is now: user@gmail.com
>>> 
*************************** 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:
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...............
>>> 
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()
输出错误:

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 unique email address is now: user@gmail.com
>>> 
*************************** 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:
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...............
>>> 
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()
使用或代替,并且也不起作用

当更改为或时,输出如下

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
>>> 
使用集合(范围(10))尝试下面的另一个建议答案。交叉点:

以下内容-仍不工作:

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 unique email address is now: user@gmail.com
>>> 
*************************** 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:
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...............
>>> 
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...............
    >>> 

您可以创建一个简单的函数

def hasNumbers(inputString):
      return any(char.isdigit() for char in inputString)
.
.
.
if username.islower() and hasNumbers(username):
.
.
.
然后在if语句中使用它。这是我从中找到它的源:。 如果愿意,还可以使用正则表达式,使用re模块。但是对于像这样小的东西,我建议你使用一个单独的函数。这是一个更简单的解决方案

正则表达式版本:

import re

def main():
   print("*************************** Create an e-mail address*********************")
   print("***************************                                               ********************** ")

   username=str(input("Please enter your desired username:" ))

   pat = re.compile(r'\d')

   if username.islower() and re.search(pat, username):
         email=username+"@gmail.com"
         print("Your unique email address is now:", email)
   else:
         print("Your username needs to be lower case ...............")
         main()

main()

这条线的问题

如果username.islower()和username.isdigit()

就是说,
isdigit()
仅当整个字符串为数字时返回True,而
islower()
显然仅当整个字符串为小写字符时返回True。这意味着该语句将始终失败,因为这两个条件都不可能为真

如果我们重新考虑一下逻辑,我们需要测试的是电子邮件只包含字母数字字符(数字和字母),但不包含任何大写字母。这给了我们:


if username.isalnum()和(不是任何(c.isupper()表示用户名中的c)

有人说,代码的问题是如果执行
username.isdigit()
它返回
False
语句,因为变量username没有完全用数字填充,但是,
islower()
没有那么严格:

username = input(' -->> ')
-->> abc123

username.isdigit()
假的

真的

在您的特定情况下,如果有大写字母,您可以忽略警告,因为您可以将它们转换为小写。如果您需要一个同时检查大写字母的解决方案,那么您还应该阅读结尾的附加部分。

如果用户名的结构没有真正困扰您,即您只是希望它同时包含小写字母和数字,那么您可以使用以下方法检查它们是否都存在:

例如,即使
username='A1b2C3'
,它也能很好地工作


但是,如果结构很重要,并且您希望不惜任何代价让数字跟在字母后面,则应将用户名分为两个子集,一个包含字母,另一个包含数字,并检查两者的顺序是否正确。请注意,这只是一种个人方法

  • 首先,我们检查用户名是否可以将其连续分成两组字母和数字,不能多也不能少

  • 其次,我们检查第一个子集是否包含字母,第二个子集是否包含数字

  • 如果满足条件,则我们创建一封电子邮件

代码应如下所示:

import re

print('Example of username: george1337')
username = 'Abc123'; username = username.lower()

if len(re.findall('\d+|\D+', username)) == 2:
    subset_1, subset_2 = [subset for subset in re.findall('\d+|\D+', username)]
else:
    print('Not valid username: see example')

if subset_1.islower() and subset_2.isdigit():
    email = username + '@gmail.com'
    print('Your e-mail address is: {}'.format(email))
else:
    print('Digits must follow letters, not vice versa')
您的电子邮件地址是:abc123@gmail.com

无效用户名:请参见示例


附加部分 好的。如果您希望在有大写字母时发出警告,则不应执行
username=username.lower()
。在第二部分中会自动检查“大写条件”,因为有
If subset_1.islower()
。然后只需添加另一个
打印
,指示不允许使用大写字母。第一部分也是如此


我希望这会有所帮助!

在第一个示例中,您忘记了islower()函数调用的括号。很抱歉,我在代码中添加了括号。这是在原始代码中-并且不起作用。请运行它并查看-!您的第一个代码段是递归的;您在
main()中调用
main()
Chris,是的,但是删除它并不能解决问题(请参见更新)’和username.isdigit()’…“user”对此是错误的。您的意思是“and not username.isdigit()”,并要求双方都计算为true将其更改为“or”而不是“and”也不起作用。请参阅使用输出编辑取决于OP是否打算允许数字用户名:如果不打算将数字用作用户名,则第二部分需要not运算符。我同意。我正在尝试找出他真正想要的输出。哦,我现在明白了。他希望用户名包含小写字母和数字。此链接:使用函数
def hasNumbers(inputString):返回any(inputString中char的char.isdigit())
并使用传递字符串的函数作为参数。然后,您只需更改错误消息。抱歉,*