我只是从python开始,需要一些帮助来理解逻辑。 正在编写的微程序将要求用户输入名称,并验证名称是否包含空格,返回错误并要求用户重新输入。 (我知道我可以使用isalpha()函数实现它),但是我想知道我在这里做错了什么,该程序是第一次运行,在我重新输入名称(即使有空格)之后,执行将会发生。 预先感谢
s = input("Please enter your name: ")
def has_space(item):
for i in item:
if i.isspace():
print('Cannot contain spaces.')
s = input("Please enter your name: ")
while 1:
if has_space(s):
print('0')
else:
break
print('Welcome ' + s)
答案 0 :(得分:4)
这里的问题不是while条件,而是has_space
,因为它不返回可以评估的布尔值。这会使while循环内的if条件进入else分支并退出while循环。
可能的解决方案可能是重写以下方法:
def has_space(s):
return ' ' in s
和用法:
while not has_space(s):
s = input("Please enter your name: ")
答案 1 :(得分:3)
我相信,您正在尝试实现以下目标:
while True:
s = input("Please enter your name: ")
if " " not in s:
break
print('Cannot contain spaces.')
print('Welcome ' + s)
从函数开始,让我们继续分析代码的问题:
def has_space(item):
for i in item:
if i.isspace():
print('Cannot contain spaces.')
s = input("Please enter your name: ")
在这里,在检查每个字符是否为空格时,您要求用户插入名称,然后将其分配给局部变量 s
,该名称会执行 NOT 与全局变量s
一致。
这意味着您解析用户输入,要求为最初插入的名称中的每个空格输入一个新名称,而对此不执行任何操作。
此外,您将此函数用作if
中的布尔条件,但该函数不返回任何内容:这被视为返回None
,而if None
与{ {1}}。
更好的方法可能是将控件和用户输入请求分开在两个不同的功能中,例如:
if False
答案 2 :(得分:2)
只需添加一个<select id="editDistName" th:field="*{districts}" th:onchange="selectedDistName();">
<option value="default">Select the District </option>
<option th:each="dist : ${districts}" th:value="${dist.dist_id}"
th:text="${dist.dist_nm}" th:selected="${dist.dist_nm}"/>
</select>
<input type="text" class="form-control" id="dist_nm" name="dist_nm"/>
并访问全局变量
return True
出现此问题是因为该函数正在访问全局变量,并且不会返回true或false。
答案 3 :(得分:1)
您可以这样做
def has_space(item):
for i in item:
if i.isspace():
return True
while 1:
s = input("Please enter your name: ")
if has_space(s):
print('Cannot contain spaces')
else:
break
print('Welcome ' + s)
您的方法存在的问题是您没有从函数返回,因此函数返回的默认值为None。 所以在
while 1:
if has_space(s):
print('0')
else:
break
其他条件得到满足,因为has_space(s)的值为None,因此它仅进入函数一次,这就是为什么您看到的消息不能一次包含空格。从功能中退出后,它便会中断。希望我清楚
答案 4 :(得分:1)
您可以通过以下代码实现目标:
s = input("Please enter your name: ")
while ' ' in s:
print('Cannot contain spaces.')
s = input("Please enter your name: ")
print('Welcome ' + s)
语句' ' in s
检查以确定字符串中是否有空格
答案 5 :(得分:0)
据我所知,您的代码是什么, 1.进入while循环 2.进入has_space函数以获取一个布尔值,就好像是一个条件值,并且仅在条件为true时才实现,否则会中断,这就是为什么它只再次询问名称然后中断循环的原因。 3.打印第一个输入,因为has_space函数未返回任何内容,因此第一个输入仍然是全局变量。