本文详解为何不能将未定义变量直接传入函数,以及如何通过返回值机制安全传递用户输入数据,避免 nameerror,并给出可扩展的循环+列表结构优化方案。
在 Python 中,用户输入的值本身可以作为函数的参数,但前提是这些值对应的变量必须已定义且具有有效值。你遇到的 NameError: name 'item_bought_1' is not defined 错误,根本原因并非“输入值不能作参数”,而是:你在调用函数前就试图将四个尚未声明的变量(item_bought_1, unit_price_1, 等)作为实参传入——此时它们在全局作用域中根本不存在,Python 在解析调用语句时即报错,甚至还没进入函数体。
函数不应接收“空占位符变量”作为参数,而应封装输入逻辑,并通过 return 将计算结果传出。修改后的函数如下:
def question_asker():
item = input("What item has been bought? ")
unit_price = int(input(f"How much is each unit of {item}? "))
quantity = int(input(f"How many units of {item} have been bought? "))
total = unit_price * quantity
return item, unit_price, quantity, total
# 调用 4 次,每次获取一组完整数据
data = []
for i in range(4):
print(f"\n--- Entry #{i+1} ---")
item, price, qty, total = question_asker()
data.append({"item": item, "price": price, "quantity": qty, "total": total})? 关键说明: 函数无需任何形参(def question_asker():),所有输入均在函数内部通过 input() 获取; 使用 return 返回元组,调用方用解包语法(item, price, qty, total = ...)接收; 所有数据统一存入 data 列表,便于后续表格化输出(如用 pandas 或格式化字符串打印)。
手动调用 4 次函数仍显冗余。推荐用循环 + 列表/字典管理多组数据:
# 更健壮的版本:支持任意次数输入,并自动处理异常
def question_asker():
try:
item = input("Item name: ").strip()
if not item:
raise ValueE
rror("Item name cannot be empty")
price = float(input(f"Unit price for '{item}': "))
qty = int(input(f"Quantity of '{item}': "))
return {"item": item, "price": price, "quantity": qty, "total": price * qty}
except (ValueError, KeyboardInterrupt) as e:
print(f"Input error: {e}. Exiting.")
return None
# 收集数据
purchases = []
for i in range(4):
result = question_asker()
if result:
purchases.append(result)
else:
break
# 打印表格(示例)
print(f"\n{'Item':<12} {'Price':<8} {'Qty':<6} {'Total':<8}")
print("-" * 36)
for p in purchases:
print(f"{p['item']:<12} {p['price']:<8.2f} {p['quantity']:<6} {p['total']:<8.2f}")
# python
# 编码
# app
# ai
# apple
# 作用域
相关文章:
如何注册花生壳免费域名并搭建个人网站?
网站制作企业,网站的banner和导航栏是指什么?
建站之星安装后如何配置SEO及设计样式?
香港网站服务器数量如何影响SEO优化效果?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
公司网站的制作公司,企业网站制作基本流程有哪些?
Android使用GridView实现日历的简单功能
网站制作话术技巧,网站推广做的好怎么话术?
教程网站设计制作软件,怎么创建自己的一个网站?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何在建站宝盒中设置产品搜索功能?
山东云建站价格为何差异显著?
网站制作公司排行榜,四大门户网站排名?
大同网页,大同瑞慈医院官网?
如何用wdcp快速搭建高效网站?
如何快速搭建虚拟主机网站?新手必看指南
广东企业建站网站优化与SEO营销核心策略指南
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
制作表格网站有哪些,线上表格怎么弄?
如何在局域网内绑定自建网站域名?
网站制作新手教程,新手建设一个网站需要注意些什么?
全景视频制作网站有哪些,全景图怎么做成网页?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
音响网站制作视频教程,隆霸音响官方网站?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
如何快速配置高效服务器建站软件?
nginx修改上传文件大小限制的方法
七夕网站制作视频,七夕大促活动怎么报名?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
网站设计制作企业有哪些,抖音官网主页怎么设置?
制作营销网站公司,淘特是干什么用的?
如何快速搭建高效WAP手机网站?
,南京靠谱的征婚网站?
如何在建站主机中优化服务器配置?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
视频网站app制作软件,有什么好的视频聊天网站或者软件?
已有域名能否直接搭建网站?
网站制作说明怎么写,简述网页设计的流程并说明原因?
如何用腾讯建站主机快速创建免费网站?
网站制作公司排行榜,抖音怎样做个人官方网站
专业网站建设制作报价,网页设计制作要考什么证?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
如何在IIS中新建站点并配置端口与IP地址?
建站三合一如何选?哪家性价比更高?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
如何通过虚拟主机快速完成网站搭建?
*请认真填写需求信息,我们会在24小时内与您取得联系。