全网整合营销服务商

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

免费咨询热线: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  # 作用域 


相关文章: 怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  广州商城建站系统开发成本与周期如何控制?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  如何快速搭建FTP站点实现文件共享?  再谈Python中的字符串与字符编码(推荐)  建站三合一如何选?哪家性价比更高?  公司网站的制作公司,企业网站制作基本流程有哪些?  详解jQuery停止动画——stop()方法的使用  如何批量查询域名的建站时间记录?  深圳网站制作案例,网页的相关名词有哪些?  建站之星安装提示数据库无法连接如何解决?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  活动邀请函制作网站有哪些,活动邀请函文案?  b2c电商网站制作流程,b2c水平综合的电商平台?  c# 在高并发场景下,委托和接口调用的性能对比  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  企业微网站怎么做,公司网站和公众号有什么区别?  模具网站制作流程,如何找模具客户?  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何有效防御Web建站篡改攻击?  香港服务器选型指南:免备案配置与高效建站方案解析  动图在线制作网站有哪些,滑动动图图集怎么做?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  制作网站怎么制作,*游戏网站怎么搭建?  郑州企业网站制作公司,郑州招聘网站有哪些?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  小建面朝正北,A点实际方位是否存在偏差?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  建站主机系统SEO优化与智能配置核心关键词操作指南  建站之星IIS配置教程:代码生成技巧与站点搭建指南  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  兔展官网 在线制作,怎样制作微信请帖?  建站之星代理平台如何选择最佳方案?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  建站之星后台密码遗忘如何找回?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  如何通过西部建站助手安装IIS服务器?  如何获取免费开源的自助建站系统源码?  C#怎么使用委托和事件 C# delegate与event编程方法  如何在Golang中使用replace替换模块_指定本地或远程路径  Python lxml的etree和ElementTree有什么区别  如何用狗爹虚拟主机快速搭建网站?  网站制作服务平台,有什么网站可以发布本地服务信息?  建站之星后台密码遗忘或太弱?如何重置与强化?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  个人网站制作流程图片大全,个人网站如何注销? 

您的项目需求

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