我尝试访问元组值,但它说在尝试在 Python 中创建保存/加载方法时解包的值太多
Posted
技术标签:
【中文标题】我尝试访问元组值,但它说在尝试在 Python 中创建保存/加载方法时解包的值太多【英文标题】:I try to access the tuples values but it says it has too many values to unpack when trying to create a save/load method in Python 【发布时间】:2020-02-20 20:42:05 【问题描述】:您好,抱歉,我是编程新手,需要帮助。我做了一个简单的数学测试,我希望能够保存分数,检查之前的最高分,如果更高,覆盖最高分。
我保存了“('k',1.67)”的.txt文件,并想分别访问名称和分数,但是当我尝试访问元组值时,它说它有太多的值需要解压.
我该如何解决这个问题?
**ValueError: too many values to unpack (expected 2)**
def overwrite(highest_score_details):
with open("score.txt", 'w') as save:
print(highest_score_details, file=save)
def get_score():
with open("score.txt", 'r') as load:
contents = load.readline()
name_read, score_read = contents
return contents
name = input("Enter your name: ")
start_time = my_timer()
for i in range(total_questions):
make_question()
end_time = my_timer()
total_score = time_taken + wrong_answer_penalty
get_score()
highest_score_details = (name, total_score)
overwrite(highest_score_details)
【问题讨论】:
contents
是一个字符串:超过 2 个字符的序列。为什么get_score
尝试分配给name_read
和score_read
,如果它永远不会使用它们并返回contents
?
我以不同的方式绑定并忘记删除它,我也没有太多线索:P。当我打印 get_score 时,我可以获得元组数据,但如何访问第二个元素?
【参考方案1】:
听起来您正在尝试将字符串用作元组。 readline
返回一个字符串,它是一个字符的集合。为了将此字符串正确地转换为可以按您需要的方式使用的数据,您必须定义一种解析它的方法。
如果格式更简单,解析字符串会更容易。例如,如果您更改了存储分数的方式,使其只是k,1.67
,那么您可以执行以下操作:
contents = load.readline() # read "k,1.67"
tokens = contents.split(",") # convert to ["k","1.67"]
name = tokens[0] # store "k" as the name
score = float(tokens[1]) # convert from the string "1.67" to the value 1.67
return (name, score) # pack the values into a tuple
【讨论】:
好的,谢谢!现在我已经完成了,我仍然无法访问函数之外的函数返回变量。我正在尝试“打印(get_score.name)”但没有运气:/你有什么建议可以从函数外部的返回中访问元组成员吗? @KevinNisbet 首先,get_score 是一个函数,所以它必须像get_score()
这样使用。其次,像这样的元组的内容是通过索引而不是名称访问的。因此,名称类似于get_score()[0]
,分数类似于get_score()[1]
以上是关于我尝试访问元组值,但它说在尝试在 Python 中创建保存/加载方法时解包的值太多的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django 模板的 forloop 中访问 If 语句中的元组值?