本文详解为何不能将未定义变量直接传入函数,以及如何通过返回值机制安全传递用户输入数据,避免 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
# 作用域
相关文章:
如何在西部数码注册域名并快速搭建网站?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何用美橙互联一键搭建多站合一网站?
移民网站制作流程,怎么看加拿大移民官网?
IOS倒计时设置UIButton标题title的抖动问题
建站之星logo尺寸如何设置最合适?
江苏网站制作公司有哪些,江苏书法考级官方网站?
建站之星如何开启自定义404页面避免用户流失?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何选择适合PHP云建站的开源框架?
MySQL查询结果复制到新表的方法(更新、插入)
如何快速搭建高效香港服务器网站?
大同网页,大同瑞慈医院官网?
建站之星如何快速解决建站难题?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
如何通过老薛主机一键快速建站?
公司网站设计制作厂家,怎么创建自己的一个网站?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
公司网站制作价格怎么算,公司办个官网需要多少钱?
非常酷的网站设计制作软件,酷培ai教育官方网站?
油猴 教程,油猴搜脚本为什么会网页无法显示?
建站之星伪静态规则如何设置?
5种Android数据存储方式汇总
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
制作证书网站有哪些,全国城建培训中心证书查询官网?
香港服务器选型指南:免备案配置与高效建站方案解析
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
寿县云建站:智能SEO优化与多行业模板快速上线指南
高防服务器租用指南:配置选择与快速部署攻略
简单实现Android文件上传
宝塔建站教程:一键部署配置流程与SEO优化实战指南
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
,巨量百应是干嘛的?
,有什么在线背英语单词效率比较高的网站?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
网站制作模板下载什么软件,ppt模板免费下载网站?
网站制作需要会哪些技术,建立一个网站要花费多少?
建站之星如何配置系统实现高效建站?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
制作网站的软件免费下载,免费制作app哪个平台好?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
建站主机选购指南:核心配置优化与品牌推荐方案
宝塔新建站点为何无法访问?如何排查?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
已有域名和空间如何搭建网站?
制作表格网站有哪些,线上表格怎么弄?
香港服务器WordPress建站指南:SEO优化与高效部署策略
*请认真填写需求信息,我们会在24小时内与您取得联系。