从文本文件中获取随机单词

时间:2016-11-28 01:09:29

标签: python random indexing file-io

我试图从文本文件中返回一个单词(这样我最终可以从单词中创建一个游戏)但是现在我收到了错误

IndexError: string index out of range

这是我的文本文件的样子

yellow
awesome
barking
happy
dancing
laughing

这是我目前的代码

导入随机

def generate_the_word(infile):

    for line in infile.readlines():
        random_line = random.randrange(line[0], line[len(line) + 1])

        print(random_line)



def main():
    infile = open("words.txt","r")
    generate_the_word(infile)

    infile.close


main()

我对索引有错误的想法吗?

3 个答案:

答案 0 :(得分:1)

import random

def generate_the_word(infile):
    random_line = random.choice(open(infile).read().split('\n'))
    return random_line

def main():
    infile = "words.txt"
    print(generate_the_word(infile))

main()

答案 1 :(得分:0)

你的for循环遍历文件中的每一行并索引到该行。您还应该利用Python的context managers,它负责打开和关闭文件。你想要的是加载所有行:

with open(infile) as f:
    contents_of_file = f.read()

您的第二个问题是您没有正确地使用randrange索引这些行。您需要介于0和最大行数之间的范围:

lines = contents_of_file.splitlines()
line_number = random.randrange(0, len(lines))
return lines[line_number]

在运行此模块之前,您还需要导入random模块。

您的整个程序看起来像:

import random

def generate_the_word(infile):
    with open(infile) as f:
        contents_of_file = f.read()
    lines = contents_of_file.splitlines()
    line_number = random.randrange(0, len(lines))
    return lines[line_number]


def main():

    print(generate_the_word("Filename.txt"))


main()

您还应注意每次读取文件效率低下;或许读一遍然后从那里挑选线。例如,您可以在main函数中读取它并将其已读取的值传递给generate_the_word函数。

答案 2 :(得分:0)

当您使用int A [MAX_N][MAX_N], memo[MAX_N][MAX_K+1]; int countWays2(int m, int sum, int N){ if(memo [m][sum] != -1) return memo [m][sum]; if(m == 0) return memo[m][sum] = count(A[0], A[0]+N, sum); int ways = 0; for(int i = 0; i < N; ++i) if(sum >= A[m][i]) ways += countWays2(m-1, sum - A[m][i], N); return memo[m][sum] = ways; } int countWays(int N, int k){ if(k < 0) return 0; for(int i = 0; i < N; ++i) fill(memo[i], memo[i] + k + 1, -1); //Initialize memoization table return countWays2(N-1, k, N); } 时,会获得readlines()行。 list模块有一个方便的方法从这些迭代中挑选一个随机元素,这样就不需要“手动”处理索引:random

您只需要这个(不需要random.choice(iterable)循环):

for

为了避免每次想要单个随机单词时读取文件的代价高昂的操作,您还可以在def generate_the_word(infile): return random.choice(infile.readlines()) def main(): infile = open("words.txt","r") generate_the_word(infile) infile.close main() 中阅读该文件并将列表传递给main

generate_the_word