Python 字符串不允许超过3个空格

Python 字符串不允许超过3个空格,python,python-3.x,string,Python,Python 3.x,String,您好,我是python新手,我想知道是否有更好的方法来确保输入: 不包括任何奇怪的字符,例如(“#%^”) 仅包括字母(也不包括数字) 3-21个字符之间 任何“-”或“\”都将变为空格 输入中允许有3个空格 基本上这是一个城市名称输入,我认为没有一个城市真的那么奇怪,排除了上面的规则之一。如果我错了,或者有更好的方法来看待这个或代码,请告诉我 city = input("where are you from: ").title() cnt_space = 0 city = "".join(x

您好,我是python新手,我想知道是否有更好的方法来确保输入:

  • 不包括任何奇怪的字符,例如(“#%^”)
  • 仅包括字母(也不包括数字)
  • 3-21个字符之间
  • 任何“-”或“\”都将变为空格
  • 输入中允许有3个空格
  • 基本上这是一个城市名称输入,我认为没有一个城市真的那么奇怪,排除了上面的规则之一。如果我错了,或者有更好的方法来看待这个或代码,请告诉我

    city = input("where are you from: ").title()
    cnt_space = 0
    city = "".join(x for x in city if x.isalpha() or x.isspace())
    for i in city:
        if i.isspace():
            cnt_space += 1
    while cnt_space > 3 or len(city) > 22 or len(city) < 3:
        city = input("enter a valid city between 4-21 characters allowed 3 space: ")
        city = "".join(x for x in city if x.isalpha() or x.isspace())
        cnt_space = 0
        for i in city:
            if i.isspace():
                cnt_space += 1
            elif i == "-" or i == "_":
                i = " "
                cnt_space += 1
            else:
                pass
    
    city=input(“你从哪里来:”).title()
    cnt_空间=0
    city=”“.join(如果x.isalpha()或x.isspace(),则x代表城市中的x)
    对于我在城市:
    如果i.isspace():
    cnt_空间+=1
    当cnt_space>3或len(city)>22或len(city)<3时:
    城市=输入(“输入4-21个字符之间的有效城市,允许3个空格:”)
    city=”“.join(如果x.isalpha()或x.isspace(),则x代表城市中的x)
    cnt_空间=0
    对于我在城市:
    如果i.isspace():
    cnt_空间+=1
    如果i==“-”或i==“uu2;”:
    i=“”
    cnt_空间+=1
    其他:
    通过
    
    首先,不要对城市名称进行假设。如果来自“罗马尼亚12月1日”或“埃及斋月10日”的人想要使用您的应用程序,该怎么办?其次,您所说的“更好”是什么意思“您希望做出哪些改进?您当前的实现如何不能满足您的需要?假设可以使用ASCII子集捕获城市名称是错误的。例如,克拉科夫实际上是“克拉科夫”。那么中国的城市呢?还是俄语?看看这个列表:看看有多少城市的名字打破了你的假设。我在第一页找到了一些。嗯,我认为没有限制的自由输入是最好的。您可以去掉尾随空格和前导空格,并用单个空格替换多个空格。如果您知道国家,那么您可能会有一个包含所有现有城市的查找表/数据库,查找最适合的城市,如果没有找到匹配项,则询问用户最适合的城市是否符合预期。但是,即使没有找到匹配项,您也应该允许接受用户输入。也许城市或城镇是新的,或者被重命名了,只是不在您的数据库中好吧,我明白您的意思,但我还有一个问题,这些信息会被发送到一个文件,该文件会返回到脚本中,我如何确保这些信息保持有效?不包括奇怪的名字,如:“a”或“!4^blabla”