2015-03-03 2 views
1

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

Вопрос был: Напишите программу 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) 
+0

Обратите внимание, что Python имеет '+ = 'оператор. Вы можете написать 'score = score + 2' как' score + = 2'. – Functino

ответ

6

Вы можете использовать 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, который каждый символ в слово не является гласным, поэтому не в нашем dict.

sum(values.get(ch,0) for ch in word) является generator expression где переменные оцениваются лениво, когда метод следующий() вызывается для объекта генератора

В соответствии с вашим собственным кодом следует использовать,/Элиф-х. Персонаж может иметь только одно значение, если всегда находятся оценены, но Элиф являются только оценены, если предыдущий оператор вычисляет значение 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 
+0

Спасибо, человек, но я думаю, мне придется пойти со второй версией, потому что мой учитель еще не ожидает, что я буду знать о словарях (хотя я уже это сделал, потому что сделал некоторые ранние исследования), и если бы я собирался использовать его , Она, вероятно, сказала бы, что мне придется переделать, потому что она «слишком продвинута», и я «скопировал» ее из Интернета, что «плохо для моей контролируемой оценки», поскольку я не смогу ее понять. –

+0

Нет проблем, хорошо понимать разницу между if и elif в любом случае, есть моменты, когда вы хотите, чтобы следующее утверждение проверялось независимо от того, и наоборот, так важно понимать разницу между ними. –

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) 
Смежные вопросы