Treinamento abrangente da estrutura de controle de aprendizado do Python

1. Requisitos

primeira pergunta

Na previsão do tempo, os furacões são geralmente classificados de acordo com a velocidade do vento. A tabela a seguir é uma tabela de comparação da velocidade do vento do furacão (mph) e da classificação do furacão. Complete a escrita da função no local especificado e imprima o nível do furacão de acordo com o valor da velocidade do vento inserido pelo usuário.

nível de furacão Velocidade do Vento (mph)
1 74-95
2 96-110
3 111-130
4 131-154
5 155 e acima

segunda questão

As regras para julgar se o número do cartão de crédito é legal ou não são:
a) Para um determinado número de cartão de crédito de 8 dígitos, por exemplo 43589795, começando pelo dígito mais à direita, adicione um número a cada dois dígitos, por exemplo 5+7+8+3=23. b) Multiplique cada dígito do número do cartão que não aparece no primeiro passo 2, depois some cada dígito do resultado da multiplicação. Por exemplo, para o exemplo acima, os números que não aparecem na primeira etapa 2são multiplicados por (da direita para a esquerda) 18, 18, 10, , 8e, em seguida, adicione todos os números a 1+8+1+8+1+0+8=27. c) Some os números obtidos nas duas etapas anteriores, se o número de dígitos for 0, o número do cartão de crédito inserido é válido.

Por favor, complete a escrita da função no local especificado para julgar se o número do cartão de crédito inserido pelo usuário 8é legal.

terceira pergunta

Um ISBN ( ISBN) 10identifica exclusivamente um livro com um número de dígito. O número mais à direita é a soma de verificação, que pode 9ser calculada a partir de outros dígitos e d1​+2d2​+3d3​+...+10d10​deve ser 11um múltiplo de ( di​o subscrito iindica o número da direita i). A soma de verificação deve ser um número entre e 0representado 10por X. 10Por exemplo: 020131452A soma de verificação de é 5, porque para a seguinte 11fórmula de múltiplos, 5é o único número entre e 0: .10d1 + 2*2 + 3*5 + 4*4 + 5*1 + 6*3 + 7*1 + 8*0 + 9*2 + 10*0

Complete a escrita da função no local especificado, 9calcule a soma de verificação e retorne ISBNo número com base nos dígitos anteriores.

quarta pergunta

Conclua a escrita da função no local especificado e imprima o calendário do mês de acordo com o ano e o mês. (Para obter a fórmula para calcular o dia da semana em um determinado dia, consulte Treinamento de solução de problemas de expressão em Python ). Três funções foram definidas nas perguntas do teste. Por favor, complete estas três funções. A função dayé usada para calcular e retornar o dia da semana em um determinado ano, mês e dia; a função isLeapYearé usada para julgar se um determinado ano é um ano bissexto; a função calendarimprime o ano e o mês fornecidos Para o calendário, preste atenção aos requisitos de formato de saída e ao alinhamento dos espaços, conforme mostrado na figura abaixo. Para o número específico de espaços, consulte o código deste pergunta.

quinta pergunta

Srinivasa Ramanujanfoi um matemático indiano conhecido por sua genialidade com os números. Certo dia , um matemático britânico G.H.Hardyveio visitá-lo e Hardymencionou que o táxi em que ele estava estava marcado com um número bastante chato 1729. RamanujanImediatamente respondeu: "Não, Hardy! Não, Hardy! Esse é um número muito interessante!". RamanujanDiga: "Para 1729este número, existem 2grupos de números diferentes, e cada grupo tem apenas 2um valor, e a soma dos cubos de cada grupo de valores é igual a 1729, e 1729é o menor número entre os números que podem ser expressa por dois grupos de números diferentes de acordo com as condições acima!" .

Complete a função escrevendo no local especificado para verificar se esta frase está correta. O programa recebe um inteiro Ncomo entrada e retorna todos Nos inteiros menores ou iguais ao que pode ser representado pelo método acima em um determinado formato. Em outras palavras, é encontrar 4diferentes inteiros positivos a, b, e . (Dica: use um loop aninhado).cda3+b3=c3+d34

