【问题标题】:Getting a " index out of range " error得到“索引超出范围”错误
【发布时间】:2015-09-04 01:47:17
【问题描述】:

正在为我正在执行的任务编写 python 脚本。

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

文本文件内容 - 热身衣,25,10,beanies,10,10,socks,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()

【问题讨论】:

  • 请更正所有的缩进。无法分辨函数中有什么,没有什么。
  • 如果你能修复,缩进非常不受欢迎。很难以当前形式阅读代码,但看起来您没有用“,”分割行以将其转换为列表。
  • 我已经修复了缩进,对不起那些家伙.. e4c5 - 是否必须剥离“,才能使索引正常工作?
  • 您是否尝试过使用stock_list = stock_list.split(',')
  • menu_options=("Add member","Read stock","Change stock","sale","show" members","quit") 看起来不正确,不应该是“show会员”?

标签: python indexing range


【解决方案1】:

我假设这实际上是您的 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)

您正在将文件的全部内容读入单个字符串,并将该字符串附加到 stock_list。由于您只附加一件事,因此您的列表中当然只有一个元素。

你想要这样的东西:

def read_stock():
    stock_outfile = open("stock.txt","r")
    for line in stock_outfile:
        stock_list.append(line.strip())
    stock_outfile.close()

这会将文件的每一行附加到列表中。可能您还需要将每一行拆分为其组件字段并将其制成某种对象。

【讨论】:

  • 我发现这里的很多人都为新用户考虑过多并将事情复杂化。据我所知,stock_list = stock_list.split(',') 在这里会做得很好。
  • 一个有效的点。但我很确定示例文件应该代表三个项目,每个项目可能有一个价格和数量,并且可能应该在三行上。当然,您的方法会起作用,但会给您三个名为“10”的不同项目。我认为问题陈述有问题。
  • 他的代码并不暗示这一点,但是,如果这是他的意图,那么在他对代码进行一些更改之后,他应该实现这个,或者其他类似的答案。
【解决方案2】:

您的 read_stock() 函数似乎将所有数据作为单个元素读取。现在,在调用此函数之后,您的 stock_list 的长度是一个元素(整行“热身上衣,25,10,豆豆,10,10,袜子,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(',') 添加到已读文本中。这将创建一个列表,其中每个元素都按照您的需要以逗号分隔。只要您不在文本文件的文本之间使用换行符,这将按预期工作。

【讨论】:

    【解决方案3】:

    当您读取文件时,您必须将测试用 ',' 拆分以将其转换为列表,然后您可以访问索引,如果您不这样做,您只有一个索引[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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 2016-04-17
      • 2015-07-13
      相关资源
      最近更新 更多