第一部分 语法基础
例1】摄氏温度转化为华氏温度
输入一个摄氏温度的值,将它转变为华氏温度,并将结果输出
转换的公式为如下:fahrenheit=(9/5)*celsius+32
celsius = float(input("请输入摄氏温度:"))
print("华氏温度为:%s" % str((9 / 5) * celsius + 32))
例2】计算圆柱体的体积
输入圆柱的半径和高,并利用如下公式计算圆柱体的底面积和体积。
area=radius*radius*π
volume=area*length
r = float(input("半径:"))
h = float(input("高:"))
print("圆柱体底面积为:%s" % (str(r * r * math.pi)))
print("圆柱体体积:%s" % (str(r * r * math.pi * h)))
例3】将英尺数转换为米数
输入英尺数然后将它转换为米数,并输出结果,一英尺等于0.305米
feet = float(input("请输入一个英尺数:"))
print("转化后米数为:%s" % (feet * 0.305))
例4】计算小费
读取小计和酬金率,然后计算小费以及合计金额。例如客户的小计为10元,酬金率为15%,那么小费是1.5元,合计金额为11.5元
a, b = eval(input("输入:"))
m = b * 0.01
print("小费为:%.2f" % (a * m))
print("合计为:%.2f" % (a + a * m))
例5】对一个整数中的各位数字求和
读取一个0到1000之间的整数,并计算它各位数字之和
num = int(input("请输入0~1000之间的整数:"))
if num > 0 and num < 1000:
num1 = num // 100
num2 = num // 10 % 10
num3 = num % 10
total = num1 + num2 + num3
print(total)
else:
print("error")
例6】计算年数和天数
输入分钟数,然后将该分钟数转换为年数和天数,假定一年有365天
min = int(input("请输入分钟数:"))
# days = min // 1440 # 1440=24*60表示一天多少分钟
years = min // 525600
print(years)
days = (min - years * 525600) // 1440
print(days)
例7】计算能量
水从初始温度加热到最终温度是需要能量的,请计算需要多少能量,公式如下:
Q = M * (finalTemperature - initialTemperature) * 4184
这里的M是按千克计的水量,初始温度和最终温度均为摄氏度,热量Q以焦耳计
import decimal
M = float(input("请输入水量"))
initial = float(input("请输入初始温度:"))
final = float(input("请输入最终温度:"))
Q = M * (final - initial) * 4184
print(decimal.Decimal(Q).quantize(decimal.Decimal('0.0'))) # 控制小数位数
例8】分割数字
输入一个四位整数,并以反向顺序显示
a = input()
for i in a[::-1]:
print(i)
例9】计算三角形的面积
输入三角形的三个顶点坐标,并计算其面积,计算公式如下
s=(side1+side2+side3)/2 \\ area = \sqrt{s(s-side1)(s-side2)(s-side3)}
import math
x1 = float(input("请输入x1:"))
y1 = float(input("请输入y1:"))
x2 =float(input("请输入x2:"))
y2 =float(input("请输入y2:"))
x3 = float(input("请输入x3:"))
y3 = float(input("请输入y3:"))
side1 = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
side2 = math.sqrt((x1 - x3) ** 2 + (y1 - y3) ** 2)
side3 = math.sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2)
s = (side1 + side2 + side3) / 2
area = math.sqrt(s * (s - side1) * (s - side2) * (s - side3))
print("三角形面积:%s"%area)
例10】显示当前时间
输入你所在的时区,并输出当前的时间
例11】计算三角形的三个角
输入三角形的三个顶点坐标,并计算该三角形的三个角分别是多少(角度制)
A=acos((a*a-b*b-c*c)/(-2*b*c))
B=acos((b*b-a*a-c*c)/(-2*a*c))
C=acos((c*c-b*b-a*a)/(-2*a*b))
其中a、b、c分别表示三条边,A、B、C分别表示三边对应的角
例12】最小数量的硬币
假设硬币种类分为:一元硬币、两角五分硬币、一角硬币、五分硬币、一分硬币
输入总金额,并将总金额兑换成若干个硬币,并保证所兑换的硬币个数最少
def exchange_coins(total_amount):
coin_types = [100, 25, 10, 5, 1] # 硬币的面额
coin_names = ['一元硬币', '两角五分硬币', '一角硬币', '五分硬币', '一分硬币']
result = {} # 用于存储兑换结果 字典
for i in range(len(coin_types)):
num_coins = total_amount // coin_types[i] # 计算当前面额的硬币个数
# 1156//100=11
total_amount -= num_coins * coin_types[i] # 更新剩余金额
# 1156-=11*100=56
result[coin_names[i]] = num_coins # 存储结果
# result['一元硬币']=11
return result
total_amount1 = int(input("请输入总金额:"))
exchange_result = exchange_coins(total_amount1)
print("兑换结果:", exchange_result)
例13】正多边形的面积
正多边形是边长相等的多边形,而且所有的角相等,计算正多边形的公式为:
area = \frac{n*s^2}{4*tan(\frac{π}{n})}
import math
def area_shape(n, s):
area = (n * s * s) / (4 * (math.tan((math.pi) / n)))
return area
n, s = eval(input("请输入边的个数和边的长度:"))
print("边长为s的正边形的面积为%.2f" % (area_shape(n, s)))
例14】计算身体质量指数
BMI是根据体重测量健康的方式,通过以千克为单位的体重除以以米为单位的身高的平方计算而出
BMI指数解读如下:
BMI | 解释 |
---|---|
BMI < 18.5 | 超轻 |
18.5 ≤ BMI < 25.0 | 标准 |
25.0 ≤ BMI < 30.0 | 超重 |
30.0 ≤ BMI | 肥胖 |
height = float(input("请输入身高:"))
weight = float(input("请输入体重:"))
BMI = weight / height ** 2
print(BMI)
if BMI < 18.5:
print("过轻")
elif BMI < 24:
print("正常")
elif BMI < 27:
print("过重")
elif BMI < 30:
print("轻度肥胖")
elif BMI < 35:
print("中度肥胖")
else:
print("重度肥胖")
例15】判定闰年
一个年份如果能被4整除但不能被100整除,或者能被400整除,那么这个年份就是闰年
def leap_year(n):
if n % 4 == 0 and n % 100 != 0 or n // 400 == 0:
print("Yes")
else:
print("No")
n = int(input("请输入年份:"))
leap_year(n)
例16】中彩票
随机产生一个两位数数字,然后用户输入一个两位数数字,并根据以下规则判定用户赢得的奖金是多少
(1)输入的数字和随机产生的数字完全相同(包括顺序),奖金为10000元
(2)输入的数字和随机产生的数字相同(不包括顺序),奖金为3000元
(3)输入的数字和随机产生的数字有一位数相同,奖金为1000美元
(4)输入的数字和随机产生的数字都不相同,没有奖金,0元
import random
def random_guess(num):
num1 = num // 10
num2 = num - num1
number = random.randint(10, 100)
print(number)
number1 = number // 10
number2 = number - number1
if 10 < num < 100:
if num == number:
print("奖金为10000元")
elif num1 == number2 and num2 == number1:
print("奖金为3000元")
elif num1 == number2 or num2 == number1 or num1 == number1 or num2 == number2:
print("奖金为1000元")
else:
print("未中奖")
else:
print("输入错误")
num = int(input("请输入数字:"))
random_guess(num)
例17】解一元二次方程
一元二次方程$ax^2+bx+c=0 (a != 0)$的解可以使用下面的公式计算
r_1=\frac{-b+\sqrt{b^2-4ac}}{2a},r_2=\frac{-b-\sqrt{b^2-4ac}}{2a}
其中$b^2-4ac$称为判别式,如果它为正,则方程有两个实数解;为零,方程只有一个实数解;为负,没有实数解
import math
def solution_equation(a, b, c): # 解方程
discriminant = b * b - 4 * a * c
if discriminant > 0:
r1 = (-b + math.sqrt(discriminant)) / 2 * a
r2 = (-b - math.sqrt(discriminant)) / 2 * a
print("%.2f" % r1)
print("%.2f" % r2)
elif discriminant < 0:
print("无实数解")
else:
r1 = (-b + math.sqrt(discriminant)) / 2 * a
r2 = (-b - math.sqrt(discriminant)) / 2 * a
print("%.2f" % r1)
print("%.2f" % r2)
a, b, c = eval(input("请输入三个数据:"))
solution_equation(a, b, c)
例18】解2*2线程方程
如有一个2×2的线程方程组:
ax+by=e
cx+dy=f
你可以使用克莱姆法则解该线性方程:
x=\frac{ed-bf}{ad-bc},y=\frac{af-ec}{ad-bc}
其中$ad-bc$为判别式,如果为零则输出无解
a, b, c, d, e, f = eval(input("请输入数据:"))
discriminant = a * d - b * c
if discriminant == 0:
print("无解")
else:
x = (e * d - b * f) / discriminant
y = (a * f - e * c) / discriminant
print("%.1f" % x)
print("%.1f" % y)
例19】未来是周几
输入表示今天是一周内哪一天的数字(星期天是0,星期一是1,...,星期六是6)
并输入今天之后到未来某天的天数,然后输出该天是星期几
a, n = eval(input("请输入今日是星期几和未来几天:"))
week_num = [0, 1, 2, 3, 4, 5, 6]
week_word = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
for i in range(0, 7):
if a == week_num[i]:
# print(week_word[i])
print(week_word[i + n])
例20】本年中的第几天
给定某年、某月、某日的一个日期,计算该日是今年中的第几天
a, b, c = eval(input("请输入年,月,日:"))
b_days = 0
total_days = 0
month_num = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
month = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
for i in range(0, 12):
if b == i + 1:
print(month[i])
for j in range(0, i):
b_days += month_num[j]
total_days = b_days + c
print(total_days)
例21】剪刀石头布
计算机随机产生一个数字0、1和2分别表示剪刀、石头和布
用户输入数字0、1或2,输出用户赢、计算机赢或平局
import random
player_num = int(input("请输入数字(0,1,2):"))
game_word = ["剪刀", '石头', '布']
computer_num = random.randint(0, 3)
print(f"玩家输出:{game_word[player_num]}")
print(f"电脑输出:{game_word[computer_num]}")
if player_num == computer_num:
print("平局")
elif player_num == computer_num - 2 or player_num == computer_num + 1:
print("玩家胜出")
else:
print("电脑胜出")
例22】三角形的周长
输入三角形三边的长度,如果输入合法则计算周长并输出结果;否则输出非法
如果任意两边之和大于第三边则输入都是合法的
a, b, c = eval(input("请输入三角形的三边:"))
if a + b > c and a + c > b and c + b > a:
C = a + b + c
print(f"三角形的周长为:{C}")
else:
print("非法")
例23】一周的星期几
泽勒的一致性是一个由泽勒开发的算法,用于计算一周的星期几,公式如下:
h=(q+\lfloor\frac{26(m+1)}{10}\rfloor+k+\lfloor\frac{k}{4}\rfloor+\lfloor\frac{j}{4}\rfloor+5j) \% 7
(1)$h$是指一周的星期几(0表示星期六、1表示星期天、...、6表示星期五)
(2)$q$是一个月的哪一天
(3)$m$是月份(3表示三月、4表示四月、...、12表示十二月),其中一月和二月都是按照前一年的13月和14月来计数的,所以还得把年份改为前一年
(4)$j$是世纪数,即$\lfloor\frac{year}{100}\rfloor$
(5)$k$是一个世纪的某一年,即$year \% 100$
(6)$\lfloor\rfloor$为向下取整符号
例24】直线的交点
直线A上的两个点是$(x1,y1)$和$(x2,y2)$,直线B上的两个点是$(x3,y3)$和$(x4,y4)$
如果两条直线有交点,可以通过解下面的线性等式找出:
(y_1-y_2)x-(x_1-x_2)y=(y_1-y_2)x_1-(x_1-x_2)y_1
(y_3-y_4)x-(x_3-x_4)y=(y_3-y_4)x_3-(x_3-x_4)y_3
如果没有解,则表示两条直线平行
try:
x1, y1, x2, y2, x3, y3, x4, y4 = eval(input("请输入数据:"))
x = ((x3 - x4) * ((y1 - y2) * x1 - (x1 - x2) * y1) - (x1 - x2) * ((y3 - y4) * x3 - (x3 - x4) * y3)) / (
(y1 - y2) * (x3 - x4) - (y3 - y4) * (x1 - x2))
y = ((y3 - y4) * ((y1 - y2) * x1 - (x1 - x2) * y1) - (y1 - y2) * ((y3 - y4) * x3 - (x3 - x4) * y3)) / (
(y1 - y2) * (x3 - x4) - (y3 - y4) * (x1 - x2))
except ZeroDivisionError:
print("两直线平行")
else:
print("直线的交点为(%.2f,%.2f)" % (x, y))
例25】回文数
输入一个三位整数,然后判断其是否为一个回文数
如果一个数从左向右和从右向左读取时是一样的,那么这个数就是回文数
a = input("请输入一个字符串:")
b = a[::-1]
if b == a:
print("是")
else:
print("否")
例26】两个矩形
判断两个矩形之间的关系:包含,重叠,相离
x1, y1, a1, b1 = eval(input("请输入第一个矩形的中心坐标和宽高:"))
x2, y2, a2, b2 = eval(input("请输入第二个矩形的中心坐标和宽高:"))
if (x1 < x2 + a2 and x1 + a1 > x2 and y1 < y2 + b2 and y1 + b1 > y2):
print("重叠")
else:
if ((x1 + a1 <= x2 or x2 + a2 <= x1) or (y1 + b1 <= y2 or y2 + b2 <= y1)):
print("相离")
else:
print("包含")
第二部分
例27~30】打印数字
'''
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
'''
def pattern_A(n):
for i in range(1, n + 1):
for j in range(1, i + 1):
print(j, end=" ")
print()
n = int(input("请输入打印行数:"))
pattern_A(n)
'''
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
'''
n = int(input("请输入打印行数:"))
for i in range(n, 0, -1):
for j in range(i):
print(j + 1, end=" ")
print()
'''
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
'''
n = int(input("请输入打印行数:"))
for i in range(1, n + 1):
for j in range(n - i):
print(" ", end=" ")
for j in range(i, 0, -1):
print(j, end=" ")
print()
'''
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
'''
n = int(input("请输入打印行数:"))
for i in range(n, 0, -1):
for j in range(n - i):
print(" ", end=" ")
for j in range(i):
print(j + 1, end=" ")
print()
'''
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
'''
n = int(input("请输入打印行数:"))
for i in range(1, n + 1):
for j in range(n - i):
print(" ", end=" ")
for j in range(i, 0, -1):
print(j, end=" ")
for j in range(2, i + 1):
print(j, end=" ")
print()
'''
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
'''
n = int(input("请输入打印行数:"))
for i in range(1, n + 1):
for j in range(n - i):
print(" ", end=" ")
for j in range(i):
print(2 ** j, end=" ")
for j in range(i - 2, -1, -1):
print(2 ** j, end=" ")
print()
例30~32】打印菱形
'''
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
'''
n = int(input("请输入打印行数(n为奇数):"))
for i in range(1, n // 2 + 2):
for j in range(n // 2 + 1 - i):
print(" ", end="")
for j in range(i):
print("* ", end="")
print()
for i in range(n // 2 + 2, 0, -1):
for j in range(n // 2 + 3 - i):
print(" ", end="")
for j in range(i - 2):
print("* ", end="")
print()
'''
*
***
*****
*******
*********
*******
*****
***
*
'''
n = int(input("请输入打印行数(n为奇数):"))
for i in range(1, n // 2 + 2):
for j in range(n // 2 + 1 - i):
print(" ", end="")
for j in range(2 * i - 1):
print("*", end="")
print()
for i in range(n // 2 + 2, 0, -1):
for j in range(n // 2 + 3 - i):
print(" ", end="")
for j in range(2 * i - 1 - 4):
print("*", end="")
print()
例33】猜数字
import random
computer_num = random.randint(1, 101)
num = int(input("请用户输入数字:"))
while computer_num != num:
if num > computer_num:
print("高了")
else:
print("低了")
num = int(input("请用户重新输入数字:"))
print(f"猜中了!答案就是{num}")
例34】最大公约数
def gcd(a, b):
while b:
a, b = b, a % b
return a
# 输入两个正整数
num1 = int(input("请输入第一个正整数:"))
num2 = int(input("请输入第二个正整数:"))
# 计算最大公约数
result = gcd(num1, num2)
print("最大公约数是:", result)
例35】判断素数
num = int(input("请输入一个正整数:"))
flag = True
for i in range(2, num):
if num % i == 0:
flag = False
break
if flag:
print("Yes")
else:
print("No")
例36】最小公倍数
def gcd(a, b):
while b:
a, b = b, a % b
return a
def lcm(a, b):
return abs(a * b) // gcd(a, b)
num1, num2 = eval(input("请输入两个数字:"))
result = lcm(num1, num2)
print(f"The least common multiple of {num1} and {num2} is {result}")
例37】整数的素因子
def prime_factor(num):
arr = []
i = 2
while num > 2:
if num % i == 0:
arr.append(i)
num = num / i
else:
i += 1
return arr
num = int(input("输入:"))
print(prime_factor(num))
例38】完全数
def prime_factor(num):
Sum = 0
for i in range(1, num):
if num % i == 0:
Sum += i
if Sum == num:
return "yes"
else:
return "no"
num = int(input("请输入一个数:"))
print(prime_factor(num))
例39】前50个素数
for i in range(1,50):
flag = True
for j in range(2, i):
if i % j == 0:
flag = False
break
if flag:
print(f"{i}是质数")
例40】计算pi
j = 1
sum = 0
for i in range(10000):
if (i + 1) % 2 == 0:
j = -(2 * (i + 1) - 1)
else:
j = (2 * (i + 1) - 1)
n = 4 / j
sum = sum + n
print(sum)
例41】计算e
import math
def calc_e(n):
e = 1
for i in range(1, n+1):
e += 1 / math.factorial(i)
return e
print(calc_e(1000))
例42】三局获胜剪刀石头布游戏
import random
gesture = ["石头", "剪刀", "布"]
winu = 0
winc = 0
while winu < 3 and winc < 3:
print("0:石头 1:剪刀 2:布")
user = int(input("请输入你想选择的序号:"))
computer = random.randint(0, 2)
print(f"玩家:{gesture[user]},计算机:{gesture[computer]}")
if user == computer:
print("平局")
elif user == computer + 2 or user == computer - 1:
print("玩家胜出")
winu += 1
else:
print("电脑胜出")
winc += 1
print("-" * 20)
if winu == 3:
print("玩家获胜")
else:
print("电脑获胜")
例43~44】组合问题
total = 0
for i in range(1, 8):
for j in range(i + 1, 8):
total += 1
print(i, j)
print(total)
total = 0
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and i != k and j != k:
total += 1
print(f"{i}{j}{k}")
print(total)
例45】水仙花数
for i in range(1, 10):
for j in range(10):
for k in range(10):
if i ** 3 + j ** 3 + k ** 3 == i * 100 + j * 10 + k:
print(f"{i}{j}{k}")
例46】青蛙跳台阶
def jump(n):
if n == 1:
return 1
elif n == 2:
return 2
else:
return jump(n - 1) + jump(n - 2)
n = int(input("请输入台阶数:"))
print(jump(n))
例47】堆叠相加
def sum_num(a, n):
total = 0
number = 0
for i in range(1, n + 1):
number = number * 10 + a
total += number
return total
a = int(input("请输入数字:"))
n = int(input("请输入有几组:"))
print(sum_num(a, n))
例48~51】进制转换
# 十进制转二进制
num_D = int(input("请输入一个十进制数:"))
num_B = bin(num_D)
print(num_B)
# 二进制转十进制
num_B = input("请输入一个二进制数:")
num_D = int(num_B, base=2)
print(num_D)
# 十进制转十六进制
num_D = int(input("请输入一个十进制数:"))
num_H = hex(num_D)
print(num_H)
# 十六进制转十进制
num_H = input("请输入一个十六进制数:")
num_D = int(num_H, base=16)
print(num_D)
例52】最长公共前缀
s1 = input("请输入字符串1:")
s2 = input("请输入字符串2:")
for i in range(len(s1)):
if s1[i] == s2[i]:
print(s1[i], end="")
else:
break
例53】字串出现的次数
s1 = input("请输入字符串1:")
s2 = input("请输入字符串2:")
count = 0 # 次数
i = 0 # 长度
while i < len(s1):
if s1[i:i + len(s2)] == s2: # [i,i+len(s2))
count += 1
i += len(s2)
else:
i += 1
print(count)
例54】最长公共子串
def find_lcs(str1, str2):
lcs = set()
if len(str1) > len(str2):
str1, str2 = str2, str1
for i in range(len(str1), 0, -1):
flag = False
for j in range(len(str1) - i + 1):
s = str1[j:i + j]
if str2.find(s) > -1:
lcs.add(s)
flag = True
else:
flag = False
if flag:
break
print("最长公共子串为:", lcs)
str1 = str(input("请输入str1:"))
str2 = str(input("请输入str2:"))
find_lcs(str1, str2)
例55】检查密码
s1 = str(input("输入"))
def string_pass(s1):
get_num = 0
get_capital = 0
if len(s1) < 8:
return "no"
for i in s1:
if ord(i) < 48 or 57 < ord(i) < 65 or 90 < ord(i) < 96 or ord(i) > 122:
return "no"
if 47 < ord(i) < 58:
get_num += 1
if 64 < ord(i) < 91:
get_capital += 1
if get_num < 2:
return "no"
if get_capital < 2:
return "no"
return "yes"
print(string_pass(s1))
例56】回文素数
def is_prime(p): # 判断是否为素数
for i in range(2, p):
if p % i == 0:
return False
return True
def back_prime(p):
i = int(str(p)[::-1])
if i == p and is_prime(i) and is_prime(p):
print(p, end=" ")
for i in range(10, 1000):
back_prime(i)
例57】反素数
def is_prime(p): # 判断是否为素数
for i in range(2, p):
if p % i == 0:
return False
return True
def back_prime(p):
i = int(str(p)[::-1])
if is_prime(p) and is_prime(i):
print(p)
for i in range(10, 1000):
back_prime(i)
例58】双素数
def is_prime(p): # 判断是否为素数
for i in range(2, p):
if p % i == 0:
return False
return True
def double_prime(start, end):
for i in range(start, end):
if is_prime(i) and is_prime(i + 2):
print(f"({i}, {i + 2}) 是一个双素数")
start = int(input("请输入范围的起始值:"))
end = int(input("请输入范围的结束值:"))
double_prime(start, end)
例59】梅森素数
def is_prime(p): # 判断是否为素数
for i in range(2, p):
if p % i == 0:
return False
return True
def meisen_prime(p): # 判断p素数是否可以写成2的(p-1)次方
if is_prime(p):
meisen_number = 2 ** p - 1
if is_prime(meisen_number):
return meisen_number
return None
for p in range(2, 32):
result = meisen_prime(p)
if result:
print(p, end=" ")
例60】平方根的近似求法
def square_root(n):
lastGuess = n / 3 # 赋予一个最初猜测的值
for i in range(10): # 循坏10次或无数次,寻找出最近似nextGuess的值
nextGuess = (1 / 2) * (lastGuess + (n / lastGuess))
lastGuess = nextGuess
return nextGuess
n = int(input("请输入一个需要求平方根的值:"))
print(square_root(n))