Python 我可以输入一个只能输入带有空格的名称的变量吗?
我正在使用python 3.6.5 我想输入一个变量,可以用空格表示人的名字。这是我现在的代码: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
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. 你通常会通过向上投票并选择答案来庆祝