繁体   English   中英

计算合并字符串中的元音数量

[英]Counting number of vowels in a merged string

我想弄清楚如何计算两个合并的名单列表的得分。 我需要为每个字符(包括名字和姓氏之间的空格)加一个点,并为名称中的每个元音添加一个点。 我现在可以计算名称长度的分数,但无法弄清楚如何包含元音的数量。

a = ["John", "Kate", "Oli"]
b = ["Green", "Fletcher", "Nelson"]

vowel = ["a", "e", "i", "o", "u"]

gen = ((x, y) for x in a for y in b)

score = 0

for first, second in gen:
    print first, second
    name = first, second
    score = len(first) + len(second) +1
    for letter in name:
        if letter in vowel:
            score+1
    print score

这是我现在拥有的,这是我得到的输出:

John Green
10
John Fletcher
13
John Nelson
11
Kate Green
10
Kate Fletcher
13
Kate Nelson
11
Oli Green
9
Oli Fletcher
12
Oli Nelson
10

这是我需要的输出:

Full Name: John Green Score: 13 
Full Name: John Fletcher Score: 16 
Full Name: John Nelson Score: 14 
Full Name: Kate Green Score: 14 
Full Name: Kate Fletcher Score: 17 
Full Name: Kate Nelson Score: 15 
Full Name: Oli Green Score: 13 
Full Name: Oli Fletcher Score: 16
Full Name: Oli Nelson Score: 14

你不计算元音的原因是因为得分变量没有增加。 要增加它,您必须将变量分数设置为先前分数+ 1。

这应该工作:

for letter in name:
    if letter in vowel:
        score+=1

编辑:值得写的是得分+ = 1与得分=得分+ 1相同

我解决了错误 - 而不是创建名称=第一,第二,初始化名称为第一+第二。 您将获得所需的结果。 它失败的原因是因为name = first,second创建了一个元组,并且通过元组迭代使得letter =“Kate”,“John”等,而不是实际的单个字符。

a = ["John", "Kate", "Oli"]
b = ["Green", "Fletcher", "Nelson"]
vowel = {"a", "e", "i", "o", "u"}
names = (first + ' ' + last for first in a for last in b)

for name in names:
    score = len(name) + sum(c in vowel for c in name.lower())
    print "Full Name: {name} Score: {score}".format(name=name, score=score)

Full Name: John Green Score: 13
Full Name: John Fletcher Score: 16
Full Name: John Nelson Score: 14
Full Name: Kate Green Score: 14
Full Name: Kate Fletcher Score: 17
Full Name: Kate Nelson Score: 15
Full Name: Oli Green Score: 13
Full Name: Oli Fletcher Score: 16
Full Name: Oli Nelson Score: 14

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM