首页 > 解决方案 > 我可以输入一个只能输入带空格的名称的变量吗?

问题描述

我正在使用 python 3.6.5 我想输入一个变量,该变量可以取有空格的人的名字。这是我现在的代码:

def addition():
    with open('Directory.csv','a',newline='') as file:
        w=csv.writer(file,delimiter=',')
        def names():
            name=input('Enter Name     :')
            n=0
            for i in name:
                if i.isalpha() or i.isspace():
                    n+=0
                else:
                    n+=1
            if n==0:
                return name
            else:
                print('Error')
            return names()
        name=names()

但是当我在没有输入任何值的情况下按 enter 时,它仍然接受它:

Enter Value of k     :     2
Enter Name     :
Enter Year of Birth     :

我的代码应该是什么来纠正这个问题?

标签: python

解决方案


这里的基本问题是,如果为空,则循环for i in name:不会运行,保持为零。解决此问题的侵入性最小的方法是检查以下内容:namenif

if name and n == 0:

我建议进行其他改进,首先是删除递归调用以支持循环。用户可以通过多次输入错误字符来触发堆栈溢出。

您可以尽早跳出循环,而不是计算坏字符。这完全消除了您对n

def names():
    while True:
        name = input('Enter Name: ')
        if name:
            for i in name:
                if not i.isalpha() or not i.isspace():
                    break
            else:
                return name
        print('Error')

这里的子句与循环else正确匹配。for仅当循环没有运行代码时,这是一个巧妙的 Python 技巧break

检查字符串是否仅包含字母和空格的手动方法较少。最流行的可能是标准库支持的正则表达式。这将是一个简单的正则表达式:

import re

...

name_pattern = re.compile('[a-zA-Z ]+')

...

def names():
    while True:
        name = input('Enter Name: ').strip()
        if name_pattern.fullmatch(name):
            return name
        print('Error')

推荐阅读