我试图从文本文件中返回一个单词(这样我最终可以从单词中创建一个游戏)但是现在我收到了错误
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()
我对索引有错误的想法吗?
答案 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