【Educoder python 作业答案】国防科技大学《大学计算机基础》Python控制结构(二)※
- 第1关:分支结构基础实训
- 第2关:循环结构基础实训
- 第3关:函数基础实训
- 第4关:控制结构综合实训
第1关:分支结构基础实训
from math import *
def print_(x):
if type(x) == float:
print("%.4f" % x)
else:
print(x)
#第一题
for temp in [-280, -100, 0, 20, 120, 200]:
#请在下面编写代码
# ********** Begin ********** #
if temp < -273.15:
F = None
else:
F = 9/5 * temp + 32
# ********** End ********** #
#请不要修改下面的代码
print_(F)
print('\n***********************\n')
#第二题
for number in [-101.23, -3.14, 0, 12.55, 1908]:
# 请在下面编写代码
# ********** Begin ********** #
if number < 0:
number = - number
else:
number = number
# ********** End ********** #
# 请不要修改下面的代码
print_(number)
print('\n***********************\n')
#第三题
for (num1, num2) in [(12, 34), (-6, -7),(-12, 23), (-273, 0), (0, 199)]:
# 请在下面编写代码
# ********** Begin ********** #
if num1 > num2:
temp = num1
num1 = num2
num2 = temp
# ********** End ********** #
# 请不要修改下面的代码
print(num1, ' ', num2)
print('\n***********************\n')
#第四题
for (num1, num2, num3) in [(-231, -321, 123), (100, 0, -99), (-980, -1002, -1), (6,1,2017)]:
# 请在下面编写代码
# ********** Begin ********** #
list = [num1,num2,num3]
list.sort()
num1 = list[0]
num2 = list[1]
num3 = list[2]
# ********** End ********** #
# 请不要修改下面的代码
print(num1, num2, num3)
print('\n***********************\n')
#第五题
for (num1, num2) in [(10, 5), (12,34), (89,0), (-100, 23), (789, -123)]:
# 请在下面编写代码
# ********** Begin ********** #
if num2 != 0:
result = num1 / num2
else:
result = None
# ********** End ********** #
# 请不要修改下面的代码
print_(result)
print('\n***********************\n')
#第六题
for (a, b, c) in [(1,2,1), (1,-2,1), (1,2,-3), (12, 34, 56), (78, 89, 100)]:
# 请在下面编写代码
# ********** Begin ********** #
if a != 0:
delta = b**2-4*a*c
if delta < 0:
root1 = None
root2 = None
elif delta == 0:
s = -b/(2*a)
root1 = s
root2 = s
else :
root = sqrt(delta)
root1 = (-b+root)/(2*a)
root2 = (-b-root)/(2*a)
# ********** End ********** #
# 请不要修改下面的代码
print(root1, root2)
print('\n***********************\n')
#第七题
for x in [-9, -8, -7, -6, -5, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]:
# 请在下面编写代码
# ********** Begin ********** #
if x >= -10 and x < - 8:
x -= 2
elif x >= -8 and x < -6:
x += 3
elif x >= -6 and x <= -2:
x = x**2
elif x > -2 and x < 2:
x = abs(x)
elif x >= 2 and x <= 4:
x = x**3
elif x > 4 and x <= 6:
x = 3*x - 4
else:
x = 4*x+1
# ********** End ********** #
# 请不要修改下面的代码
print_(x)
第2关:循环结构基础实训
from random import *
from math import *
r = []
for i in [10, 200,300,400,500,600,700,800,900,1000]:
seed(i)
r.append(randint(1, i))
#第一题
#请在下面编写代码
# ********** Begin ********** #
print('摄氏温度\t\t华氏温度')
print('********************')
for temp in range(-40, 55, 5):
fah = 9 * temp / 5 + 32
print(str(temp) + '\t\t' + str(fah))
# ********** End ********** #
#请不要修改下面的代码
print('\n***********************\n')
#第二题
numbers = []
# 请在下面编写代码
# ********** Begin ********** #
n = 0
while n <= 300:
if n % 2 == 0 and n % 3 == 0 and n % 5 == 0:
numbers.append(n)
n += 1
# ********** End ********** #
# 请不要修改下面的代码
print(numbers)
print('\n***********************\n')
#第三题
# 请在下面编写代码
# ********** Begin ********** #
sum = 0
for i in range(1, 101):
sum+=i
# ********** End ********** #
# 请不要修改下面的代码
print(sum, '\t', 100*(100+1)
print('\n***********************\n')
#第四题
# 请在下面编写代码
# ********** Begin ********** #
fac = 1
for i in range(1, 31):
fac = fac*i
# ********** End ********** #
# 请不要修改下面的代码
print(fac)
print('\n***********************\n')
#第五题
for num in r:
#请在下面编写代码
# ********** Begin ********** #
is_prime = True
for i in range(2, num-1):
if num % i == 0:
is_prime = False
break
print(is_prime)
# ********** End ********** #
# 请不要修改下面的代码
print('\n***********************\n')
#第六题
sum = 0
avg = 0
for num in r:
# 请在下面编写代码
# ********** Begin ********** #
sum += num
avg = sum / len(r)
# ********** End ********** #
# 请不要修改下面的代码
print(sum, '\t', avg)
第3关:函数基础实训
from random import *
from math import *
r = []
for i in [10, 200,300,400,500,600,700,800,900,1000]:
seed(i)
r.append(randint(1, i))
def print_(x):
if type(x) == float:
print("%.4f" % x)
else:
print(x)
#第一题
def sumInt(n):
#请在下面编写代码
# ********** Begin ********** #
if n < 0:
return None
summary = 0
for i in range(1, n + 1):
summary += i
return summary
# ********** End ********** #
#请不要修改下面的代码
return summary
#第二题
def factorial(n):
#请在下面编写代码
# ********** Begin ********** #
if n < 0:
return None
fac = 1
for i in range(1, n+1):
fac *= i
# ********** End ********** #
#请不要修改下面的代码
return fac
#第三题
def isPrime(n):
# 请在下面编写代码
# ********** Begin ********** #
isprime = True
for i in range(2, int(sqrt(n))+1):
if n % i == 0:
isprime = False
break
# ********** End ********** #
# 请不要修改下面的代码
return (isprime)
#第四题
def f(x):
# 请在下面编写代码
# ********** Begin ********** #
if -10 <= x < -8:
fx = x - 2
elif x < -6:
fx = x + 3
elif x <= -2:
fx = x * x
elif x < 2:
fx = abs(x)
elif x <= 4:
fx = x ** 3
elif x <= 6:
fx = 3 * x -4
elif x <= 8:
fx = 4 * x + 1
# ********** End ********** #
# 请不要修改下面的代码
return fx
#第五题
def tax(salary):
#请在下面编写代码
# ********** Begin ********** #
if salary < 0:
return
elif salary < 47450:
salaTax = salary * 0.22
elif salary < 114650:
salaTax = salary * 0.25
elif salary < 174700:
salaTax = salary * 0.28
elif salary < 311950:
salaTax = salary * 0.33
else:
salaTax = salary * 0.35
# ********** End ********** #
# 请不要修改下面的代码
return salaTax
if __name__ == '__main__':
for num in [-10, 0, 10, 100, 1000, 10000]:
summary = sumInt(num)
print(summary)
print('\n***********************\n')
for num in [-5, 0, 10, 15, 20, 25, 30]:
fac = factorial(num)
print(fac)
print('\n***********************\n')
for num in r:
isprime = isPrime(num)
print(isprime)
print('\n***********************\n')
for x in [-9, -8, -7, -6, -5, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]:
fx = f(x)
print(fx)
print('\n***********************\n')
for salary in [-1000, 0, 40000, 47450, 98000, 114650, 14980, 17470, 25670, 311950, 360000]:
st = tax(salary)
print_(st)
第4关:控制结构综合实训
#第一题
def rankHurricane(velocity):
#请在下面编写代码
# ********** Begin ********** #
rank = None
if velocity < 74:
return None
if 74 <= velocity <= 95:
rank = 1
elif velocity <= 110:
rank = 2
elif velocity <= 130:
rank = 3
elif velocity <= 154:
rank = 4
else:
rank = 5
# ********** End ********** #
#请不要修改下面的代码
return rank
#第二题
def validCreditCard(num):
#请在下面编写代码
# ********** Begin ********** #
valid = False
if 100000000 > num > 10000000 :
oddSum = 0
even = 0
evenSum = 0
while not(num == 0):
oddSum += (num % 10)
num=num
even=(num%10)*2
while not(even==0):
evenSum += (even % 10)
even = even
num = num
final = oddSum + evenSum
if final % 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
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)
x= y0 + y0
m0 = m + 12 *((14- m)
d0 = (d + x + (31 * m0)
# ********** 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
return tens.lstrip()
# ********** End ********** #
# 请不要修改下面的代码
def hundreds_to_word(h): #利用unit_to_word、tens_to_word进行转换,并返回转换后结果的函数
# 请在下面编写代码
# ********** Begin ********** #
if h > 99:
word = unit_to_word(h
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))