Сокращение этого конкретного кода

Я изучаю Python уже пару недель, и сразу после Пасхи у меня будет контролируемое оценивание, которое будет учитываться в моей оценке GCSE, за что я буду также отмечен по критериям чего-то вроде длины моего кода.

Вопрос заключался в следующем: написать программу на Python, которая запрашивает у пользователя слово, а затем вычисляет значение гласного введенного слова.

Что я хочу знать:

Есть ли способ сократить этот код?

А также:

Как выполнить программу, не печатая переменную "слово"?

Выше мне дали рубрику, которую я использовал в коде (в части потока управления).

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 ответа

Решение

Ты можешь использовать sum и 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. Символ может иметь только одно значение, если значения всегда оцениваются, но значения 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

Вот рабочий код:

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)
Другие вопросы по тегам