缩短此特定代码

时间:2015-03-03 21:36:33

标签: python code-complexity

我已经学习了几个星期的Python,并且在复活节之后,将有一个受控制的评估将计入我的GCSE等级,为此我将被标记为类似于lentgh的标准。我的代码。

问题是:编写一个Python程序,询问用户一个单词,然后计算打印输入单词的元音值。

我想知道的事情:

  

有没有缩短这段代码?

还有:

  

如何在不打印“word”变量的情况下执行程序?

上面我给出了我在代码中使用的量规(在控制流程部分中)。

score = 0

word = str(input("Input a word: "))

c = 0
for letter in word:
        print(word[c])
        c = c + 1
        if letter == "a":
                score = score + 5
        if letter == "e":
                score = score + 4
        if letter == "i":
                score = score + 3
        if letter == "o":
                score = score + 2
        if letter == "u":
                score = score + 1

print("\nThe score for your word is: " + score)

2 个答案:

答案 0 :(得分:6)

您可以使用sumdict,将元音作为键存储,并将相关值存储为值:

word = input("Input a word: ")

values = {"a":5,"e":4,"i":3,"o":2,"u":1}
print(sum(values.get(ch,0) for ch in word))

values.get(ch,0)将返回0作为默认值,如果单词中每个字符的ch不是元音,则不在我们的字典中。

sum(values.get(ch,0) for ch in word)generator expression,当为生成器对象调用 next ()方法

时,变量懒惰地进行评估

关于你自己的代码,你应该使用if / elif' s。一个字符只能有一个值,如果总是被评估,但只有前一个语句的计算结果为False才会评估elif:

score = 0
 # already a str in python3 use raw_input in python2
word = input("Input a word: ")

for letter in word:
        if letter == "a":
            score += 5 # augmented assignment same as score = score + 5
        elif letter == "e":
            score += 4
        elif letter == "i":
            score += 3
        elif letter == "o":
            score += 2
        elif letter == "u":
            score += 1

答案 1 :(得分:1)

这是工作代码:

word = input("Input a word: ")

values = {"a":5,"e":4,"i":3,"o":2,"u":1}
score = sum(values[let] for let in word if let in values)

print("\nThe score for your word is: " + score)