为什么我的列表中的字符串超出范围索引错误?

时间:2018-03-21 16:57:08

标签: python python-3.x

所以我正在创建一个8球程序,提示用户输出一个问题,然后吐出一个响应。 我所说的项目答案必须是txt文件,所以我创建了 此

file = open("Ball_response.txt","w")

file.write("YES, OF COURSE!")
file.write("WITHOUT A DOUBT, YES")
file.write("YOU CAN COUNT ON IT.")
file.write("FOR SURE!")
file.write("ASK ME LATER")
file.write("I AM NOT SURE")
file.write("I CAN'T TELL YOU RIGHT NOW?")
file.write("I WILL TELL YOU AFTER MY NAP")
file.write("NO WAY!")
file.write("I DON'T THINK SO")
file.write("WITHOUT A DOUBT, NO.")
file.write("THE ANSWER IS CLEARLY NO")

file.close()

我想在这里打电话给这个名单

import random 

# Reading the Ball_response file
def main():
    input_file = open('Ball_response.txt', 'r')
    line = input_file.readline()
    print(line[0])

main()

但是当我运行该程序时,它只打印出"Y"。我想要

   0 -  Yes, Of Course
   1 -  Without a Doubt, yes
   2 -  You can count on it

等..... 我怎么能做到这一点?我觉得有些东西我不理解

3 个答案:

答案 0 :(得分:2)

为了在不同的行上获得每个响应,您需要更改编写文件的方式。

file = open("Ball_response.txt","w")

file.write("YES, OF COURSE!\n")
file.write("WITHOUT A DOUBT, YES\n")
// etc

file.close()

然后在您的函数main中,因为您要打印整行,您需要执行print(line)

import random

def main():
    input_file = open('Ball_response.txt', 'r')
    rand_idx = random.randrange(12)

    for i,line in enumerate(input_file):
      if i == rand_idx:
        print(str(i) + " - " + line.strip('\n'))

这将打印(例如):

  

7 - 我会在我的NAP之后告诉你

答案 1 :(得分:1)

您可能希望先修复代码。

在每个file.write中写入文件时添加\ n,以便所有行都转到这样的新行

file.write("YES, OF COURSE!\n")

提高效率将所有这些字符串存储在列表中并使用file.writelines(list)

lines = ["YES, OF COURSE!\n","WITHOUT A DOUBT, YES\n","YOU CAN COUNT ON IT.\n"]

file.writelines(lines)

要逐行读取文件,请执行此操作。

def main():
    input_file = open('Ball_response.txt', 'r')
    i = 0
    for line in input_file:
        print(str(i) + ' ' + line)
        i = i+1

也可以自动枚举

for i,line in enumerate(input_file):
    print(str(i) + ' ' + line)

输出就像

  

0是,当然!

     

1没有怀疑,是的

     

2你可以计算它。

答案 2 :(得分:0)

您应该使用 Student(const char n[], const char ss[], float& gp, int& cred) { strcpy_s(name, sizeof(name), n); strcpy_s(ssn, sizeof(ssn), ss); 代替print(line)。你只得到Y,因为它是字符串中的第[0]个元素。