全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python 函数中能否使用 input() 输入值作为参数?

python 中 `input()` 获取的值不能直接作为未定义变量传入函数;函数调用前,所有实参必须已存在。正确做法是让函数自身调用 `input()`,并通过 `return` 返回结果,再由调用方接收赋值。

在 Python 编程中,初学者常误以为可以将“尚未定义的变量名”(如 item_bought_1)作为参数传给函数,期待函数内部为其赋值——这是不可行的。Python 是按值传递(pass-by-object-reference),且函数参数是局部变量,对形参的重新赋值不会影响外部作用域中的同名变量(如果存在);更关键的是,若变量根本未定义,调用时就会立即抛出 NameError。

你遇到的错误:

NameError: name 'item_bought_1' is not defined

正是因为代码在执行 question_asker(item_bought_1, ...) 时,解释器试图查找名为 item_bought_1 的变量,但此时它尚未被创建(input() 还没执行),因此报错。

✅ 正确设计思路:
函数应封装输入逻辑与计算逻辑不依赖外部变量传入,而是主动获取输入、处理数据,并通过 return 输出结果。调用方负责接收返回值并存储。

以下是优化后的专业写法:

def question_asker():
    """交互式获取单个商品信息,返回 (商品名, 单价, 数量, 小计) 元组"""
    item = input("What item has been bought? ").strip()
    if not item:
        print("Warning: Empty item name. Using 'Unknown'.")
        item = "Unknown"

    while True:
        try:
            price = float(input(f"How much is each unit of '{item}'? "))
            break
        except ValueError:
            print("Please enter a valid number for price.")

    while True:
        try:
            qty = int(input(f"How many units of '{item}' have been bought? "))
            break
        except ValueError:
            print("Please enter a valid integer for quantity.")

    total = price * qty
    return item, price, qty, total

# 调用 4 次,每次接收完整结果
items = []
for i in range(1, 5):
    print(f"\n--- Entry #{i} ---")
    item, unit_price, quantity, item_total = question_asker()
    items.append({
        'name': item,
        'unit_price': unit_price,
        'quantity': quantity,
        'total': item_total
    })

# 示例:打印简洁表格
print("\n" + "="*50)
print(f"{'Item':<12} {'Price':<8} {'Qty':<6} {'Total':<10}")
print("-"*50)
for it in items:
    print(f"{it['name']:<12} ${it['unit_price']:<7.2f} {it['quantity']:<6} ${it['total']:<9.2f}")
print("="*50)

? 关键要点总结:

  • ❌ 错误:question_asker(item_bought_1, ...) —— 变量未定义,且 Python 无法通过参数“反向赋值”到外部。
  • ✅ 正确:item, price, qty, total = question_asker() —— 函数内完成输入与计算,返回结构化结果。
  • ? 增强健壮性:添加 try/except 处理非数字输入,strip() 清理空格,避免运行时崩溃。
  • ? 推荐数据结构:用 list[dict] 或 namedtuple 统一管理多组商品数据,便于后续排序、汇总或导出。
  • ? 可扩展性:后续可轻松改为循环 n 次、支持“输入 done 结束”,或整合进类(如 ShoppingCart)中。

这种设计符合 Python 的清晰性与封装原则:函数职责单一(专注采集+计算),调用方专注流程控制与数据组织。


# python  # app  # 作用域 


相关文章: 济南专业网站制作公司,济南信息工程学校怎么样?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  存储型VPS适合搭建中小型网站吗?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  如何制作一个表白网站视频,关于勇敢表白的小标题?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  建站主机与虚拟主机有何区别?如何选择最优方案?  如何在建站之星网店版论坛获取技术支持?  建站与域名管理如何高效结合?  油猴 教程,油猴搜脚本为什么会网页无法显示?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  建站之星logo尺寸如何设置最合适?  创业网站制作流程,创业网站可靠吗?  建站为何优先选择香港服务器?  高防服务器如何保障网站安全无虞?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  宿州网站制作公司兴策,安徽省低保查询网站?  如何通过虚拟机搭建网站?详细步骤解析  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  网站制作新手教程,新手建设一个网站需要注意些什么?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  如何快速启动建站代理加盟业务?  如何选择高效响应式自助建站源码系统?  建站上传速度慢?如何优化加速网站加载效率?  ui设计制作网站有哪些,手机UI设计网址吗?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  宝塔建站无法访问?如何排查配置与端口问题?  如何通过VPS建站无需域名直接访问?  网站制作的步骤包括,正确网址格式怎么写?  公司网站的制作公司,企业网站制作基本流程有哪些?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  建站主机是什么?如何选择适合的建站主机?  建站之家VIP精选网站模板与SEO优化教程整合指南  北京网站制作公司哪家好一点,北京租房网站有哪些?  建站之星ASP如何实现CMS高效搭建与安全管理?  C++中引用和指针有什么区别?(代码说明)  如何快速登录WAP自助建站平台?  如何用免费手机建站系统零基础打造专业网站?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  c++ stringstream用法详解_c++字符串与数字转换利器  浅谈Javascript中的Label语句  子杰智能建站系统|零代码开发与AI生成SEO优化指南  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  在线教育网站制作平台,山西立德教育官网?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  建站主机选购指南:核心配置优化与品牌推荐方案 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。