我正在做一个应用程序,用户输入一个字符串,然后是所有可能的排列并删除重复。
应该逐行比较所获得的排列的单词,直到等于排列的行,并用剩余的排列重复该过程。
该文件包含以下信息:manila ana maria marta
或档案:espanol.dic
这里附上了一些代码:
# coding=utf8
from __future__ import print_function
import os, re, itertools
new_dic_file = "espanol.dic"
def uniq(lst):
# remove repeated
key = dict.fromkeys(lst).keys()
lst = list(key)
return lst
def match(chars, num_chars):
# Get the permutations of input string
combs = itertools.permutations(chars, num_chars)
result = []
for combo in combs:
result.append("".join(combo))
# Iterate to Spanish dictionary and compare combinations of input string
dic = open(new_dic_file)
aux = dic.readlines()
del dic
aux = uniq(aux)
for word in result:
for word_dic in aux:
print()
print(word, word_dic, end="")
print(type(word), type(word_dic), end="")
if word == word_dic:
print(word)
print("########## Found! ##########")
我正在打印那种“word”和“word_dic”,而type 2因此应该可以工作,而不是...... 我正在测试这个: 匹配(“aan”,3)
结果如下:
<type 'str'> <type 'str'>
ana marta
<type 'str'> <type 'str'>
ana ana
<type 'str'> <type 'str'>
ana manila
<type 'str'> <type 'str'>
naa maria
应该是什么:
ANA
####发现!!如果对我的所作所为有任何疑问,请告诉我......
这是完整的代码。 test.py
提前谢谢你。
答案 0 :(得分:1)
readlines
方法在字符串上留下LF字符。因此从文件中读取的字符串中有一个额外的字符。这在输出中是可见的;请注意type
行落在字符串下方,即使end=""
语句中有print
。字符串&#34; ana&#34;换行符永远不等于&#34; ana&#34;。
要解决此问题,请删除readlines()
语句并将其替换为:
aux = dic.read().splitlines()
有关readlines
:Best method for reading newline delimited files in Python and discarding the newlines?
或者您可以将readlines()
留在那里但添加:
aux = [s.rstrip() for s in aux]