首页 新闻 会员 周边 捐助

这道题有没有注意到 data = input("请输入一组人员的姓名、性别、年龄:"),写了两处是不是冗余代码了

0
[已关闭问题] 关闭于 2025-11-23 15:36
考试这道题,键盘输入一组人员的姓名、性别、年龄等信息,信息间采用空格分隔,每人一行,空行回车结束录入,参考答案是下面这个:
fo = open("PY202.txt","w")
data = input("请输入一组人员的姓名、性别、年龄:")  # 姓名 年龄 性别
women_num = 0
age_amount = 0
person_num = 0
while data:
    name, sex, age = data.split(' ')
    if sex == '':
        women_num += 1
    age_amount += int(age)
    person_num += 1
    data = input("请输入一组人员的姓名、性别、年龄:")
average_age = age_amount / person_num
fo.write("平均年龄是{:.1f} 女性人数是{}".format(average_age, women_num))
fo.close()
这道题有没有注意到 data = input("请输入一组人员的姓名、性别、年龄:"),
写了两处是不是冗余代码了,
为啥在循环前来一次 data = input("请输入一组人员的姓名、性别、年龄:"),
这样写法是不是错误,实际工作中有这样写法吗

问题2:这种写法是不是可以处理边界值问题

复制代码
就像用c求一个数字有几位数,也是提前:
#include <stdio.h>

int main(){
    
    int a;
    int n = 0;
    scanf("%d",&a);
    a/=10;
    n++;
    while(a>0){
        a/=10;
        n++;
    }
    printf("%d",n);
    return 0;
}
复制代码
*Tesla*的主页 *Tesla* | 小虾三级 | 园豆:1152
提问于:2025-11-23 15:25
< >
分享
所有回答(1)
0

其实你已经敏锐地捕捉到了两种不同场景下的 “预处理”思想

Python 中的 “预读(Priming Read)”:为什么需要?

核心目的:让 while 循环有条件可判

data = input(...)   # ← 预读
while data:
    # 处理
    data = input(...)  # 再读
while (data := input(...)):   # Python 3.8+ 海象运算符
    ...
while True:
    data = input(...)
    if not data: break
    ...

Python 在没有 do-while 或海象运算符的传统结构中(像 C 那样先执行一次再判断),所以如果想“至少读一次,直到空行为止”,就必须手动做一次“预读”,必须先有初始值才能进入 while 条件判断。👉 “预读”的作用就是给 while 提供第一次判断的依据,否则 data 未定义,或初始为假,循环根本不会执行。

C 语言求位数的例子a=0

  • do {
        n++;
        a /= 10;
    } while (a != 0);

    现代 Python 更推荐 while True + break,但在以下场景中,“预读”思想(或其变体)依然常见,甚至必要:

  • 场景1️⃣:读取不确定数量的输入,以特定信号结束
    典型信号:空行、"quit"、EOF(文件结束)、特殊字符等。
    例子:
    用户逐行输入数据,空行结束;
    从 socket 或串口读数据,直到收到 "END";
    读文件直到某一行匹配终止条件。
    Python
    编辑
    line = input("输入(空行结束): ")
    while line != "":
        process(line)
        line = input("输入(空行结束): ")
    这里“预读”是为了让 while 有初始值可判。
    场景2️⃣:处理文件流或生成器,需“窥探”下一个元素
    比如解析日志时,遇到某行要结合下一行处理。
    先读一行作为“当前行”,循环中不断读“下一行”。
    Python
    编辑
    with open('log.txt') as f:
        line = f.readline()
        while line:
            if 'ERROR' in line:
                next_line = f.readline()
                handle_error(line, next_line)
            line = f.readline()

    当语言没有 do-while(比如 Python),但你需要“至少处理一次输入”或“先读再判”的逻辑时,“预读 + while” 就成了最直接的替代方案。
    但它带来了代码冗余和维护成本;
    现代编程更推荐用 while True + break 来优雅地实现相同逻辑。

Python 中更优的“do-while”模拟
while True:
    data = input("请输入:")
    if not data:      # 终止条件
        break
    # 处理 data
*Tesla* | 园豆:1152 (小虾三级) | 2025-11-23 15:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册