Используя import sys и sys.argv, подсчитайте количество уникальных гласных в строковых аргументах из командной строки

У меня есть следующая задача:

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'

А какой у тебя вопрос? Это работает?

Tim Roberts 20.03.2022 01:22

Как говорится в сообщении об ошибке, sys.argv[1:] — это список аргументов. Если вы намеревались передать один аргумент, используйте вместо него sys.argv[1].

John Gordon 20.03.2022 01:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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().

John Gordon 20.03.2022 01:31

@CryptoFool посмотрите описание ОП. каждая уникальный гласная

Agent Biscutt 20.03.2022 01:38
я написал этот код. Поскольку вопрос требует количества значений уникальный, мы можем использовать набор для хранения всех букв, которые появляются в строке, чтобы сделать ее быстрее. При этом OP должен был дать некоторую атрибуцию.
BrokenBenchmark 20.03.2022 01:39

Все хорошо, только не делай это привычкой. Кроме того, если эти вопросы связаны с домашними заданиями, убедитесь, что вы цитируете мой ответ и этот ответ в своей заявке. Мы здесь не для того, чтобы способствовать академической нечестности.

BrokenBenchmark 20.03.2022 02:04

Другие вопросы по теме