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
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 :
我的代码应该是什么来纠正这个问题?
解决方案
这里的基本问题是,如果为空,则循环for i in name:
不会运行,保持为零。解决此问题的侵入性最小的方法是检查以下内容:name
n
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 技巧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')
推荐阅读
- python - 如何在不使用 count 变量或其他方式的情况下使这种 leetcode 方法更高效?
- python - 如何用python中的单个空格替换文本文件中出现的多个空格
- c# - 第 9 个线程上的 SemaphoreSlim 死锁
- python-3.x - 我在 Python 3.9 中不断收到错误,任何人都有解决方案,它没有考虑“导入时间”和“锁定”
- javascript - 错误 Ext JS 7.4.0 Ext.grid.feature.AdvancedGrouping
- c# - 是否可以在 Quartz 中安排作业仅用于手动执行?
- html - 如何使两段文字从两侧环绕图像?
- python - xarray DataSet 作为时间不兼容时间序列的容器
- typescript - 如何通过打字稿中的中间函数传递接口类型?
- mysql - 在mysql中使用纪元日期检索记录