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

如何避免执行employee_action后重复出现"Enter your name"提示?

问题分析与解决方案

核心问题

  1. employee_action函数逻辑错误:
    • else分支里的employee_input == "2"是无意义的比较语句,没有实际判断输入是否为2,导致任何非1的输入都会进入该分支,包括无效输入。
    • 输入2后打印数据的分支缺少“按回车继续”的交互和退出循环的break,导致流程混乱。
  2. 函数调用结构问题:
    在new_employee_number中调用employee_action后,当employee_action执行完毕,new_employee_number函数随即结束,若主程序是循环调用new_employee_number,就会重新触发“输入姓名”的流程,这就是你看到重复弹出提示的原因。

修正后的代码

import random
import os
# 假设worksheet、worksheet2、worksheet3已提前定义

def employee_action():
    """
    询问登录后的用户需要执行的操作
    """
    while True:
        employee_input = input(
            "What do you wish to do today?\n1 Get Personal Data \n2 Get Survey Responses\n")
        if employee_input == "1":
            data = worksheet.get_all_values()
            for row in data:
                print(row)
            input("Press enter to continue.")
            break
        elif employee_input == "2":  # 修正为elif判断输入是否为2
            data = worksheet2.get_all_values()
            for row in data:
                print(row)
            input("Press enter to continue.")  # 添加回车继续提示
            break  # 添加break退出循环
        else:
            print("无效输入,请选择1或2")  # 处理无效输入

def new_employee_number():
    """
    生成不重复的新员工编号,允许用户输入姓名并添加到员工数据表
    """
    # 先生成不重复的员工编号
    while True:
        new_employee_number = str(random.randint(0, 1000))
        if new_employee_number not in worksheet3.col_values(1):
            break
    # 再验证姓名格式
    while True:
        new_employee_name = input("Enter your name:\n")
        if new_employee_name.isalpha():
            new_employee_name = new_employee_name.lower().capitalize()
            worksheet3.append_row([new_employee_number, new_employee_name])
            os.system('cls' if os.name == 'nt' else 'clear')
            print(
                f"Welcome, {new_employee_name}! Your employee number is: {new_employee_number}\n")
            return  # 注册完成后返回,由主程序控制后续流程
        else:
            print("INVALID: Enter only letters\n")

# 主程序示例,控制整体流程
if __name__ == "__main__":
    while True:
        choice = input("1 注册新员工\n2 员工操作\n3 退出\n请选择:")
        if choice == "1":
            new_employee_number()
        elif choice == "2":
            employee_action()
        elif choice == "3":
            print("退出程序")
            break
        else:
            print("无效输入,请选择1-3")

关键修改点

  • 修复employee_action分支逻辑:将else改为elif精准判断输入是否为2,添加回车交互和break,确保输入2后能正常退出函数。
  • 拆分new_employee_number循环:将编号生成和姓名验证拆分为两个独立循环,确保生成的编号一定不重复。
  • 调整全局流程控制:让new_employee_number注册完成后返回,由主程序提供明确选项(注册/操作/退出),避免自动回到注册流程。

内容的提问来源于stack exchange,提问作者Diego

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:17:45