【Educoder python 作业答案】国防科技大学《大学计算机基础》Python控制结构(二)※

【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)//2)

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//10
            even=(num%10)*2
            while not(even==0):
                evenSum += (even % 10)
                even = even // 10
            num = num // 10
        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 //= 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): #将09的数字转换成英文,并返回转换后的英文
    # 请在下面编写代码
    # ********** 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,将1019、以及2099的十位部分数字转换成英文,并返回转换后的英文
    # 请在下面编写代码
    # ********** 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))

你可能感兴趣的:(Educoder实训,python,开发语言)