You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:02:36