У меня есть функция под названием four_letter_list, цель которой - вернуть новый список, в котором рандомизированы 4-буквенные слова, которые могут быть построены с использованием «n-й» буквы алфавита.

Вы не можете использовать встроенные функции Python, кроме len, range, циклов for, while и операторов if-elif-else.

Пример: def four_letter_words (2) возвращает список ['AAAA', 'AAAB', 'AABA', 'AABB', 'ABAA', 'ABAB', 'ABBA', 'ABBB', 'BAAA', 'BAAB' , 'BABA', 'BABB', 'BBAA', 'BBAB', 'BBBA', 'BBBB']

Это код у меня

def four_letter_words(n): #returns four letter words
    new_list = []
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    index = 0
    for element in n:
        while index >= 1:


    return new_list


Я думал об использовании group.by, но мы можем использовать только те функции, которые указаны выше.

-1
Beans 25 Фев 2021 в 00:37

4 ответа

Лучший ответ

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

def four_letter_words(n):
    new_list = []
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    letter = alphabet[n-1]

    for l1 in alphabet:
        for l2 in alphabet:
            for l3 in alphabet:
                for l4 in alphabet:
                    if (l1 == letter) or (l2 == letter) or (l3 == letter) or (l4 == letter):
                        word = l1+l2+l3+l4
                        new_list.append(word)
    return(new_list)

print(four_letter_words(2))

Это можно обобщить на слова любой длины, используя рекурсию вместо вложенных циклов.

0
Adam Oellermann 24 Фев 2021 в 21:51

Использование рекурсии:

def letter_words(n, len=4):
    return [''] if len == 0 else [c + l for l in letter_words(n=n, len=len - 1) for c in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[:n]]
0
PieCot 24 Фев 2021 в 22:31

Используйте 4 вложенных цикла над первыми n буквами алфавита.

def four_letter_words(n): 
    """returns four letter words"""
    new_list = []
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    first_n = alphabet[:n]
    index = 0
    for c1 in first_n:
        for c2 in first_n:
            for c3 = first_n:
                for c4 = first_n:
                    new_list.append(c1 + c2 + c3 + c4)

    return new_list
0
Barmar 24 Фев 2021 в 21:46

Для этого существует стандартная библиотечная функция python: itertools.product. В противном случае просто используйте 4-слойный цикл for.

0
Bing Wang 24 Фев 2021 в 21:43