Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 得到一个;“索引超出范围”;错误_Python_Indexing_Range - Fatal编程技术网

Python 得到一个;“索引超出范围”;错误

Python 得到一个;“索引超出范围”;错误,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

在为我正在做的任务编写python脚本的过程中

错误在于它返回“索引超出范围”错误。从文本文件中提取数据,然后写入列表。(我将在代码上方发布文本文件的内容)索引[0]工作正常,但高于[0]的任何内容都会产生错误。不知道该怎么办,干杯!(如果缩进关闭,则表示抱歉)

文本文件内容-热身上衣,25,10,小豆豆,10,10,袜子,7,9

 __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”。我认为问题陈述有点不对劲。他的代码并不意味着这一点,但是,如果这是他的意图,在他对代码做了一些更改之后,他应该实现这一点,或者其他类似的答案。