这是我在此论坛上发布的第一篇文章。
我早些时候声明了这些字符串,整数和文件名...
linefeed='\n'
consonantFileHeader='Consonants found in the infile:'
vowelFileHeader='Vowels found in the infile:'
qConsonant=0
qVowel=0
ConsonantFile=open(path/tothe/file/chapters/Consonants.txt,'w+')
VowelFile=open(path/tothe/file/chapters/Vowels.txt,'w+')
程序会一一读取Unicode字形,并为每个字形分配一个“类型”。
if glyph='A':
type='VOWEL'
elif glyph='B':
type='CONSONANT'
... etc...
此后,我们要添加每个“类型”的运行计数并将记录写入文件,以显示每个“类型”的所有出现情况。这是常规代码,我们不想弄乱main
函数,因此我们调用另一个函数来完成它。...
if type == 'CONSONANT':
tabulateCONSONANT(glyph)
elif type == 'VOWEL':
tabulateVOWEL(glyph)
此时,两个不同的types
-两个不同的功能。他们在这里...
## ------------------------------------------------------------
def tabulateCONSONANT(glyph):
qConsonant=qConsonant+1 # bump up a counter
if qConsonant = 1 # on 1 write header to output
ConsonantFile.write(consonantFileHeader)
ConsonantFile.write(glyph+linefeed) # write data after
return ;
## ------------------------------------------------------------
def tabulateVOWEL(glyph):
qVowel=qVowel+1 # bump up counter
if qVowel = 1
VowelFile.write(vowelFileHeader) # on 1, write header
VowelFile.write(glyph+linefeed) # write data after
return ;
很好,但我觉得这确实多余。即使只有值的实际名称发生变化,我也必须为每种类型调用不同的函数!
有什么办法可以编写一个函数,使我们可以将实际的项目名称连接起来,以进行如下操作……?
if type == 'CONSONANT':
tabulateANYTHING(glyph,'Consonant')
elif type == 'VOWEL':
tabulateANYTHING(glyph,'Vowel')
## ------------------------------------------------------------
def tabulateANYTHING(glyph,TYPE):
# concatenate 'q'with 'TYPE' to reference 'qVowel'
qTYPE=qTYPE+1
if qTYPE = 1
# concatenate 'TYPE' with part of the filename > 'VowelFile'
TYPEFile.write(TYPEFileHeader)
TYPEFile.write(glyph+linefeed) # again,concatenation...
return ;
如果您不知道我要在这里做什么,请告诉我,我会尽力让它更清楚...
答案 0 :(得分:0)
创建一个dict
或collections.Counter,然后在tabulateANYTHING
内递增具有与TYPE
匹配的键的值
例如,如果您的字典名为quantities
:
quantities[TYPE]+=1
对于文件,创建一个dict
个文件,并写入具有与TYPE
匹配的密钥的文件。
文件头也一样。