我遇到了这段代码的麻烦。我刚开始使用Python 2.7进行编程,我想提供一些帮助。
以下是代码:
create database ivs;
用户名也必须包含一个数字。如果字符数为0,我想让用户再次输入用户名。 谢谢!
答案 0 :(得分:2)
这可能是一个解决方案:
from __future__ import print_function
while True:
username = raw_input("Please give me a username: ")
if not any(c in username for c in '0123456789'):
print("Username needs to contain at least one number.")
continue
if len(username) >= 8:
print("Well done")
elif len(username) <= 1:
print("More characters please.")
print("Please try again, input your username again.")
continue
break
继续询问用户while
循环,直到获得所需内容。
检查用户名是否包含至少一个数字:
>>> any(c in 'abc' for c in '0123456789')
False
>>> any(c in 'abc1' for c in '0123456789')
True
这部分是所谓的生成器表达式:
>>> (c in 'abc' for c in '0123456789')
<generator object <genexpr> at 0x10aa339e8>
可视化它正在做什么的最简单方法是将其转换为列表:
>>> list((c in 'abc' for c in '0123456789'))
[False, False, False, False, False, False, False, False, False, False]
>>> list((c in 'abc1' for c in '0123456789'))
[False, True, False, False, False, False, False, False, False, False]
它允许c
遍历0123456789
的所有元素,即依次采用值0
,1
,... 9
,检查此值是否包含在abc
。
如果任何元素为真,则内置any会返回True
:
如果iterable的任何元素为true,则返回
True
。如果iterable为空,则返回False
。
检查字符串中数字的另一种方法是使用正则表达式。模块re提供此功能:
import re
for value in ['abc', 'abc1']:
if re.search(r'\d', value):
print(value, 'contains at least one digit')
else:
print(value, 'contains no digit')
打印:
abc contains no digit
abc1 contains at least one digit
您可以将此功能放在一个函数中(根据评论中OP的要求):
def ask_user_name():
while True:
username = raw_input("Please give me a username: ")
if not any(c in username for c in '0123456789'):
print("Username needs to contain at least one number.")
continue
if len(username) >= 8:
print("Well done")
elif len(username) <= 1:
print("More characters please.")
print("Please try again, input your username again.")
continue
break
return username
print(ask_user_name())
答案 1 :(得分:0)
您可以尝试这样的事情:
import re
def check(name):
if bool(re.search(r'\d', name)) and name != '' and len(name) > 4:
return 1
else:
return 0
while True:
username = raw_input("Please give me a username=>")
if check(username) == 1:
print "Username ok"
break
else:
print "Username needs at least 1 digit or too short. Try again"
我设法涵盖空格的情况和包含至少一位数的用户名。我使用了正则表达式。希望有所帮助!
最好的问候