我正在尝试写一本书的密码解码器,下面是我到目前为止所得到的。
code = open("code.txt", "r").read()
my_book = open("book.txt", "r").read()
book = my_book.txt
code_line = 0
while code_line < 6 :
sl = code.split('\n')[code_line]+'\n'
paragraph_num = sl.split(' ')[0]
line_num = sl.split(' ')[1]
word_num = sl.split(' ')[2]
x = x+1循环会改变段落、行、词变量,每件事情都能正常工作。
但是我现在需要的是如何指定段落,然后是行,然后是单词,然后是while循环中的for循环,这样才能很好地工作。
因此,我想从段落号"paragraph_num“和行号"line_num”中得到单词"word_num“。
那是我的代码文件,我正试图把它转换成文字
“段号”、“行号”、“字号”
70 1 3
50 2 2
21 2 9
28 1 6
71 2 2
27 1 4然后我希望我的输出看起来像这样
word
word
word
word
word
word我的书“我需要得到单词的文件”看上去像这样
词词词 词词词 词词词
发布于 2017-03-22 12:38:45
理论
如果您想从文本中删除段落,可以使用split by "\n\n":
>>> "word\n\nword\nword\n\nword".split("\n\n")
['word', 'word\nword', 'word']现在,您有了一个段落列表。对于每一段,您可以按照"\n"进行拆分,并获得一行的列表。
对于每一行,您可以在没有参数的情况下进行split,并获得一个单词列表。
嵌套循环
text = """word word word word word word word word word
word word word word word word word
word word word word word word word word word word word word word word word word word word word word word
word word word word word word word word word word word word word word word word word word
word word word word boat word word word word word
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word
word word word word word word word word word word word
word word word word word word word word word word word word word word
word word word word word word word word word word word word word word word word word word word word word word"""
for i, paragraph in enumerate(text.split("\n\n")):
for j, line in enumerate(paragraph.split("\n")):
for k, word in enumerate(line.split()):
print("%d, %d, %d : %s" % (i,j,k,word))它的产出如下:
0, 0, 0 : word
0, 0, 1 : word
0, 0, 2 : word
0, 0, 3 : word
0, 0, 4 : word
0, 0, 5 : word
0, 0, 6 : word
0, 0, 7 : word
0, 0, 8 : word
0, 1, 0 : word
0, 1, 1 : word
0, 1, 2 : word
0, 1, 3 : word
0, 1, 4 : word
0, 1, 5 : word
0, 1, 6 : word
0, 2, 0 : word
0, 2, 1 : word
0, 2, 2 : word
0, 2, 3 : word
0, 2, 4 : word
0, 2, 5 : word
0, 2, 6 : word
0, 2, 7 : word
0, 2, 8 : word
0, 2, 9 : word
0, 2, 10 : word
0, 2, 11 : word
0, 2, 12 : word
0, 2, 13 : word
0, 2, 14 : word
0, 2, 15 : word
0, 2, 16 : word
0, 2, 17 : word
0, 2, 18 : word
0, 2, 19 : word
0, 2, 20 : word
0, 3, 0 : word
0, 3, 1 : word
0, 3, 2 : word
0, 3, 3 : word
0, 3, 4 : word
0, 3, 5 : word
0, 3, 6 : word
0, 3, 7 : word
0, 3, 8 : word
0, 3, 9 : word
0, 3, 10 : word
0, 3, 11 : word
0, 3, 12 : word
0, 3, 13 : word
0, 3, 14 : word
0, 3, 15 : word
0, 3, 16 : word
0, 3, 17 : word
1, 0, 0 : word
1, 0, 1 : word
1, 0, 2 : word
1, 0, 3 : word
1, 0, 4 : boat
1, 0, 5 : word
1, 0, 6 : word循环对于查看所需的索引是非常有用的。
嵌套列表理解
如果希望快速查找,可以使用嵌套列表理解来创建“3d列表”:
table = [[[word for word in line.split()] for line in paragraph.split("\n")] for paragraph in text.split("\n\n")]它的产出如下:
[[['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word']], [['word', 'word', 'word', 'word', 'boat', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word']], [['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word'], ['word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word', 'word']]]这样你就可以找到想要的词了:
table[1][0][4]
# "boat"如果您有一个元组列表:
codes = [
(1, 0, 4),
(2, 1, 3)
]
for i,j,k in codes:
print(table[i][j][k])发布于 2020-10-28 13:14:52
如果有人想要另一个与有点不同的代码,
因为我坚信这与这里的“图书密码”有关,arnold/book cipher with python*
我在这里发布了我的代码,如果这个理解是错误的,请告诉我。
# Replace "document1.txt" with whatever your book / document's name is.
BOOK="document1.txt" # This contains your "Word Word Word Word ...." I believed from the very start that you meant, they are not the same - (obviously)
# Read book into "boktxt"
def GetBookContent(BOOK):
ReadBook = open(BOOK, "r")
txtContent_splitted = ReadBook.read();
ReadBook.close()
Words=txtContent_splitted
return(txtContent_splitted.split())
boktxt = GetBookContent(BOOK)
words=input("input text: ").split()
print("\nyou entered these words:\n",words)
i=0
words_len=len(words)
for word in boktxt:
while i < words_len:
print(boktxt.index(words[i]))
i=i+1
x=0
klist=input("input key-sequence sep. With spaces: ").split()
for keys in klist:
print(boktxt[int(klist[x])])
x=x+1https://stackoverflow.com/questions/42951804
复制相似问题