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 2
são multiplicados por (da direita para a esquerda) 18
, 18
, 10
, , 8
e, 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
) 10
identifica exclusivamente um livro com um número de dígito. O número mais à direita é a soma de verificação, que pode 9
ser calculada a partir de outros dígitos e d1+2d2+3d3+...+10d10
deve ser 11
um múltiplo de ( di
o subscrito i
indica o número da direita i
). A soma de verificação deve ser um número entre e 0
representado 10
por X. 10
Por exemplo: 020131452
A soma de verificação de é 5
, porque para a seguinte 11
fórmula de múltiplos, 5
é o único número entre e 0
: .10
d1 + 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, 9
calcule a soma de verificação e retorne ISBN
o 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 calendar
imprime 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 Ramanujan
foi um matemático indiano conhecido por sua genialidade com os números. Certo dia , um matemático britânico G.H.Hardy
veio visitá-lo e Hardy
mencionou que o táxi em que ele estava estava marcado com um número bastante chato 1729
. Ramanujan
Imediatamente respondeu: "Não, Hardy
! Não, Hardy
! Esse é um número muito interessante!". Ramanujan
Diga: "Para 1729
este número, existem 2
grupos de números diferentes, e cada grupo tem apenas 2
um 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 N
como entrada e retorna todos N
os inteiros menores ou iguais ao que pode ser representado pelo método acima em um determinado formato. Em outras palavras, é encontrar 4
diferentes inteiros positivos a
, b
, e . (Dica: use um loop aninhado).c
d
a3+b3=c3+d3
4
Sexta pergunta
0
Conclua a função escrevendo no local especificado para converter um inteiro de ~ inserido pelo usuário 999
em sua representação em inglês correspondente, por exemplo, 729
será 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 3
uma função. Três funções foram definidas na pergunta de teste, por favor, complete essas três funções, unit_to_word
converta o número de 0
~ 9
para o inglês e retorne o inglês convertido; tens_to_word
use unit_to_word
, converta 10
~ 19
e o número de dez dígitos de 20
~ para o inglês e retorne o convertido 99
O inglês convertido; hundreds_to_word
use unit_to_word
, tens_to_word
para 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))