一 绘制如下图形。
#Q1
import turtle as t
def draw(n):for i in range(n):t.left(30)t.fd(100)t.left(120)t.fd(100)t.left(120)t.fd(100)t.left(120)t.fd(100)t.right(90)
t.penup()
t.goto(-150,20)
t.speed(0)
t.pendown()
t.pencolor("red")
t.pensize(5)
draw(6)
t.seth(0)
二 逻辑推理
题目:
两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。(采用循环+条件判断的方法)
法1:
#Q2
for i in ['a','b','c']:for j in ['x','y','z']:if (i=='a'and j =='x') or (i=='c'and j=='x')or(i=='c'and j!='z'):continueelse:if (j=='z'and i!='c'):continueelse:if (j == 'y'and i=='b'):continueelse:print("{}和{}比".format(i,j))
法2:
A = ['x','y','z']
A.remove('x') #a不和x比
B = ['x', 'y', 'z']
C = ['x', 'y', 'z']
C.remove('x')
C.remove('z') #c不和xz比赛
for a in A:for b in B:for c in C:if a!=b and a!=c and b!=c:#当abc对战人都不相同时满足条件print('a和{}比赛 b和{}比赛 c和{}比赛'.format(a, b, c))
结果1:
结果2:
三 统计不同字符个数。
用户从键盘输入一行字符,编写一个程序,统计并输出其中的英文字符、数字、空格和其他字符的个数。
#Q3
str1 = input("请输入一行字符:")
a,b,c,d=0,0,0,0
for p in str1:if p.isnumeric():a+=1elif p.isspace():b+=1elif 65<=ord(p)<=90 or 97<=ord(p)<=122:c+=1else:d+=1
print("您输入的{}中共有数字{}个,空格{}个,字母{}个,其他字符{}个。".format(str1,a,b,c,d))
四 实现isPrime()函数
参数为整数,要有异常处理。如果整数是质数,返回True,否则返回False.
#Q4
def isPrime():try:a = eval(input("请输入一个整数n:"))if a == 1:return Trueelse:for i in range(1,a):if a % i == 0:return False else:return Trueexcept NameError:print("您所输入的并非整数!")
print(isPrime())
五 时针与分针的角度问题
普通时钟都有时针和分针,在任意时刻时针和分针都有一个夹角,并且假设时针和分针都是连续移动的。现已知当前的时刻,试求出该时刻时针和分针的夹角A(0-180度之间)。注意:当分针处于0分和59分之间时,时针相对于该小时的起始位置也有一个偏移角度。
【输入样例】8:10
【输出样例】 175.000
#Q5
tstr = input("请输入时间:")
for i in range(len(tstr)):if tstr[i].isnumeric() == 0:flag = i#获取冒号索引break
h = eval(tstr[0:flag])
m = tstr[flag+1::]
if m[0] == '0':m= eval(m[1])#避免输入类似12:05报错
else:m = eval(m)
#以下是角度计算:
hd = (h * 60 + m) * 0.5
md = m * 6.0
print("{:.3f}".format(min(abs(hd-md),(360-abs(hd-md)))))
六 编写函数求余弦函数的近似值
用下列公式求cos(x)的近似值,精确到最后一项绝对值小于0.01.
import math as m
def cos(x):cos,j,a,i= 0,0,1,0while abs(a)>0.01:a = (pow(x,i)/m.factorial(i))i = i + 2b = (-1)**(j)j = j+1c = a * bcos = cos + celse:return cos
m = cos(-3.14/2)
print("{:.6f}".format(m))
七 模拟发红包
输入红包金额,红包个数,输出每个红包的金额。输入金额单位为分(输入的金额为整数),每个红包金额最少为1分
import randomdef distribute_red_packets(total_amount, num_packets):packets = []remaining_amount = total_amountfor i in range(num_packets - 1):# 随机生成一个红包金额,范围为1分到剩余金额的平均值的两倍amount = random.randint(1, remaining_amount // 50)packets.append(amount)remaining_amount -= amount# 最后一个红包的金额为剩余的金额packets.append(remaining_amount)return packets# 测试代码
total_amount = 1000 # 总金额为10元(单位为分)
num_packets = 30 # 发放5个红包
red_packets = distribute_red_packets(total_amount, num_packets)
print(red_packets)
至此 完毕