Sexta pergunta

0Conclua a função escrevendo no local especificado para converter um inteiro de ~ inserido pelo usuário 999em sua representação em inglês correspondente, por exemplo, 729será convertido em seven hundred and twenty nine. É necessário usar funções o máximo possível para encapsular algumas conversões comumente usadas no programa, e não deve haver menos de 3uma função. Três funções foram definidas na pergunta de teste, por favor, complete essas três funções, unit_to_wordconverta o número de 0~ 9para o inglês e retorne o inglês convertido; tens_to_worduse unit_to_word, converta 10~ 19e o número de dez dígitos de 20~ para o inglês e retorne o convertido 99O inglês convertido; hundreds_to_worduse unit_to_word, tens_to_wordpara converter e retorne o resultado convertido.

Observe que não há espaços antes ou depois da string em inglês resultante. O formato de saída foi definido, apenas retorne ao inglês conforme necessário.

Dois, o código

#第一题

def rankHurricane(velocity):
    #请在下面编写代码
    # ********** Begin ********** #
    if velocity < 74:
        rank = None
    elif velocity < 96:
        rank = 1
    elif velocity < 111:
        rank = 2
    elif velocity < 131:
        rank = 3
    elif velocity < 155:
        rank = 4
    else:
        rank = 5
    # ********** End ********** #
    #请不要修改下面的代码
    return rank


#第二题

def validCreditCard(num):
    #请在下面编写代码
    # ********** Begin ********** #
    valid = False  
    if 1e+8 > num > 1e+7:
        a = 0
        b = 0
        b1 = 0
        while not(num == 0):
            a += num % 10
            b += num % 100 // 10
            num //= 100
            b = b * 2
            b1 += b % 10 + b // 10
            b = 0
        if (a + b1) % 10 == 0:
            valid = True
    # ********** End ********** #    
    #请不要修改下面的代码
    return valid

#第三题

def ISBN(n):
    # 请在下面编写代码
    # ********** Begin ********** #
    total = 0
    num = n
    for i  in range (2, 11):
        digit = num % 10
        total += i * digit
        num //= 10
    strn = str(n)
    if len(strn) < 9:
        strn = '0' * (9 - len(strn)) + strn
    trueISBN = ''
    if total % 11 == 1:
        trueISBN = strn + 'X'
    elif total % 11 == 0:
        trueISBN = strn + '0'
    else:
        trueISBN = strn + str(11 -(total % 11))
    # ********** End ********** #    
    # 请不要修改下面的代码
    return (trueISBN)

#第四题

