Python程序疑问:输入末位为2或7时终止while循环的代码为何失效?
代码问题分析与修正
需求回顾
编写Python程序,要求:当用户输入的整数最后一位是2或7时,终止while循环,并输出用户输入的数字总个数。
示例场景:
Enter an integer: 21 Enter an integer: 5 Enter an integer: 3 Enter an integer: 27 4 <- 返回4,因为用户共输入了4次
原代码的错误点
def count_inputs(): num = 0 count = 0 while num[-1] == '2' or num[-1] == '7': num = int(input("Enter an integer: ")) count += 1 return count
- 初始值与类型错误:初始
num是整数0,直接使用num[-1]会抛出TypeError,因为整数不支持索引访问。 - 循环条件逻辑完全写反:需求是「最后一位是2或7时停止循环」,所以循环应该在最后一位不是2或7时持续执行,原代码的条件刚好相反,导致程序一开始就不进入循环,直接返回0。
- 输入处理逻辑顺序错误:原代码先判断循环条件,再获取用户输入,第一次判断时
num是初始值0,还未拿到用户输入的内容,逻辑完全颠倒。 - 数字取最后一位的方式错误:即使拿到用户输入的整数,转成int后也不能用索引取最后一位,要么把数字转成字符串,要么用取模运算
num % 10来获取最后一位数字。
修正后的代码
方式一:通过字符串处理最后一位
def count_inputs(): count = 0 while True: num_str = input("Enter an integer: ") # 可额外增加输入合法性判断,确保输入是整数 count += 1 if num_str[-1] in ('2', '7'): break return count
方式二:通过取模运算处理最后一位(更适配数字场景)
def count_inputs(): count = 0 while True: num = int(input("Enter an integer: ")) count += 1 last_digit = num % 10 if last_digit == 2 or last_digit == 7: break return count
内容的提问来源于stack exchange,提问作者Rolen
相关产品推荐
相关产品推荐

