У меня есть следующая задача:
Import the
sys
module to use sys.argv. Create a function with a string parameter that will print the number of unique vowels in the string regardless of whether it has uppercase, lowercase, numbers, spaces or unique characters.
Например:
Test 1: python3 countVowels.py Batman
Test 2: python3 countVowels.py 'The Dark Knight'
Test 3: python3 countVowels.py 'oaIeuOnI t_#pA'
Используйте sys.argv для аргументов; не вставляйте аргументы вручную, чтобы найти количество уникальных гласных.
Например, не делайте этого:
print(count_vowels("G0tham City 3ni$peo"))
У меня есть следующий код, некоторые из которых были получены из этот ответ:
import sys
def count_vowels(text):
letter = set(text.lower())
count = 0
for vowel in 'aeiou':
if vowel in letters:
count += 1
return count
print(count_vowels(sys.argv[1:]))
Сообщение об ошибке:
Traceback (most recent call last):
File "countVowels.py", line 12, in <module>
print(count_vowels(sys.argv[1:]))
File "countVowels.py", line 4, in count_vowels
letter = set(text.lower())
AttributeError: 'list' object has no attribute 'lower'
Как говорится в сообщении об ошибке, sys.argv[1:]
— это список аргументов. Если вы намеревались передать один аргумент, используйте вместо него sys.argv[1]
.
Первая проблема: вы перебираете список
print(count_vowels(sys.argv[1:])) # "1:" returns a list, not index 1
Это должен быть просто ```python печать (count_vowels (sys.argv [1]))
Вторая проблема: вы повторяете не то, что нужно
import sys
def count_vowels(text):
letter = set(text.lower())
count = 0
for vowel in 'aeiou': #you should iterate through letter not "aeiou"
if vowel in letters: #
count += 1
return count
попробуйте это вместо этого:
import sys
def count_vowels(text):
word = set(text.lower()) #rename for easier identification
count = 0
for letter in word: #iterate through word
if letter in "aeiou": #if "letter" is a vowel, increment
count += 1
return count
print(count_vowels(sys.argv[1]))
Это должно сработать.
Также, чтобы объяснить set()
. Эта функция возвращает набор с каждым уникальным значением в нем. Например:
set([1,1,2,3,2,3,2,3])
вернется:
{1,2,3}
set()
делает то же самое для персонажей. Пример:
set("aaabccc")
возвращает:
{"a","b","c"}
Использование set означает, что ваша функция имеет дело только с неповторяющимися символами, поэтому вам не нужно отслеживать, посчитали ли вы уже гласную. В противном случае, например, вам придется отслеживать каждую пропущенную букву «а», иначе вы будете считать ее более одного раза.
Наверное, стоит обратить внимание на то, что именно делает set()
.
@CryptoFool посмотрите описание ОП. каждая уникальный гласная
Все хорошо, только не делай это привычкой. Кроме того, если эти вопросы связаны с домашними заданиями, убедитесь, что вы цитируете мой ответ и этот ответ в своей заявке. Мы здесь не для того, чтобы способствовать академической нечестности.
А какой у тебя вопрос? Это работает?