def day(y, m, d):#计算y年m月d日是星期几
    # 请在下面编写代码
    # ********** Begin ********** #
    y0=y-(14-m)//12
    x=y0+y0//4-y0//100+y0//400
    m0=m+12*((14-m)//12)-2
    d0=(d+x+(31*m0)//12)%7
    # ********** End ********** #    
    # 请不要修改下面的代码
    return d0

def isLeapYear(year): #判断year年是否闰年
    # 请在下面编写代码
    # ********** Begin ********** #
    isLeapYear = (year % 4 == 0)
    isLeapYear = isLeapYear and (year % 100 != 0)
    isLeapYear = isLeapYear or (year % 400 == 0)
    # ********** End ********** #    
    # 请不要修改下面的代码
    return isLeapYear

def calendar(y, m): #打印y年m月日历
    print('       {}年{}月'.format(y,m))
    print('Su\tM\tTu\tW\tTh\tF\tSa')
    # 请在下面编写代码
    # ********** Begin ********** #
    date=day(y,m,1)
    days = 0
    if m in [1, 3, 5, 7, 8, 10, 12]:
        days = 31
    elif m in [4, 6, 9, 11]:
        days = 30
    else:
        if isLeapYear(y):
            days = 29
        else:
            days = 28
    count = date
    for i in range(date):
        print('\t', end='')
    for d in range(1, days + 1):
        print(str(d) + '\t', end="")
        count = (count + 1) % 7
        if count == 0:
            print()
    print()
    # ********** End ********** #
    # 请不要修改下面的代码

#第五题

def ramanujan(n):
    results = []
    #请在下面编写代码
    # ********** Begin ********** #
    for a in range (1, n + 1):
        a3 = a * a * a
        if a3 > n:
            break
        for b in range (a, n + 1):
            b3 = b * b * b
            if a3 + b3 > n:
                break;
            for c in range (a + 1, n + 1):
                c3 = c * c * c
                if c3 > a3 + b3:
                    break
                for d in range (c, n + 1):
                    d3 = d * d * d
                    if c3 + d3 > a3 + b3:
                        break
                    if c3 + d3 == a3 +b3:
                        result = str(a3+b3) + ' = ' + str(a) + '^3 + ' + str(b) + '^3 = ' + str(c) + '^3 + ' + str(d) + '^3'
                        results.append(result)
    # ********** End ********** #    
    # 请不要修改下面的代码
    return results


#第六题

def unit_to_word(u): #将0~9的数字转换成英文,并返回转换后的英文
    # 请在下面编写代码
    # ********** Begin ********** #
    convert_table = {0:"zero",
                1:"one",
                2:"two",
                3:"three",
                4:"four",
                5:"five",
                6:"six",
                7:"seven",
                8:"eight",
                9:"nine",}
    return convert_table[u]
    # ********** End ********** #
    # 请不要修改下面的代码


def tens_to_word(t): #利用unit_to_word,将10~19、以及20~99的十位部分数字转换成英文,并返回转换后的英文
    # 请在下面编写代码
    # ********** Begin ********** #
    convert_table = {
                0:"",
                10:"ten",
                11:"eleven",
                12:"twelve",
                13:"thirteen",
                14:"fourteen",
                15:"fifteen",
                16:"sixteen",
                17:"seventeen",
                18:"eighteen",
                19:"nineteen",
                2:"twenty",
                3:"thirty",
                4:"forty",
                5:"fifty",
                6:"sixty",
                7:"seventy",
                8:"eighty",
                9:"ninety",}
    if 9 < t < 20:
        return convert_table[t]
    else:
        tens = convert_table[t//10] + " " + unit_to_word(t%10)
    return tens.lstrip()
    # ********** End ********** #
    # 请不要修改下面的代码

def hundreds_to_word(h): #利用unit_to_word、tens_to_word进行转换,并返回转换后结果的函数
    # 请在下面编写代码
    # ********** Begin ********** #
    if h > 99:
        word = unit_to_word(h//100) + " hundred"
        tens = h % 100
        if tens == 0:
            return word
        else:
            return word + " and " + tens_to_word(tens)
    else:
            return tens_to_word(h)
    # ********** End ********** #    
    # 请不要修改下面的代码

if __name__ == '__main__':
    for v in [60, 74, 95, 96, 110, 111, 130, 131, 154, 170]:
        rank = rankHurricane(v)
        print(rank)
    print('\n***********************\n')

    for num in [1234567, 43589795, 87539319, 123456789]:
        valid = validCreditCard(num)
        print(valid)
    print('\n***********************\n')

    for num in [201314525, 488888913, 977889994, 753231846, 701134069]:
        trueISBN = ISBN(num)
        print(trueISBN)
    print('\n***********************\n')

    for (y,m) in [(2017,8), (2017,10),(2015,8), (2017,2), (2016,2)]:
        calendar(y, m)
        print('---------------------------')

    print('\n***********************\n')

    for num in [2000, 10000, 100000]:
        st = ramanujan(num)
        for item in st:
            print(item)

    print('\n***********************\n')

    for test in [0, 5, 19, 23, 100, 700, 711, 729]:
        print(test, "=>", hundreds_to_word(test))

Acho que você gosta

Origin blog.csdn.net/qq_43659681/article/details/124906980
Recomendado
Clasificación