1

我已经学习 Python 几个星期了,就在复活节之后,将进行一项受控评估,该评估将计入我的 GCSE 成绩,为此我还将根据我的代码长度之类的标准进行标记。

问题是:编写一个 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)
4

2 回答 2

6

您可以使用sumand a dict,将元音存储为键,将关联的值存储为值:

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)是一个生成器表达式,当为生成器对象调用next () 方法时,变量被 延迟计算

关于您自己的代码,您应该使用 if/elif's。一个字符只能有一个值,if 总是被评估,但 elif 仅在前一个语句评估为 False 时才被评估:

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
于 2015-03-03T21:39:15.737 回答
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)
于 2015-03-03T22:11:52.227 回答