难以理解的条件循环

时间:2018-08-01 09:14:54

标签: python python-3.x loops if-statement

我只是从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)

6 个答案:

答案 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函数未返回任何内容,因此第一个输入仍然是全局变量。