第一题
气象预报时,一般按照风速对飓风进行分级,下表是飓风风速(英里/小时)与飓风分级对照表。请在指定位置完成函数编写,根据用户输入的风速值,输出其飓风级别。
飓风级别 | 风速(英里/小时) |
---|---|
1 | 74-95 |
2 | 96-110 |
3 | 111-130 |
4 | 131-154 |
5 | 155及以上 |
第二题
信用卡号是否合法的判断规则为:
a) 对给定的8位信用卡号码,如43589795
,从最右边数字开始,隔一位取一个数相加,如5+7+8+3=23
。 b) 将卡号中未出现在第一步中的每个数字乘2
,然后将相乘的结果的每位数字相加。例如,对上述例子,未出现在第一步中的数字乘2
后分别为(从右至左)18
、18
、10
、8
,则将所有数字相加为1+8+1+8+1+0+8=27
。 c) 将上述两步得到的数字相加,如果得数个位为0
,则输入的信用卡号是有效的。
请在指定位置完成函数的编写,判断用户输入的8
位信用卡号码是否合法。
第三题
国际标准书号(ISBN
)用10
位数字唯一标识一本书。最右边的数字为效验和,可由其他9
位数字计算出来,且d1+2d2+3d3+...+10d10
必须是11
的倍数(di
的下标i
表示从右边起第i
个数)。效验和必须是介于0
到10
中的一个数字,用X表示10
。例如:020131452
的效验和是5
,因为对于以下11
的倍数的公式,5
是唯一的介于0
到10
之间的数:d1 + 2*2 + 3*5 + 4*4 + 5*1 + 6*3 + 7*1 + 8*0 + 9*2 + 10*0
。
请在指定位置完成函数的编写,以前9
位数字为基础,计算效验和并返回ISBN
号。
第四题
在指定位置完成函数编写,根据年和月,打印该月的日历。(计算某一天是星期几的公式见Python表达式问题求解实训)。试题中已定义了三个函数,请完成这三个函数,其中函数day
用于计算并返回某年某月某日是星期几;函数isLeapYear
用于判断某年是否是闰年;函数calendar
打印所给年月的日历,注意输出格式要求和空格的对齐,如下图所示,具体的空格数请参见本题代码。
第五题
Srinivasa Ramanujan
是一个因他在数字上的天分而出名的印度数学家。有一天,英国数学家G.H.Hardy
来拜访他,Hardy
提到自己乘坐的出租车标有一个相当无聊的数字1729
。Ramanujan
当即回答道,“不,Hardy
!不,Hardy
!这是一个非常有趣的数字!”。Ramanujan
说:“对1729
这个数字,存在2
组不同的数,且每组只有2
个数值,每一组数值的立方和等于1729
,且1729
是能够被两组不同的数按上述条件表达的数中最小的那个!”。
请在指定位置完成函数编写,验证这句话是否正确。程序将整数N
作为输入,按一定格式返回所有能够被上述方法表示的小于或等于N
的整数。换句话说,就是找到4
个不同的正整数a
、 b
、 c
、 d
且 a3+b3=c3+d3
。(提示:用4
个嵌套循环)。
第六题
请在指定位置完成函数编写,将用户输入的一个0
~999
的整数转换成其对应的英文表示,例如,729
将被转换成seven hundred and twenty nine
。要求,在程序中尽可能地使用函数封装一些常用的转换,不得少于3
个函数。试题中已定义了三个函数,请完成这三个函数,unit_to_word
将0
~9
的数字转换成英文,并返回转换后的英文;tens_to_word
利用unit_to_word
,将10
~19
、以及20
~99
的十位部分数字转换成英文,并返回转换后的英文;hundreds_to_word
利用unit_to_word
、tens_to_word
进行转换,并返回转换后结果。
请注意,得到的英文字符串前后没有空格。输出格式已经设定好,按要求返回英文即可。
#第一题
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))