Проверка, появлялись ли алфавиты хотя бы один раз

#python

#python

Вопрос:

Вот эта программа, где я должен реализовать функцию, которая проверит, все ли алфавиты от a до j (преобразуя все алфавиты в нижний регистр) появились хотя бы один раз в данной строке или нет. Если все эти алфавиты (от a до j) появляются хотя бы один раз, то результатом будет 5. Если какой-либо из алфавитов (от a до j) отсутствует в данной строке, то результатом будет 6. Наконец, нужно вернуть этот результат и напечатать утверждение «Челси — лучший клуб в Англии» столько раз.

Если я вызываю:
A black jackal is hunting a full grown deer

Вывод должен быть:

 Chelsea is the best club in England
Chelsea is the best club in England
Chelsea is the best club in England
Chelsea is the best club in England
Chelsea is the best club in England
                                          
  

Я пытался:

 output = "Chelsea is the best club in England"
user_string = input("Enter the string: ")

def alphabets(string):
    lower_string = user_string.lower()
    for alph in lower_string: 
        if alph >= 'a' and alph <= 'j' in user_string:
            result = 5
            return (output * 5)
        else:
            result = 6
            return (output * 6)
    return result

print(alphabets("ABBCDEFEFGHI"))
  

На выходе появилось все в строке:

 Enter the string: ABBCDEFEFGHI
Chelsea is the best club in EnglandChelsea is the best club in EnglandChelsea is the best club in EnglandChelsea is the best club in EnglandChelsea is the best club in EnglandChelsea is the best club in England
  

Что я должен сделать, чтобы получить эти 5 предложений в 5 строках?

Комментарии:

1. Почему функция не использует string параметр?

2. if alph >= 'a' and alph <= 'j' in user_string не имеет смысла.

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

4. Кажется, вы приняли ответ, который совершенно неправильно отвечает на ваш пост

5. if len(set("abcdefghij").intersection(user_string.lower())) ==len("abcdefghij") : распечатайте это 5 раз, еще 6 раз. или лучше: set.issubset()

Ответ №1:

Вы можете получить только уникальные символы строки, используя:

 ''.join(set(MyString))
  

например

 ''.join(set("a black jackal is hunting a full grown deer"))
  

дает:

 'nohbajesrilcwdkuftg'
  

Очевидно, что сначала передайте его через функцию нижнего регистра

РЕДАКТИРОВАТЬ извините, я не полностью прочитал вопрос, меня больше интересовала ваша реализация подсчета.

Вы можете вывести что-то N раз в разных строках, используя:

 a_string = "abc"
for line in range(N-1):
  
  print(a_string)
  

Ответ №2:

Я предполагаю, что alphabet вы имеете в виду letter . Учитывая это, код должен выглядеть примерно так:

 letters_needed = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
output = "Chelsea is the best club in England"
user_string = input("Enter the string: ")

def alphabets(string):
    lower_string = user_string.lower()
    for letter in letters_needed:
        if lower_string.count(letter) == 0:
            return 6
    return 5

print((output "n") * alphabets("ABBCDEFEFGHI"))
  

Объяснение

В for loop мы просматриваем каждую букву в letters_needed списке. Если один из них letter не появляется в lower_string , мы возвращаем 6. Если цикл завершается, что означает, что значение не было возвращено, это означает, что каждая буква в списке letters_needed появляется более одного раза в lower_string поэтому мы можем вернуть 5. Наконец, мы печатаем нужную строку, добавляя новую строку n в конце, количество раз, возвращаемое alphabets функцией.

Ответ №3:

Несколько вещей:

На самом деле вы никогда не переходите user_string к alphabet , вместо этого вы передаете жестко закодированный строковый литерал. В alphabet вы даже не используете string параметр. Вместо этого вы полагаетесь на существование user_string из внешней области.

Чтобы напечатать пять или шесть строк в отдельных строках, вы можете либо str.join список строк с символом новой строки, вот так:

 def alphabet(string):
    message = "Chelsea is the best club in England"
    count = [6, 5][all(char in string.lower() for char in "abcdefghij")]
    print("n".join([message] * count))


user_string = input("Enter the string: ")
alphabet(user_string)
  

… Или включите новую строку как часть каждой строки, а затем «умножьте» строку сообщения пять или шесть раз — в этом случае вам нужно будет установить для print необязательного end параметра пустую строку, как я сделал ниже.

 def alphabet(string):
    message = "Chelsea is the best club in Englandn"
    count = [6, 5][all(char in string.lower() for char in "abcdefghij")]
    print(message * count, end="")
  

Вы также можете развернуть / распаковать список сообщений и установить для print необязательного sep параметра значение новой строки:

 def alphabet(string):
    message = "Chelsea is the best club in England"
    count = [6, 5][all(char in string.lower() for char in "abcdefghij")]
    print(*[message] * count, sep="n")
  

Комментарии:

1. Этому не хватает объяснения, и это довольно сложно для нового пользователя

Ответ №4:

Поскольку вам нужно проверить все от a до j , вы не можете вернуть что-либо напрямую, вам нужно повторить всю строку. Вам просто нужно выполнить итерацию по всем символам от a до j , если один отсутствует в словах, регистр 5 , в конечном регистре 6 , потому что вы бы нашли все символы

 def alphabets(string):
    lower_string = string.lower()
    for c in 'abcdefghij':  
        if c not in lower_string:
            return "n".join(5 * [output])
    return "n".join(6 * [output])    
  

Но самое простое, что вы можете сделать на данный момент, это

 def alphabet(string):
    count = 6 if set("abcdefghij").issubset(string.lower()) else 5
    return "n".join(count * [output])
  

Комментарии:

1. if set("abcdefghij").issubset(string.lower()): … было бы также

Ответ №5:

Вы могли бы просто добавить новую строку в свой вывод переменной.

  output = "Chelsea is the best club in England n "
  

В качестве альтернативы, ваш оператор return также может содержать новую строку

 if alph >= 'a' and alph <= 'j' in user_string:
            result = 5
            return ((output   "n") * 5)

        else:
            result = 6
            return ((output   "n") * 6)
  

Надеюсь, это помогло!