python 2.7用户名,最小和最大

时间:2016-01-17 09:40:10

标签: python python-2.7 input

我遇到了这段代码的麻烦。我刚开始使用Python 2.7进行编程,我想提供一些帮助。

以下是代码:

create database ivs;

用户名也必须包含一个数字。如果字符数为0,我想让用户再次输入用户名。 谢谢!

2 个答案:

答案 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的所有元素,即依次采用值01,... 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"

我设法涵盖空格的情况和包含至少一位数的用户名。我使用了正则表达式。希望有所帮助!

最好的问候