'''Demo01 摄氏温度转化为华氏温度
题目描述
输入一个摄氏温度的值,将它转变为华氏温度,并将结果输出
转换的公式为如下:
输入输出描述
输入一个值表示摄氏温度celsius
输出华氏温度fahrenheit ,结果保留一位小数点
示例
输入:
43
输出:'''
cel = eval (input())
fah = (9 / 5) * cel + 32
print("%.1f" % fah)
'''
Demo02 计算圆柱体的体积
题目描述
输入圆柱的半径和高,并利用如下公式计算圆柱体的底面积和体积。
输入输出描述
分别输入圆柱的半径radius和高度length,两个数据之间用空格分隔
输出两行,第一行为圆柱底面积area,第二行为圆柱体积volume,结果保留两位小数点
示例
输入:
5.5 12
输出:
95.03
1140.41
'''
radius, length = input().split() #输入radius length
radius = float(radius)
length = float(length)
area = radius * radius * 3.14 #计算底面积
volume = area * length #计算volume
print("%.2f" % area) #输出
print("%.2f" % volume) #输出
''' Demo03 将英尺数转换为米数
题目描述
输入英尺数然后将它转换为米数,并输出结果,一英尺等于0.305米
输入输出描述
输入一个数据表示英尺数
输出转换后的米数,结果保留四位小数点
示例
输入:
16.5
输出:
5.0325
'''
EC = float(input())
m = 0.305 * EC
print("%.4f" %m)
''' Demo04 计算小费
题目描述
读取小计和酬金率,然后计算小费以及合计金额。例如客户的小计为10元,酬金率为15%,那么小费是
1.5元,合计金额为11.5元
输入输出描述
分别输入小计和酬金率,两个数据用之间用空格分隔
输出两行,第一行为小费,第二行为合计金额,结果保留两位小数
示例
输入:
15.69 15
输出:
2.35
18.04
'''
xiaoji, fare = input().split()
xiaoji = float(xiaoji)
fare = float(fare)
fare = fare / 100
xiaofei = xiaoji * fare #计算小费
nsum = xiaofei + xiaoji #计算总金额
print("%.2f" % xiaofei)
print("%.2f" % nsum)
'''Demo05 对一个整数中的各位数字求和
题目描述
读取一个0到1000之间的整数,并计算它各位数字之和
输入输出描述
输入一个[0,1000]之间的整数
输出该数字的各位数字之和
示例1
输入:
999
输出:
27
解释:
999各位数之和为9 + 9 + 9 = 27
示例2
输入:
12
输出:
3
'''
math = eval(input())
ge = math % 10#各位数的值
shi = (math // 10) % 10#十位数的值
bai = (math // 100) % 10#百位数的值
sum = ge + shi +bai #计算个位数的和
print(ge)
print(shi)
print(bai)
print(sum)
'''
Demo06 计算年数和天数
题目描述
输入分钟数,然后将该分钟数转换为年数和天数,假定一年有365天
输入输出描述
输入一个分钟数
输出两行,第一行为年数,第二行为天数
示例
输入:
1000000000
输出:
1902
214
'''
minutes = eval(input())
hours = minutes //60 #计算总小时
days = hours // 24 #计算总天数
years = days // 365 #计算总年数
days = days % 365 #计算多余的年数
print(years)
print(days)
'''
Demo07 计算能量
题目描述
水从初始温度加热到最终温度是需要能量的,请计算需要多少能量,公式如下:
这里的M是按千克计的水量,初始温度和最终温度均为摄氏度,热量Q以焦耳计
输入输出描述
输入三行数据,第一行输入水量,第二行输入初始温度,第三行输入最终温度
输出所需的能量值,结果保留一位小数
示例
输入:
55.5
3.5
10.5
输出:
1625484.0
'''
M = input()
M = float(M)
initialTemperature = input()
initialTemperature = float(initialTemperature)
finalTemperature = input()
finalTemperature = float(finalTemperature)
Q = M * (finalTemperature - initialTemperature) * 4184
print("%0.1f" % Q)
'''Demo08 分割数字
题目描述
输入一个四位整数,并以反向顺序显示
输入输出描述
输入一个四位整数
输出四行,第一行为个位,第二行为十位,第三行为百位,第四行为千位
示例
输入:
5213
输出:
3
1
2
5'''
print("输入一个四位整数")
M = int(input())
a = M % 10 #计算个位的值
b = (M // 10) % 10 #计算十位的值
c = (M // 100) % 10 #计算百位的值
d = (M // 1000) % 10 #计算千位的值
print(a)
print(b)
print(c)
print(d)
'''Demo09 计算三角形的面积
题目描述
输入三角形的三个顶点坐标,并计算其面积,计算公式如下
side1 = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
side2 = ((x3 - x2) ** 2 + (y3 - y2) ** 2) ** 0.5
side3 = ((x1 - x3) ** 2 + (y1 - y3) ** 2) ** 0.5
s = (side1 + side2 + side3) / 2
area = (s * (s - side1) * (s - side2) * (s - side3)) ** 0.5
输入输出描述
输入六个数据,分别表示三角形三个顶点的坐标x1、y1、x2、y2、x3和y3,数据之间用空格分隔
输出三角形的面积,结果保留一位小数
示例
输入:
1.5 -3.4 4.6 5 9.5 -3.4
输出:
33.6
'''
x1, y1, x2, y2, x3, y3 = input().split() #输入顶点坐标数据
x1 = float(x1)
x2 = float(x2)
x3 = float(x3) #将数据转换位为浮点数
y1 = float(y1)
y2 = float(y2)
y3 = float(y3)
side1 = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
side2 = ((x3 - x2) ** 2 + (y3 - y2) ** 2) ** 0.5 #计算
side3 = ((x1 - x3) ** 2 + (y1 - y3) ** 2) ** 0.5
s = (side1 + side2 + side3) / 2
area = (s * (s - side1) * (s - side2) * (s - side3)) ** 0.5
print("%.1f" % area)
''' Demo10 显示当前时间
题目描述
输入你所在的时区,并输出当前的时间
输入输出描述
输入时区,如东八区为8,西五区为-5
输出二十四小时制的时间,格式为 时:分:秒
示例
输入:
8
输出:
21:43:12'''
import time
# 输入时区
timezone = int(input())
# 获取本地时间
local_time = time.localtime()
# 计算时区差值
hour_diff = timezone - 8 # 8代表东八区
# 调整时间
hour = local_time.tm_hour + hour_diff
minute = local_time.tm_min
second = local_time.tm_sec
# 格式化时间
time_str = f"{hour % 24:02d}:{minute:02d}:{second:02d}"
# 输出结果
print(time_str)
'''
Demo11 计算三角形的三个角
输入三角形的三个顶点坐标,并计算该三角形的三个角分别是多少(角度制)
其中a、b、c分别表示三条边,A、B、C分别表示三边对应的角
输入输出描述
输入六个数据,分别表示三角形三个顶点的坐标x1、y1、x2、y2、x3和y3,数据之间用空格分隔
输出三行,分别为A、B、C三个角的度数,结果保留两位小数
示例
输入:
1 1 6.5 1 6.5 2.5
输出:
15.26
90.00
74.74
'''
import math
# 输入三角形三个顶点坐标
x1, y1, x2, y2, x3, y3 = map(float, input().split())
# 计算三角形三个边长
a = math.sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2)
b = math.sqrt((x1 - x3) ** 2 + (y1 - y3) ** 2)
c = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
# 计算三角形三个角度
A = math.degrees(math.acos((b**2 + c**2 - a**2) / (2 * b * c)))
B = math.degrees(math.acos((a**2 + c**2 - b**2) / (2 * a * c)))
C = 180 - A - B
# 输出结果
print("{:.2f}".format(A))
print("{:.2f}".format(B))
'''Demo12 最小数量的硬币
题目描述
假设硬币种类分为:一元硬币、两角五分硬币、一角硬币、五分硬币、一分硬币
输入总金额,并将总金额兑换成若干个硬币,并保证所兑换的硬币个数最少
输入输出描述
输入总金额
输出每种硬币的个数
示例
输入:
11.56
输出:
11个一元硬币
2个两角五分硬币
0个一角硬币
1个五分硬币
1个一分硬币'''
print("输入总金额")
a = 0
b = 0
c = 0
d = 0
e = 0
x = float(input())
#因为不知道要循环多少次,使用while
while x >= 0:
if x >= 1:
x = x - 1
a = a + 1
elif x >= 0.25:
x = x - 0.25
b = b + 1
elif x >= 0.1:
x = x - 0.1
c = c + 1
elif x >= 0.05:
x = x - 0.05
d = d + 1
elif x >= 0.01:
x = x - 0.01
e = e + 1
else:
break
print(a,"个一元硬币")
print(b,"个两角五分硬币")
print(c,"个一角硬币")
print(f"{d}个五分硬币")
print(f"{e}个一分硬币")
'''
Demo13 正多边形的面积
题目描述
正多边形是边长相等的多边形,而且所有的角相等,计算正多边形的公式为:
area = n * s ** 2 / (4 * math.tan(math.pi / n))
输入输出描述
输入两个数据分别表示边的个数n和边的长度s,数据之间用空格分隔
输出边长为s的正n多边形的面积,结果保留两位小数
示例
输入:
5 6.5
输出:
72.69
'''
import math
'''
Demo14 计算身体质量指数
题目描述
BMI是根据体重测量健康的方式,通过以千克为单位的体重除以以米为单位的身高的平方计算而出
BMI指数解读如下:
BMI < 18.5 超轻
18.5 ≤ BMI < 25.0 标准
25.0 ≤ BMI <30.0 超重
30.0 ≤ BMI 肥胖
输入输出描述
输入体重和身高,数据之间用空格分隔
输出BMI指数结果
示例
输入:
60 1.8
输出:
标准
'''
weight, height = map(float, input().split()) #输入
BMI = weight / height ** 2 #计算bmi
if BMI < 18.5: #输出对应的结果
print("超轻")
elif BMI < 25.0:
print("标准")
elif BMI < 30.0:
print("超重")
else:
print("肥胖")
n, s = map(float, input().split())
area = n * s ** 2 / (4 * math.tan(math.pi / n))
print(round(area, 2))
'''Demo15 判定闰年
超重
肥胖
题目描述
一个年份如果能被4整除但不能被100整除,或者能被400整除,那么这个年份就是闰年
输入输出描述
输入一个年份
输出Yes表示该年份为闰年,No则表示不是闰年
示例1
输入:
2008
输出:
Yes
示例2
输入:
2002
输出:
No'''
year = int (input('请输入年份'))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print("YES")
else:
print("NO")
'''Demo16 中彩票
题目描述
随机产生一个两位数数字,然后用户输入一个两位数数字,并根据以下规则判定用户赢得的奖金是多少
(1)输入的数字和随机产生的数字完全相同(包括顺序),奖金为10000元
(2)输入的数字和随机产生的数字相同(不包括顺序),奖金为3000元
(3)输入的数字和随机产生的数字有一位数相同,奖金为1000美元
(4)输入的数字和随机产生的数字都不相同,没有奖金,0元
输入输出描述
输入一个两位数
输出两行,第一行输出那个随机产生的两位数,第二行输出用户的奖金
示例1
输入:
12
输出:
12
10000
示例2
输入:
12
输出:
21
3000
示例3
输入:
12
输出:
23
1000
示例4
输入:
12
输出:
45
0
'''
import random
randNum = random.randint(10,99)#输出一个随机值
userNum = eval(input())
r1 = randNum // 10 #算出个位与十位的值
r2 = randNum % 10
s1 = userNum // 10
s2 = userNum % 10
print(randNum)
if randNum == userNum:#判断输出对应的结果
print(10000)
elif r1 == s2 and r2 == r1:
print(5000)
elif r1 == s1 or r1 == s2 or r2 == r1 or r2 == s2:
print(3000)
else:
print(0)
''' Demo17 解一元二次方程
题目描述
一元二次方程 的解可以使用下面的公式计算
其中称为判别式,如果它为正,则方程有两个实数解;为零,方程只有一个实数解;为负,没
有实数解
输入输出描述
输入a、b、c三个数据,数据之间用空格分隔
两个解每行输出一个;一个解单行输出;无解则单行输出无实数解,保留两位小数
示例1
输入:
1.0 3 1
输出:-0.38-2.62
示例2
输入:
1 2.0 1
输出:-1.00
示例3
输入:
1 2 3
输出:
无实数解'''
a, b, c = input().split()
a = float(a)
b = float(b)
c = float(c)
delt = b ** 2 - 4 * a * c
if delt > 0: #判断
x1 = (-b + delt ** 0.5) / (2 * a) #计算
x2 = (-b - delt ** 0.5) / (2 * a)
print( "%0.2f" % x1)
print("%0.2f" % x2)
elif delt == 0:
x = -b / (2 * a)
print( "%0.2f" %x )
else:
print("无实数解")
'''
Demo18 解2x2线程方程
题目描述
如有一个2x2的线程方程组:
你可以使用克莱姆法则解该线性方程:
其中 为判别式,如果为零则输出无解
输入输出描述
输入a、b、c、d、e、f六个数据,数据之间用空格分隔
输出两行,第一行x的解,第二行y的解,保留一位小数
示例1
输入:
9.0 4.0 3.0 -5.0 -6.0 -21.0
输出:-2.0
3.0
示例2
输入:
1.0 2.0 2.0 4.0 4.0 5.0
输出:
无解
'''
a, b, c, d, e, f = input().split() #输入
a = float(a)
b = float(b)
c = float(c)
d = float(d)
e = float(e)
f = float(f)
if a * d - b * c == 0: #判断并计算数据
print("无解")
else :
x = (e * d - b * f)/(a * d - b * c)
y = (a * f - e * c)/(a * d - b * c)
print("%0.1f" % x)
print("%0.1f" % y)
'''
Demo19 未来是周几
题目描述
输入表示今天是一周内哪一天的数字(星期天是0,星期一是1,...,星期六是6)
并输入今天之后到未来某天的天数,然后输出该天是星期几
输入输出描述
输入两个数据,分别表示今日星期几的数字和未来某天的天数,数据之间用空格分隔
输出未来某天是星期几
示例1
输入:
1 3
输出:
星期四
示例2
输入:
0 31
输出:
星期三'''
'''
a, b = map(int, input().split())
days_of_week = ["星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
future_day = (a + b) % 7
print(days_of_week[future_day])
'''
print("输入")
a, b= eval(input.spilt())
c = (a + b) % 7 #对两者之和取余
if c == 0: #判断
print("星期一")
elif c == 1:
print("星期二")
elif c == 2:
print("星期三")
elif c == 3:
print("星期四")
elif c == 4:
print("星期五")
elif c == 5:
print("星期六")
else:
print("星期天")
'''
Demo20 本年中的第几天
题目描述
给定某年、某月、某日的一个日期,计算该日是今年中的第几天
输入输出描述
输入三个数据分别表示年、月、日,数据之间用空格分隔
输出该日是今年中的第几天
示例1
输入:
2023 1 28
输出:
28
'''
Year, mouth, Day = map(float, input().split())
mouth = int(mouth)
# 判断是否为闰年
if Year % 4 == 0 and Year % 100 != 0 or Year % 400 == 0:
feb = 29
else:
feb = 28
mouth_num = 1 # 创建月份初始值为1
day = Day # 创建天数
mouth_31 = [1, 3, 5, 7, 8, 10, 12] # 有31天的月份
mouth_30 = [4, 6, 9, 11] # 有30天的月份
while mouth_num <= mouth: # 判断
if mouth == 1:
day += 0
elif mouth_num in mouth_31:
day += 31
elif mouth_num in mouth_30:
day += 30
elif mouth_num == 2:
day += feb
mouth_num = mouth_num + 1
print("%d" % day)
'''
Demo21 剪刀石头布 I
题目描述
计算机随机产生一个数字0、1和2分别表示剪刀、石头和布
用户输入数字0、1或2,输出用户赢、计算机赢或平局
输入输出描述
输入数字0、1或2
输出有三行,第一行输出计算机出的啥,第二行输出用户出的啥,第三行输出结果
示例1
输入:
0
输出:
计算机出的 石头
用户出的 剪刀
计算机赢
示例2
输入:
1
输出:
计算机出的 剪刀
用户出的 石头
用户赢
示例3
输入:
2
输出:
计算机出的 布
用户出的 布
平局
'''
'''
import random
computer_choice = random.randint(0, 2) #取随机数
user_choice = int(input())
gesture_map = {0: '剪刀', 1: '石头', 2: '布'} #建立数组
print(f"计算机出的 {gesture_map[computer_choice]}")
print(f"用户出的 {gesture_map[user_choice]}")
if computer_choice == user_choice:
print("平局")
elif (computer_choice - user_choice == 1) or (computer_choice - user_choice == -2):
print("计算机赢")
else:
print("用户赢")
'''
import random
computer_choice = random.randint(0, 2) #取随机数
user_choice = int(input())
if computer_choice == 0: #判断
computer_choice == "剪刀"
elif computer_choice == 1:
computer_choice == "石头"
else:
computer_choice == "布"
if user_choice== 0:
user_choice == "剪刀"
elif user_choice == 1:
user_choice == "石头"
else:
user_choice == "布"
print("计算机出的",computer_choice,sep="")
print("用户出的 ",user_choice,seq = "")
if computer_choice == user_choice:
print("平局")
elif (computer_choice - user_choice == 1) or (computer_choice - user_choice == -2):
print("计算机赢")
else:
print("用户赢")
'''Demo22 三角形的周长
题目描述
输入三角形三边的长度,如果输入合法则计算周长并输出结果;否则输出非法
如果任意两边之和大于第三边则输入都是合法的
输入输出描述
输入三个数据表示三边,数据之间用空格分隔
输出三角形的周长,如果非法则输出非法
示例1
输入:
1 1 1
输出:
3
示例2
输入:
1 3 1
输出:
非法'''
print("输入:")
a, b, c = map(int, input().split())
if a + b >= c and a + c >= b and b + c >= a: #判断
print("输出:" , a + b + c)
else:
print("非法")
'''Demo23 一周的星期几
题目描述
泽勒的一致性是一个由泽勒开发的算法,用于计算一周的星期几,公式如下:
h = (day + ((26 * (m + 1)) // 10) + k + k // 4 + j // 4 + 5 * j) % 7
(1)是指一周的星期几(0表示星期六、1表示星期天、...、6表示星期五)
(2)q 是一个月的哪一天
(3)m是月份(3表示三月、4表示四月、...、12表示十二月),其中一月和二月都是按照前一年的13
月和14月来计数的,所以还得把年份改为前一年
(4)是世纪数,即 year /100
(5)是一个世纪的某一年,即year%100
(6)为向下取整符号
输入输出描述
输入年、月、日三个数据,数据之间用空格分隔
输出该日是周几
示例1
输入:
2013 1 25
输出:
星期五
示例2
输入:
2012 5 12
输出:
星期六
'''
print("输入")
year , month , day = map(int,input().split())
m =0
if month == 1 or month == 2: #判断 一月和二月都是按照前一年的13月和14月来计数的,所以还得把年份改为前一年
m = month + 1
year -= 1
elif month != 1 and month != 2:
m = month
year = year
j = year // 100
k = year % 100
h = (day + ((26 * (m + 1)) // 10) + k + k // 4 + j // 4 + 5 * j) % 7
print("输出:")
if h == 0:
print("星期六")
elif h == 1:
print("星期天")
elif h == 2:
print("星期一")
elif h == 3:
print("星期二")
elif h == 4:
print("星期三")
elif h == 5:
print("星期四")
elif h == 6:
print("星期五")
'''Demo24 直线的交点
题目描述
直线A上的两个点是和,直线B上的两个点是(x3,y3)和(x4,y4)
如果两条直线有交点,可以通过解下面的线性等式找出:
(y1-y2)x -(x1 - x2)y = (y1 - y2)x1 - (x1 - x2)y1
(y3 - y4)x - (x3 - x4)y = (y3 - y4)x3 - (x3 -x4)y3
如果没有解,则表示两条直线平行
输入输出描述
输入八个数据,分别为x1 y1 x2 y2 x3 y3 x4 y4,数据之间用空格分隔
如有交点则输出交点的坐标x y,否则输出两条直线平行
示例1
输入:
2 2 5 -1 4 2 -1 -2
输出:
2.89 1.11
示例2
输入:
2 2 7 6 4 2 -1 -2
输出:
两条直线平行
'''# 从输入中获取数据
data = input().split()
# 将数据转换为整数
x1, y1, x2, y2, x3, y3, x4, y4 = map(int, data)
# 计算交点或判断直线平行的代码
x = ((y1 - y2) * x1 - (x1 - x2) * y1 - (y3 - y4) * x3 + (x3 - x4) * y3) / ((y1 - y2) - (x1 - x2) * (y3 - y4) / (x3 - x4))
y = ((y1 - y2) * x - (x1 - x2) * y1) / (y1 - y2)
if (y1 - y2) * x - (x1 - x2) * y == (y1 - y2) * x1 - (x1 - x2) * x3 - (y3 - y4) * y3:
print(x, y)
else:
print("两条直线平行")
'''Demo25 回文数
题目描述
输入一个三位整数,然后判断其是否为一个回文数
如果一个数从左向右和从右向左读取时是一样的,那么这个数就是回文数
输入输出描述
输入一个数字
输出Yes表示是回文数,否则输出No
示例1
输入:
121
输出:
Yes
示例2
输入:
123
输出:
No
'''
'''num = input("请输入一个三位整数:")
if num[0] == num[2]:
print(num, "是回文数")
else:
print(num, "不是回文数")
'''
num =int( input("请输入一个三位整数:"))
ge = num % 10
bai = num // 100 % 10
if ge == bai:
print(num, "是回文数")
else:
print(num, "不是回文数")
''' Demo26 两个矩形
题目描述
判断两个矩形之间的关系:包含,重叠,相离
输入输出描述
输入两行,每行四个数据,分别是矩形的中心坐标x、y和矩形的宽、高
输出两者的关系
示例1
输入:
2.5 4 2.5 43
1.5 5 0.5 3
输出:
包含
示例2
输入:
1 2 3 5.5
3 4 4.5 5
输出:
重叠
示例3
输入:
1 2 3 3
40 45 3 2
输出:
相离'''
def check_rectangle_relation(rect1, rect2):
x1, y1, w1, h1 = rect1
x2, y2, w2, h2 = rect2
distance = ((x1 - x2)**2 + (y1 - y2)**2)**0.5
if w1 >= w2 and h1 >= h2 and distance < (w1 - w2) / 2:
return "包含"
if abs(x1 - x2) < (w1 + w2) / 2 and abs(y1 - y2) < (h1 + h2) / 2:
return "重叠"
return "相离"
rect1 = list(map(float, input().split()))
rect2 = list(map(float, input().split()))
print(check_rectangle_relation(rect1, rect2))
'''第2部分 循环语句
此部分重点练习:for循环语句、while循环语句、函数、字符串
Demo27 打印数字 I
题目描述
利用循环,寻找规律,打印如下数字模式:
模式A
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
模式B
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
模式C
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
模式D
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
'''
print("模式A")
for n in range(1,7):
for i in range(1, n+1):
print(i, end = " ")
print()
print("模式B")
for n in range(1,7):
for i in range(1,8 - n):
print(i, end = " ")
print()
print("模式c")
for n in range(6, 0, -1):
for k in range(6 - n):
print(" ",end =" ")
for i in range(n, 0, -1):
print(i, end = " ")
print()
print("模式D")
for n in range(6, 0, -1):
for k in range(6 - n):
print(" ",end = " ")
for i in range(1,n + 1):
print(i,end =" ")
print()
'''
Demo28 打印数字 II
题目描述
利用循环,寻找规律,打印如下数字模式:
1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
5 4 3 2 1 2 3 4 5
6 5 4 3 2 1 2 3 4 5 6
7 6 5 4 3 2 1 2 3 4 5 6 7
'''
for n in range(1, 8):
for x in range(1 - n, n):
print(abs(x) + 1, end = " ")
print()
''' Demo29 打印数字 III
题目描述
利用循环,寻找规律,打印如下数字模式:
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 16 8 4 2 1
1 2 4 8 16 32 64 32 16 8 4 2 1
'''
Demo30 打印菱形 I
题目描述
如下所示,是一个高度为9的菱形
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
用户输入菱形高度n,并打印出该高度下的菱形
输入输出描述
输入高度n,n为奇数
输出该高度的菱形
'''
'''
n = int(input("请输入高度:"))
for i in range(1, n+1, 2):
print(" " * ((n-i)//2) + "* " * ((i+1)//2))
for i in range(n-2, 0, -2):
print(" " * ((n-i)//2) + "* " * ((i+1)//2))
for i in range (-m , m + 1)
for k in range(abs(i)):
for j om range(m + 1 - abs(i)):
print()
'''
n = eval(input()) # 获取用户输入的n值
# 循环遍历每一行的图案
for i in range(1, n + 1):
# 打印每一行开头的空格
for k in range(abs(n // 2 + 1 - i)):
print(" ", end="")
# 打印每一行的星号
for j in range(1, i + 1):
if j <= i and i + j <= n + 1:
print("*", end=" ")
# 换行
print()
'''
#控制行数
for n in range(1, 8):
#打印空格
for k in range(7 - n):
print(" ", end = " ")
#打印数字
for x in range(1 - n, n):
num = 2 ** (n - 1 - abs(x))
print("%2d" % (num), end = " ")
print()
''' Demo31 打印菱形 II
题目描述
如下所示,是一个高度为9的菱形
*
* *
* *
* *
* *
* *
* *
* *
*
用户输入菱形高度n,并打印出该高度下的菱形
输入输出描述
输入高度n,n为奇数
输出该高度的菱形
'''
n = eval(input())
for i in range(1, n + 1):
for k in range(abs(n // 2 + 1 - i )):
print(" ", end = "")
for j in range(1, i + 1):
if j <= i and i + j <= n + 1:
if j == 1 or j == i or j + i == n + 1:
print("*", end = " ")
else:
print(" ", end = " ")
print()
'''
Demo32 打印菱形 III
题目描述
如下所示,是一个高度为9的菱形
*
***
*****
*******
*********
*******
*****
***
*
用户输入菱形高度n,并打印出该高度下的菱形
'''
n = eval(input())
for i in range(1,n + 1):
for k in range(abs(n // 2 + 1 - i)):
print(" ", end ="")
for j in range(1,i + 1):
if j <= i and i + j <= n + 1:
print("*",end = " ")
print()
'''
Demo33 猜数字
题目描述
计算机随机生成一个[0,100]之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相
同
对于用户输入的数字,程序会提示它是过高还是过低
输入输出描述
每次输入一个整数
每次输出该数字是过高还是过低,如果猜中则输出猜中的数字并结束
示例
输入:50
输出:高了
输入:25
输出:低了
输入:42
输出:高了
输入:39
输出:猜中了:答案就是39
'''
import random
randNum = random.randint(0,100)
'''while Ture:
usrNum = eval(input())
if usrNum < randNum:
print("小了")
elif usrNum > randNum:
print("大了")
else:
print("猜对了")
break
'''
usrNum = eval(input())
while randNum != usrNum:
if usrNum < randNum:
print("小了")
elif usrNum >randNum:
print("大了")
userNum = eval(input())
print("猜对了")
''''
Demo34 最大公约数 I
题目描述
输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8
输入输出描述
输入两个数字
输出最大公约数
示例1
输入:
16 24
输出:
8
示例2
输入:
7 3
输出:
1
'''
num1,num2 = input().split()
min_num = min (num1, num2)
max_num = max (num1, num2)
min_num = int(min_num)
max_num = int(max_num)
for num in range(min_num, 0,-1):
if min_num % num == 0 and max_num % num == 0:
print(num)
break
'''
Demo35 判断素数
题目描述
一个大于1的整数如果只能被正整数1和它本身整除,则它就是素数,例如2、3、5和7都是素数,而4、
6、8、9则不是
输入输出描述
输入一个大于1的正整数
输出Yes表示该数字是素数,否则输出No
示例1
输入:
9
输出:
No
示例2
输入:
11
输出:
Yes
'''
flog = True
num = eval(input())
for n in range(2,num // 2 + 1):
if num % n == 0 :
flag = False
break
if flag:
print("YES")
else:
print("NO")
'''
Demo36 最小公倍数
题目描述
输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15
输入输出描述:
输入两个正整数
输出最小公倍数
示例1
输入:
3 9
输出:
9
示例2
输入:
4 6
输出:
12
'''
a, b =map(int,input().split())
min_ = min (a , b)
for c in range( min_, a * b + 1):
if c % a == 0 and c % b == 0:
print(c)
break
'''
Demo37 整数的素因子
题目描述
输入一个正整数,然后找出它所有的最小因子,也称之为素因子
输入输出描述
输入一个正整数
输出多行,每行输出一个素因子
示例1
输入:
120
输出:
2 2 2 3 5
解释:
2 * 2 * 2 *3 * 5 = 120
示例2
输入:
100
输出:
2 2 5 5
'''
num = eval (input())
while num != 1:
for n in range(2, num + 1):
if num % n == 0 :
print(n,end = " ")
num = num // n
break
'''
Demo38 完全数
题目描述
如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数
例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1
输入输出描述
输入一个正整数
输出该数是否为完全数
示例1
输入:
6
输出:
Yes
示例2
输入:
9
输出:
No
'''
a =int(input())
sum = 0
for b in range(1,a // 2 + 1):
if a % b == 0:
sum = sum + b
if sum == a:
print("YES")
else:
print("NO")
'''
Demo39 前50个素数
题目描述
打印前50个素数,每打印10个素数换行
'''
num = 2
count = 0
while count != 50:
flag = True
for n in range(2, num //2 +1 ):
if num % n == 0:
flag = False
break
#是素数怎么去处理
if flag:
print(num, end = " \t")
count += 1
if count % 10 == 10:
print( )
num += 1
'''
Demo40 计算π
题目描述
你可以使用下面的数列近似计算π
π = 4(1 - 1/3 - 1/5 - 1/7 + 1/9 - 1/11 + ... + (-1)*i+1/2i - 1)
当i越大时,计算结果越近似于π
'''
π = 0
for i in range(1, 1000):
a = ((-1) ** (i + 1)) / (2 * i - 1)
π += 4 * a
print(π)
'''
Demo41 计算e
题目描述
你可以使用下面的数列近似计算e
e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + ... + 1/i!
当i越大时,计算结果越近似于e
'''
import math
n = 10
e = 1
factorial = 1
for i in range(1, n+1):
for j in range(1, i+1):
factorial *= j
e += 1 / factorial
factorial = 1 # 重置阶乘值
print(round(e, 5)) # 输出结果并保留5位小数
'''
Demo42 剪刀石头布 II
题目描述
延伸【Demo21剪刀石头布 I】的问题,利用循环将程序改为,计算机和电脑谁先赢三次,谁就是终极胜
利者
'''
import random
a = 0 #电脑赢的次数
b = 0
while(a < 3 and b < 3):
user_choice = int(input()) #用户出什么
computer_choice = random.randint(0, 2)
if computer_choice == 0: #判断
computer_choice == "剪刀"
elif computer_choice == 1:
computer_choice == "石头"
else:
computer_choice == "布"
if user_choice== 0:
user_choice == "剪刀"
elif user_choice == 1:
user_choice == "石头"
else:
user_choice == "布"
print("计算机出的",computer_choice,sep="")
print("用户出的 ",user_choice,sep = "")
if computer_choice == user_choice:
print("平局")
elif (computer_choice - user_choice == 1) or (computer_choice - user_choice == -2):
print("计算机赢")
a += 1
else:
print("用户赢")
b += 1
if a == 3:
print("计算机是终极大赢家")
else:
print("用户是终极大赢家")
'''
Demo43 组合问题 I
题目描述
在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个
数
注:组合(a,b)与组合(b,a)算同一种组合,只记录一次
'''
count = 0
for i in range(1, 7):
for j in range(i+1, 8):
print(f"组合({i},{j})")
count += 1
print(f"总共有{count}种组合")
'''
Demo44 组合问题 II
题目描述
有1、2、3、4这个四个数字,
能组成多少个互不相同且无重复数字的三位数?分别又是多少?
'''
count = 0
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and j != k and i != k:
num = i * 100 + j * 10 + k
print(num)
count += 1
print(f"总共有{count}个互不相同且无重复数字的三位数")
'''
Demo45 水仙花数
题目描述
水仙花数,是一个三位数,且这个数的个位、十位和百位的立方和等于该数字本身,例如
编写程序,输出所有的水仙花数
'''
total = 0
for a in range(100,1000):
ge = a % 10
shi = (a // 10) % 10
bai = (a // 100) % 10
if ge ** 3 + shi ** 3 + bai ** 3 == a:
total = a
print(total)
'''
Demo46 青蛙跳台阶
题目描述
一只青蛙,一次可以跳一个台阶或者两个台阶,现有n个台阶,问该青蛙有多少种不同的跳法?
例如:两个台阶,有两种跳法(1+1,2):四个台阶,有五种跳法(1+1+1+1,2+1+1,1+2+1,
1+1+2,2+2)
'''
n = eval (input())
if n == 1 or n == 2:
print(n)
else:
a = 1
b = 2
c = 0
for i in range(3, n + 1):
c = a + b
a = b
b = c
print(c)
'''
Demo47 堆叠相加
题目描述
现有堆叠相加模式
例如:其中a为2,且有5组数字
输入输出描述
输入两个数据分别为数字a和组数n
输出按照堆叠相加模式算出的和
示例
输入:
3 4
输出:
3702
解释:
3 + 33 + 333 + 3333 = 3702
'''
# 从输入中获取两个整数a和n
a, n = map(int, input().split())
# 初始化变量sum用于存储累加和,初始化变量num用于存储当前数字
sum = 0
num = 0
# 循环n次
for i in range(n):
num = num * 10 + a # 依次构建数字a, aa, aaa, ..., 直到第n个数
sum += num # 将当前构建的数字累加到sum中
# 输出最终的累加和
print(sum)
'''
Demo48 十进制转二进制
题目描述
输入一个十进制正整数,输出其二进制形式
输入输出描述
输入一个十进制正整数
输出二进制字符串
示例
输入:
9
输出:
1001
'''
n = 1
b = 0
a = int(input())
while( a != 0):
b += (a % 2) * 10**(n-1) # 将余数乘以相应的权重加到结果b中
a = a // 2
n += 1
print(b)
'''
Demo49 二进制转十进制
题目描述
输入一个二进制字符串,输出其对应的十进制数字
输入输出描述
输入一个二进制字符串
输出十进制数字
示例
输入:
1001
输出:
9
'''
a = input()
b = 0
for char in a:
b = b * 2 + int(char)
print(b)
'''
Demo50 十进制转十六进制
题目描述
输入一个十进制正整数,输出其十六进制形式
输入输出描述
输入一个十进制正整数
输出十六进制字符串
示例
输入:
1233321
输出:
1e1b9
'''
num = eval(input())
s = ""
while num != 0 :
y = num %16
if y >= 10 :
y = chr(ord('A') + y - 10)
s= str(y) + s
num = num // 16
print (s)
'''
Demo51 十六进制转十进制
题目描述
输入一个十六进制字符串,输出其对应的十进制数字
输入输出描述
输入一个十六进制字符串
输出十进制数字
示例
输入:
1e1b9
输出:
123321
'''
# 输入一个十六进制的字符串
strings = input("请输入一个十六制字符串:")
# count记录字符串的字符个数 sum 记录和
count = 0
sum = 0
# 遍历字符串 得到该字符串的位数
for j in strings :
count += 1
# 再次遍历字符串
for i in strings :
# 将字符串的每个字符转换为对应的ASCII码值s
s = ord(i)
# 如果s小于等于57 则s代表十进制的0-9 ASCII码值(48--57)
if s <= 57 :
# 减去48即得到对应的十进制数
s = s - 48
# 如果s小于等于90 则s代表大写字母A-Z (65--95)
elif s <= 90 :
# 减去55即得到对应的十进制数
s = s - 55
# 对于小写字母a-z (97--122)
else :
# 减去87即得到对应的十进制数
s = s - 87
# 每一位的十六进制数所代表的十进制值为num
num = s * 16 ** (count-1)
# 每位十六进制的十进制值累加
sum += num
# 循环一次 对应字符乘16的count次方减一
count -= 1
# 输出最终的十进制值
print(sum)
'''
Demo52 最长公共前缀
题目描述
给定两个字符串 s1 和 s2 ,求两个字符串最长的公共前缀串,字符区分大小写
输入输出描述
输入两行,分别表示s1和s2
输出前缀串
示例
输入:
abcdefg
abcdhko
输出:
abcd
'''
s = ""
print("输入字符串s1与s2")
n1 = input()
n2 = input()
arr1 = list(n1)
arr2 = list(n2)
l1 = len(n1)
l2 = len(n2)
min_ = min(l1, l2)
for n in range(min_):
if arr1[n] == arr2[n]:
s = s + arr1[n]
print(s)
'''
Demo53 子串出现的次数
题目描述
给定两个字符串 s1 和 s2 ,求 s2 在 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹
配
输入输出描述
输入两行字符串,分别为s1和s2,s2的长度小于等于s1
输出s2在s1中出现的次数
示例1
输入:
ABCsdABsadABCasdhjabcsaABCasd
ABC
输出:
3
示例2
输入:
AAAAAAAA
AAA
输出:
2
'''
print("输s1,s2(s1,s2的长度小于等于s1)")
s1 = input()
s2 = input()
n = 0
list1 = list(s1)
list2 = list(s2)
l1 = len(s1)
l2 = len(s2)
for i in range(l2):
if list1[i] == list2 [i]:
n += 1
print(n)
'''
Demo54 最长公共子串
题目描述
给定两个字符串 s1 和 s2 ,求 s1 与 s2 之间的最长公共子串,字符区分大小写
输入输出描述
输入两行字符串,分别为s1和s2
输出最长公共子串
示例
输入:
123ABCDEFG83hsad
iughABCDEFG23uy
输出:
ABCDEFG
'''
print("输入s1,s2(s1,s2的长度小于等于1000)")
s = ""
# 输入字符串s1
n1 = input()
# 输入字符串s2
n2 = input()
# 将s1拆分为字符数组
arr1 = list(n1)
# 将s2拆分为字符数组
arr2 = list(n2)
# 获取s1的长度
l1 = len(n1)
# 获取s2的长度
l2 = len(n2)
# 初始化最长公共子串的长度为0
max_len = 0
# 初始化最长公共子串的起始索引为-1
start_index = -1
# 创建一个二维数组用于存储公共子串的长度,代码将通过列表推导式创建一个二维数组,其中有l1 + 1行和l2 + 1列,每个元素初始化为0
dp = [[0] * (l2 + 1) for _ in range(l1 + 1)]
# 遍历s1和s2的字符
for i in range(1, l1 + 1):
for j in range(1, l2 + 1):
if arr1[i - 1] == arr2[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
if dp[i][j] > max_len:
max_len = dp[i][j]
start_index = i - max_len
# 根据最长公共子串的起始索引和长度提取最长公共子串
result = n1[start_index:start_index + max_len]
print(result)
'''
Demo55 检测密码
题目描述
一些网站会给密码强加一些规则:
(1)密码必须至少有8个字符
(2)密码只能包含英文字母和数字
(3)密码应该至少包含两个数字
(4)密码应该至少包含两个大写字母
如果密码符合规则,输出Yes:否则输出No
输入输出描述
输入一串密码
输出该密码是否符合规则
示例1
输入:
123456ab
输出:
No
示例2
输入:
123abcABC
输出:
Yes
'''
print("输入:")
password = input()
arr = list(password)
a = 0
b = 0
s1 = 0
s2 = 0
if len(arr) >= 8:
a = 1
for i in arr:
x = ord(i)
if (x >= 48 and x <= 57) or (x >= 65 and x <= 90) or (x >= 97 and x <= 122):
b += 1
if x >= 48 and x <= 57:
s1 += 1
if x >= 65 and x <= 95:
s1 += 1
if a == 1 and b >= 8 and s1 >= 2 and s2 >=2 :
print("Yes")
else:
print("No")
'''
Demo56 回文素数
题目描述
回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数
输出显示前100个回文素数,每行显示10个
'''
num = 100
count = 0
while count != 100:
flag = True
ge = num % 10
bai = num // 100 % 10
for n in range(2, num // 2 + 1):
if num % n == 0:
flag = False
break
if flag and str(num) == str(num)[::-1]:
print(num, end=" \t")
count += 1
if count % 10 == 0:
print()
num += 1
'''
Demo57 反素数
题目描述
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转
后依旧是素数
输出显示前100个反素,每行显示10个
'''
def is_prime(num):
# 判断一个数是否为素数
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
def reverse_num(num):
# 返回一个数的逆向拼写
return int(str(num)[::-1])
reverse_primes = [] # 存储反素数的列表
num = 2
while len(reverse_primes) < 100:
# 循环直到找到100个反素数
if is_prime(num) and is_prime(reverse_num(num)) and num != reverse_num(num):
# 判断是否为素数,逆向拼写是否为素数,且不是回文数
reverse_primes.append(num) # 将符合条件的数添加到列表中
num += 1
# 按照每行显示10个的格式输出反素数
for i in range(0, 100, 10):
print(*reverse_primes[i:i+10], sep="\t")
'''
Demo58 双素数
题目描述
双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数
输出显示小于1000的双素数
'''
def is_prime(num):
# 判断一个数是否为素数
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
list = [] # 存储双素数的列表
for num in range(3, 1000): # 遍历小于1000的数
if is_prime(num) and is_prime(num + 2): # 判断当前数和当前数加2是否都为素数
list.append((num, num + 2)) # 将符合条件的双素数对添加到列表中
# 输出小于1000的双素数
for pair in list:
print(pair[0], pair[1])
'''
Demo59 梅森素数
如果一个素数可以写成2 ** p - 1,,其中p是某个正整数,那么这个素数就称作梅森素数
输出p≤31的所有梅森素数
'''
def is_prime(num):
# 判断一个数是否为素数
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
mersenne_primes = [] # 存储梅森素数的列表
for p in range(1, 32): # 遍历p从1到31
mersenne_num = 2**p - 1 # 计算梅森数
if is_prime(mersenne_num): # 判断梅森数是否为素数
mersenne_primes.append((p, mersenne_num)) # 将符合条件的梅森素数添加到列表中
# 输出p≤31的所有梅森素数
for pair in mersenne_primes:
print(f"p={pair[0]}, Mersenne Prime={pair[1]}")
'''
Demo60 平方根的近似求法
有几种实现开平方的技术,其中一个称为巴比伦法
它通过使用下面公式的反复计算近似地得到:
nextGuess = ( lastGuess + n /lastGuess ) / 2
当nextGuess和lastGuess几乎相同时,nextGuess就是平方根的近似值
lastGuess初始值为1,如果nextGuess和lastGuess的差值小于一个很小的数,比如0.0001,就可以认为
nextGuess是n的平方根的近似值:否则,nextGuess成为下一次计算的lastGuess,近似过程继续执行
编写代码求解n的平方根的近似值
'''
def babylonian_sqrt(n):
last_guess = 1 # 初始值为1
next_guess = (last_guess + n / last_guess) / 2 # 第一次计算得到的近似值
while abs(next_guess - last_guess) >= 0.0001: # 当近似值的差值大于等于0.0001时继续迭代
last_guess = next_guess
next_guess = (last_guess + n / last_guess) / 2
return next_guess
n = 25 # 要求解平方根的数
approx_sqrt = babylonian_sqrt(n)
print(f"The approximate square root of {n} is: {approx_sqrt}")