蓝桥杯青少组STEMA测评(2020年)Python编程题解


代码:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

import turtle as tt.speed(7)  #速度设置为快t.up()      #提笔t.hideturtle()  #隐藏海龟t.fd(120)   #前进120t.seth(90)  #方向90t.pencolor("red") #颜色-红t.pd()  #落笔t.circle(120) #绘制圆t.seth(0)     #方向左t.pencolor("black") #轮廓颜色-黑t.fillcolor("yellow") #填充颜色-黄for i in range(12):  #循环绘制12个菱形    t.right(30)      #菱形首条绘制边与轴线右偏30°    t.begin_fill()   #开始填充    for j in range(2): #用循环方式绘制四边        t.fd(80)        t.left(60)        t.fd(80)        t.left(120)    t.end_fill() #结束填充    t.up()    t.home()  #海龟复位,原点,方向左    t.seth((i+1)*30)  #下一轴线的方向    t.fd(120)    t.pd()t.mainloop()  #完成后保持图形

 


代码:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

n = int(input("请输入一个在2~15之间的正整数:"))#下推一行:前移一位后对应项目相加def down(ls):    L1 = ls+[0]    L2 = [0]+ls    L = []    for i in range(len(L1)):        L.append(L1[i]+L2[i])    return L#生成一行def createLine(ls):    s = [" "*(3*(n-len(ls)))]    for it in ls:        s.append('{:<6}'.format(it))    return "".join(s)    
lst = [1]allLst = []for i in range(n):    print(lst)    allLst.append(createLine(lst))    lst = down(lst)
print("\n".join(allLst))

解说:  杨辉三角形行之间的关系,实际是一行左移1位与没有移位的这一行对应项相加,就可以得到下一行(这种方法最适合笔算,编程与标准方法——相邻2项相加没有什么优势):

· 

· 

· 

· 

· 

· 

· 

def down(ls):    L1 = ls+[0]    L2 = [0]+ls    L = []    for i in range(len(L1)):        L.append(L1[i]+L2[i])    return L

  杨辉三角形本来是一个直角三角形,如果要打印出等腰三角形,那么每行就要后推½空档。本文一个数占6个字符,一半就是3个字符。生成一行打印字符串的代码如下:

· 

· 

· 

· 

· 

def createLine(ls):    s = [" "*(3*(n-len(ls)))]    for it in ls:        s.append('{:<6}'.format(it))    return "".join(s)

  用循环生成杨辉三角形,顺便打印每行的列表:

· 

· 

· 

· 

· 

· 

lst = [1]allLst = []for i in range(n):    print(lst)    allLst.append(createLine(lst))    lst = down(lst)

 


代码:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

nums = eval(input())#递归计算最大公约数,大的数减小的数直到相等,查看有关数学资料def gys(num1,num2):    if num1 == num2:        return num1    if num1 > num2:        return gys(num1-num2, num2)    else:        return gys(num2-num1, num1)n = gys(nums[0],nums[1])  #求最大公约数num1 = nums[0// n  #分子分母同时除以最大公约数num2 = nums[1] // nprint("/".join(map(str,nums)))if num2 == 1:    print(num1)else:    print("/".join([str(num1),str(num2)]))

使用分数对象的代码:

· 

· 

· 

· 

· 

· 

· 

· 

· 

from fractions import Fractionnum1, num2 = map(int, input().split(','))f = Fraction(num1,num2)num3, num4 = f.numerator, f.denominatorprint("%d/%d" % (num1,num2))if num4 == 1:    print(num3)else:    print("%d/%d" % (num3,num4))