Python 得到一个;“索引超出范围”;错误
在为我正在做的任务编写python脚本的过程中 错误在于它返回“索引超出范围”错误。从文本文件中提取数据,然后写入列表。(我将在代码上方发布文本文件的内容)索引[0]工作正常,但高于[0]的任何内容都会产生错误。不知道该怎么办,干杯!(如果缩进关闭,则表示抱歉) 文本文件内容-热身上衣,25,10,小豆豆,10,10,袜子,7,9Python 得到一个;“索引超出范围”;错误,python,indexing,range,Python,Indexing,Range,在为我正在做的任务编写python脚本的过程中 错误在于它返回“索引超出范围”错误。从文本文件中提取数据,然后写入列表。(我将在代码上方发布文本文件的内容)索引[0]工作正常,但高于[0]的任何内容都会产生错误。不知道该怎么办,干杯!(如果缩进关闭,则表示抱歉) 文本文件内容-热身上衣,25,10,小豆豆,10,10,袜子,7,9 __author__ = 'Nieck ten Broek' import easygui as eg import time eg.msgbox("Welc
__author__ = 'Nieck ten Broek'
import easygui as eg
import time
eg.msgbox("Welcome to Ramu's stock app")
stock_list = [ ]
def show_clubmember():
member_infile = open("members.txt","r")
display_member = member_infile.read()
print(display_member)
def add_clubmember():
member_name = eg.enterbox("Please enter your full name")
member_number = eg.enterbox("please enter your preferred phone number")
member_outfile = open("members.txt","a")
member_outfile.write(member_name + ",")
member_outfile.write(member_number + ",")
member_outfile.write(time.strftime("%c")+ '\n')
member_outfile.close()
def read_stock():
stock_outifle = open("stock.txt","r")
read_stock = stock_outifle.read()
print(read_stock)
stock_list.append(read_stock.strip("\n"))
print(stock_list)
def change_stock():
change_stock_outfile = open("stock.txt","a")
def sale():
sale_stock = open("stock.txt","r")
read_sale_stock = sale_stock.read()
print(read_sale_stock)
stock_list.write(read_sale_stock)
warm_cost = stock_list[0]
beanie_cost = stock_list[4]
sock_cost = stock_list[8]
print(stock_list)
#print(stock_list)
#eg.msgbox("what would you like to buy?")
# choices = ("warmup tops","beanies","socks")
#eg.choicebox("select options","selection",(choices))
def main():
menu_options=("Add member","Read stock","Change stock","sale",
"show members","quit")
choice = eg.choicebox("menu","menu",menu_options)
print(choice)
#choice = input("Please select your option")
if choice == "Add member":
add_clubmember()
main()
elif choice == "Read stock":
read_stock()
main()
elif choice == "Change stock":
change_stock()
main()
elif choice =="Sale":
sale()
main()
elif choice == "show members":
show_clubmember()
main()
elif choice == "quit":
quit()
else:
quit()
main()
我假设这实际上是具有适当缩进的read_stock函数:
def read_stock():
stock_outifle = open("stock.txt","r")
read_stock = stock_outifle.read()
print(read_stock)
stock_list.append(read_stock.strip("\n"))
print(stock_list)
您正在将文件的全部内容读入一个字符串,并将该字符串附加到股票列表中。因为您只附加了一个元素,所以列表中当然只有一个元素
你想要这样的东西:
def read_stock():
stock_outfile = open("stock.txt","r")
for line in stock_outfile:
stock_list.append(line.strip())
stock_outfile.close()
这将把文件的每一行追加到列表中。您可能还需要将每行拆分为其组件字段,并将其转换为某种对象。您的read_stock()函数似乎将所有数据作为单个元素读入。现在,在这个函数被调用之后,你的stock_列表的长度是一个元素(整行“warmup top,25,10,beanies,10,10,socks,7,9”)。我想你试图用逗号分割数组
def original_read_stock():
stock_outifle = open("stock.txt","r")
read_stock = stock_outifle.read()
print(read_stock)
stock_list.append(read_stock.strip("\n"))
print(stock_list)
要使用逗号拆分“股票”,请使用以下读取方法:
def read_stock_with_split():
stock_outifle = open("stock.txt","r")
read_stock = stock_outifle.read()
print(read_stock)
stock_list = read_stock.strip("\n").split(',')
print(stock_list)
请注意,我添加了一个.split(','))读取股票文本。这将创建一个列表,其中每个元素按您的意愿以逗号分隔。只要您不在文本文件的文本之间使用换行符,这将按预期工作。当您读取文件时,您必须按“,”分隔测试以将其转换为列表,如果您不这样做,则可以访问索引您只有一个索引[0]
def sale():
sale_stock = open("stock.txt","r")
read_sale_stock = sale_stock.read()
print(read_sale_stock)
stock_list.write(read_sale_stock)
stock_list = stock_list.split(',') <-- change
warm_cost = stock_list[0]
beanie_cost = stock_list[4]
sock_cost = stock_list[8]
print(stock_list)
def sale():
sale_stock=open(“stock.txt”、“r”)
read\u sale\u stock=sale\u stock.read()
打印(读\销售\库存)
库存清单。写(读销售库存)
库存清单=库存清单。拆分(',')请更正您的所有索引。无法区分函数中的内容和非内容。如果您能够修复,缩进将非常困难。当前格式的coad很难阅读,但看起来您没有按“,”拆分行以将其转换为列表。我已修复了缩进,很抱歉这家伙..e4c5-do为了使索引正常工作,必须去除“,”选项?您是否尝试过使用stock\u list=stock\u list.split(“,”)
?菜单选项=(“添加成员”、“阅读股票”、“更改股票”、“销售”、“显示“成员”、“退出”)看起来不正确,不是“显示成员”吗?我发现这里的很多人对新用户的事情考虑过多,过于复杂。据我所知,stock\u list=stock\u list.split(',')
在这里会很好。这是一个有效的观点。但我很确定示例文件应该表示三个项目,每个项目可能有一个价格和数量,并且应该有三行。当然,您的方法会起作用,但会给您三个不同的项目,命名为“10”。我认为问题陈述有点不对劲。他的代码并不意味着这一点,但是,如果这是他的意图,在他对代码做了一些更改之后,他应该实现这一点,或者其他类似的答案。