【问题标题】:python 2.7 username with minimum and max具有最小值和最大值的python 2.7用户名
【发布时间】:2023-03-13 22:07:01
【问题描述】:

我在处理这段代码时遇到了问题。我刚开始使用 Python 2.7 进行编程,希望得到一些帮助。

代码如下:

username=raw_input("Please give me a username")
def gebruikersnaam():
    username(len)

    if len(username) >= 8:
        print "Well done"
    elif len(username) <= 1:
        print "More characters please" #Please try again, input your username again.

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

【问题讨论】:

标签: python python-2.7 input


【解决方案1】:

基础版

这可能是一个解决方案:

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

如果可迭代的任何元素为真,则返回 True。如果迭代为空,则返回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())

【讨论】:

  • 谢谢,但代码我必须使用 def 语句。我想不通。
  • 非常感谢,您解决了我的问题。非常容易阅读代码。尽管我不明白“如果没有的话(c in username for c in '0123456789')这行:”
  • 很好,它有帮助。顺便说一句,如果它解决了您的问题,您可以accept 一个答案。我将添加更多关于any这一行的解释。
  • 好的,谢谢,我该怎么做。我不能接受答案,我没有看到它的按钮。它位于何处。顺便说一句,我再次尝试了您的代码。但如果我输入一个字符,例如 a4 或 c4。这些打印功能将不起作用: print("请输入更多字符。") print("请重试,再次输入您的用户名。")
  • 您是否在文件的第一行添加了from __future__ import print_function
【解决方案2】:

你可以试试这样的:

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"

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

最好的问候

【讨论】:

  • 谢谢,但代码我必须使用 def 语句。我想不通
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多