Python 我可以输入一个只能输入带有空格的名称的变量吗?

Python 我可以输入一个只能输入带有空格的名称的变量吗?,python,Python,我正在使用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

我正在使用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     :

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

这里的基本问题是,如果
name
为空,将
n
保留为零,则名称中的i的循环
将不会运行。修复此问题的最小侵入性方法是检查后续的
if

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技巧,仅当循环没有中断时才运行代码

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

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')

我建议去掉不相关的部分。我们不需要查看您的I/O,并且您的打印输出与您的代码不匹配。这是否回答了您的问题@马蒂亚斯。虽然这是个好建议,但它与实际问题完全无关。是的!非常感谢。通过使用输入的字符串长度找到了解决方案。@IvinGeorgi。我添加了一个正则表达式解决方案,这正是代码所需要的。多谢各位much@IvinGeorgi. 你通常会通过向上投票并选择答案来庆祝