如何防止if语句将输入转换为布尔值?Python输入处理问题
问题分析与解决
你碰到的这个问题其实是个常见的小误区——你错误地把str.isalpha()的返回值当成用户输入的名字传进了add_student函数。
为什么会得到布尔值?
str.isalpha() 是一个字符串判断方法:它接收一个字符串,检查这个字符串是否全部由字母组成,符合条件就返回 True,不符合就返回 False。你现在的代码里,直接把这个判断结果(布尔值)传给了 add_student,所以字典里自然存的是 True 而不是你输入的名字字符串。
修正后的代码
首先要先拿到用户的原始输入,再做合法性判断,只有符合要求时,才把原始输入的字符串传进去。另外你代码里没定义 add_student 函数,我也一起补上了:
students = [] def add_student(student_name): students.append({'name': student_name}) def enter_student_name(): while True: # 先获取用户的原始输入 student_name = input('Enter student name: ') # 再用isalpha()判断是否全为字母 if student_name.isalpha(): add_student(student_name) print(students) # 可以加个break退出循环,不然会一直让你输入 break enter_student_name()
额外小提示
如果你的需求允许名字里包含空格(比如 "John Doe"),那 isalpha() 就不适用了,因为空格不是字母,会被判定为不符合。这种情况下可以换个判断逻辑,比如检查输入是否为空:
if student_name.strip(): # 去除首尾空格后不为空 add_student(student_name)
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

