python题集

Demo01 摄氏温度转化为华氏温度

题目描述

输入一个摄氏温度的值,将它转变为华氏温度,并将结果输出

转换的公式为如下:

输入输出描述

输入一个值表示摄氏温度celsius

输出华氏温度fahrenheit ,结果保留一位小数点

示例

输入:

43

输出:

109.4

celsius = float(input())
fahrenheit = 9 / 5 * celsius + 32
print(fahrenheit)

Demo02 计算圆柱体的体积

题目描述

输入圆柱的半径和高,并利用如下公式计算圆柱体的底面积和体积。

输入输出描述

分别输入圆柱的半径radius和高度length,两个数据之间用空格分隔

输出两行,第一行为圆柱底面积area,第二行为圆柱体积volume,结果保留两位小数点

示例

输入:

5.5 12

输出:

95.03

1140.41

import math
 
input_str = input()
input_list = input_str.split()
 
radius = float(input_list[0])
length = float(input_list[1])
 
area = "%.2f" % (math.pi * radius * radius)
volume = "%.2f" % (float(area) * length)
 
print(area)
print(volume)

Demo03 将英尺数转换为米数

题目描述

输入英尺数然后将它转换为米数,并输出结果,一英尺等于0.305米

输入输出描述

输入一个数据表示英尺数

输出转换后的米数,结果保留四位小数点

示例

输入:

16.5

输出:

5.0325

import math
yingchi = float(input())
length = "%.4f" % (yingchi * 0.3050)
print(length)

Demo04 计算小费

题目描述

读取小计和酬金率,然后计算小费以及合计金额。例如客户的小计为10元,酬金率为15%,那么小费是1.5元,合计金额为11.5元

输入输出描述

分别输入小计和酬金率,两个数据用之间用空格分隔

输出两行,第一行为小费,第二行为合计金额,结果保留两位小数

示例

输入:

15.69 15

输出:

2.35

18.04

import math
input_list = input()
input_str = input_list.split()
xiaoji = float(input_str[0])
choujinlv = float(input_str[1])
xiaofei = float("%.2f" % (xiaoji * choujinlv * 0.01))
sum = "%.2f" % (xiaoji + xiaofei)
print(xiaofei)
print(sum)

Demo05 对一个整数中的各位数字求和

题目描述

读取一个0到1000之间的整数,并计算它各位数字之和

输入输出描述

输入一个[0,1000]之间的整数

输出该数字的各位数字之和

示例1

输入:

999

输出:

27

解释:

999各位数之和为9 + 9 + 9 = 27

示例2

输入:

12

输出:

3

a = input()
b = len(a)
a = int(a)
total = 0
while b > 0:
    c = a % 10
    total = int(total + c)
    a = a / 10
    b = b-1
print(total)

Demo06 计算年数和天数

题目描述

输入分钟数,然后将该分钟数转换为年数和天数,假定一年有365天

输入输出描述

输入一个分钟数

输出两行,第一行为年数,第二行为天数

示例

输入:

1000000000

输出:

1902

214

minutes = int(input())
minutes_per_day = 24 * 60
minutes_per_year = 365 * minutes_per_day
years = minutes // minutes_per_year
remaining_minutes = minutes % minutes_per_year
days = remaining_minutes // minutes_per_day
print(years)
print(days)

Demo07 计算能量

题目描述

水从初始温度加热到最终温度是需要能量的,请计算需要多少能量,公式如下:

这里的M是按千克计的水量,初始温度和最终温度均为摄氏度,热量Q以焦耳计

输入输出描述

输入三行数据,第一行输入水量,第二行输入初始温度,第三行输入最终温度

输出所需的能量值,结果保留一位小数

示例

输入:

55.5

3.5

10.5

输出:

1625484.0

m = float(input())
initialTemperature = float(input())
finalTemperature = float(input())
q = m * (finalTemperature - initialTemperature) * 4184
print(q)

Demo08 分割数字

题目描述

输入一个四位整数,并以反向顺序显示

输入输出描述

输入一个四位整数

输出四行,第一行为个位,第二行为十位,第三行为百位,第四行为千位

示例

输入:

5213

输出:

3

1

2

5

a = int(input())
b = 4
while b > 0:
    print(a % 10)
    a = int(a / 10)
    b = b - 1

Demo09 计算三角形的面积

题目描述

输入三角形的三个顶点坐标,并计算其面积,计算公式如下

输入输出描述

输入六个数据,分别表示三角形三个顶点的坐标x1、y1、x2、y2、x3和y3,数据之间用空格分隔

输出三角形的面积,结果保留一位小数

示例

输入:

1.5 -3.4 4.6 5 9.5 -3.4

输出:

33.6

import math
input_list = input()
input_str = input_list.split()
x1 = float(input_str[0])
y1 = float(input_str[1])
x2 = float(input_str[2])
y2 = float(input_str[3])
x3 = float(input_str[4])
y3 = float(input_str[5])
side1 = pow(pow(x2-x1, 2) + pow(y2-y1, 2), 0.5)
side2 = pow(pow(x3-x1, 2) + pow(y3-y1, 2), 0.5)
side3 = pow(pow(x3-x2, 2) + pow(y3-y2, 2), 0.5)
s = (side1 +side2 +side3) / 2
area = "%.1f" % (pow(s * (s-side1) * (s-side2)* (s-side3),0.5))
print(area)

Demo10 显示当前时间

题目描述

输入你所在的时区,并输出当前的时间

输入输出描述

输入时区,如东八区为8,西五区为-5

输出二十四小时制的时间,格式为 时:分:秒

示例

输入:

8

输出:

21:43:12

from datetime import datetime, timedelta
timezone = int(input())
current_time = datetime.utcnow() + timedelta(hours=timezone)
formatted_time = current_time.strftime("%H:%M:%S")
print(formatted_time)

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
input_list = input()
input_str = input_list.split()
x1 = float(input_str[0])
y1 = float(input_str[1])
x2 = float(input_str[2])
y2 = float(input_str[3])
x3 = float(input_str[4])
y3 = float(input_str[5])
a = pow(pow(x2-x1, 2) + pow(y2-y1, 2), 0.5)
b = pow(pow(x3-x1, 2) + pow(y3-y1, 2), 0.5)
c = pow(pow(x3-x2, 2) + pow(y3-y2, 2), 0.5)
A = "%.2f" %(math.degrees(math.acos((a*a - b*b - c*c) / (-2*b*c))))
B = "%.2f" %(math.degrees(math.acos((b*b - a*a - c*c) / (-2*a*c))))
C = "%.2f" %(math.degrees(math.acos((c*c - b*b - a*a) / (-2*a*b))))
print(A)
print(B)
print(C)

Demo12 最小数量的硬币

题目描述

假设硬币种类分为:一元硬币、两角五分硬币、一角硬币、五分硬币、一分硬币

输入总金额,并将总金额兑换成若干个硬币,并保证所兑换的硬币个数最少

输入输出描述

输入总金额

输出每种硬币的个数

示例

输入:

11.56

输出:

11个一元硬币

2个两角五分硬币

0个一角硬币

1个五分硬币

1个一分硬币

total = float(input())
a = int(total)
b = int((total - a) / 0.25)
c = int((total - a - b * 0.25) / 0.1)
d = int((total - a - b * 0.25 - c * 0.1) / 0.05)
e = int((total - a - b * 0.25 - c * 0.1 - d * 0.05) / 0.01)
print(str(a) + "个一元硬币")
print(str(b) + "个两角五分硬币")
print(str(c) + "个一角硬币")
print(str(d) + "个五分硬币")
print(str(e) + "个一分硬币")

Demo13 正多边形的面积

题目描述

正多边形是边长相等的多边形,而且所有的角相等,计算正多边形的公式为:

输入输出描述

输入两个数据分别表示边的个数n和边的长度s,数据之间用空格分隔

输出边长为s的正n多边形的面积,结果保留两位小数

示例

输入:

5 6.5

输出:

72.69

import math
n, s = map(float, input().split())
area = (n * s**2) / (4 * math.tan(math.pi / n))
print("{:.2f}".format(area))

Demo14 计算身体质量指数

题目描述

BMI是根据体重测量健康的方式,通过以千克为单位的体重除以以米为单位的身高的平方计算而出

BMI指数解读如下:

BMI解释
BMI < 18.5超轻
18.5 ≤ BMI < 25.0标准
25.0 ≤ BMI < 30.0超重
30.0 ≤ BMI肥胖

输入输出描述

输入体重和身高,数据之间用空格分隔

输出BMI指数结果

示例

输入:

60 1.8

输出:

标准

str_list = input()
str = str_list.split()
weight = float(str[0])
height = float(str[1])
bmi = weight / height / height
if bmi < 18.5:
    print("超轻")
if 25.0 > bmi >= 18.5:
    print("标准")
if 25.0 <= bmi < 30:
    print("超重")
if bmi >= 30.0:
    print("肥胖")

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
random_number = random.randint(10, 99)
prize = int(input())
str_list1 = str(random_number).split()
str_list2 = str(prize).split()
t = 0
c = 0
if prize == random_number:
    t = t + 10000
else:
    for i in range(0, 1):
        for j in range(0, 1):
            if str_list1[i] == str_list2[j]:
                c = c+1
if c == 2:
    t = 3000
if c == 1:
    t = 1000
print(random_number)
print(t)

Demo17 解一元二次方程

题目描述

一元二次方程$ax^2+bx+c=0 (a != 0)$的解可以使用下面的公式计算

其中$b^2-4ac$称为判别式,如果它为正,则方程有两个实数解;为零,方程只有一个实数解;为负,没有实数解

输入输出描述

输入a、b、c三个数据,数据之间用空格分隔

两个解每行输出一个;一个解单行输出;无解则单行输出无实数解,保留两位小数

示例1

输入:

1.0 3 1

输出:

-0.38

-2.62

示例2

输入:

1 2.0 1

输出:

-1.00

-2.62

示例3

输入:

1 2 3

输出:

无实数解

import math
str_list = input()
str_num = str_list.split()
a = float(str_num[0])
b = float(str_num[1])
c = float(str_num[2])
if b*b - 4*a*c < 0:
    print("无实数解")
elif b*b - 4*a*c == 0:
    print("%.2f" % ((-b + math.sqrt(b*b - 4*a*c)) / (2 * a)))
else:
    r1 = (-b + math.sqrt(b*b - 4*a*c)) / (2 * a)
    r2 = (-b - math.sqrt(b*b - 4*a*c)) / (2 * a)
    print("%.2f" % r1)
    print("%.2f" % r2)

Demo18 解2×2线程方程

题目描述

如有一个2×2的线程方程组:

你可以使用克莱姆法则解该线性方程:

其中$ad-bc$为判别式,如果为零则输出无解

输入输出描述

输入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

输出:

无解

import math
str_list = input()
str_num = str_list.split()
a = float(str_num[0])
b = float(str_num[1])
c = float(str_num[2])
d = float(str_num[3])
e = float(str_num[4])
f = float(str_num[5])
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("%.1f" % x)
    print("%.1f" % y)

Demo19 未来是周几

题目描述

输入表示今天是一周内哪一天的数字(星期天是0,星期一是1,...,星期六是6)

并输入今天之后到未来某天的天数,然后输出该天是星期几

输入输出描述

输入两个数据,分别表示今日星期几的数字和未来某天的天数,数据之间用空格分隔

输出未来某天是星期几

示例1

输入:

1 3

输出:

星期四

示例2

输入:

0 31

输出:

星期三

import math
str_list = input()
str_num = str_list.split()
week = int(str_num[0])
day = int(str_num[1])
week_day = day % 7
week = week + week_day
if week > 7:
    week = week % 7
if week == 1:
    print("星期一")
if week == 2:
    print("星期二")
if week == 3:
    print("星期三")
if week == 4:
    print("星期四")
if week == 5:
    print("星期五")
if week == 6:
    print("星期六")
if week == 7:
    print("星期日")

Demo20 本年中的第几天

题目描述

给定某年、某月、某日的一个日期,计算该日是今年中的第几天

输入输出描述

输入三个数据分别表示年、月、日,数据之间用空格分隔

输出该日是今年中的第几天

示例1

输入:

2023 1 28

输出:

28

示例2

输入:

2023 3 2

输出:

61

from datetime import date
str_list = input()
str_num = str_list.split()
year = int(str_num[0])
month = int(str_num[1])
day = int(str_num[2])
d = date(year, month, day)
print(d.timetuple().tm_yday)

Demo21 剪刀石头布I

题目描述

计算机随机产生一个数字0、1和2分别表示剪刀、石头和布

用户输入数字0、1或2,输出用户赢、计算机赢或平局

输入输出描述

输入数字0、1或2

输出有三行,第一行输出计算机出的啥,第二行输出用户出的啥,第三行输出结果

示例1

输入:

0

输出:

计算机出的 石头

用户出的 剪刀

计算机赢

示例2

输入:

1

输出:

计算机出的 剪刀

用户出的 石头

用户赢

示例3

输入:

2

输出:

计算机出的 布

用户出的 布

平局

import random
num0 = random.randint(0, 2)
num1 = int(input())
dir = {0: "剪刀", 1: "石头", 2: "布"}
print("计算机出的" + dir[num0])
print("用户出的" + dir[num1])
if (num0 == 0 and num1 == 1) and (num0 == 1 and num1 == 2) and (num0 == 2 and num1 == 0):
    print("用户赢")
else:
    print("计算机赢")

Demo22 三角形的周长

题目描述

输入三角形三边的长度,如果输入合法则计算周长并输出结果;否则输出非法

如果任意两边之和大于第三边则输入都是合法的

输入输出描述

输入三个数据表示三边,数据之间用空格分隔

输出三角形的周长,如果非法则输出非法

示例1

输入:

1 1 1

输出:

3

示例2

输入:

1 3 1

输出:

非法

str_list = input()
str_num = str_list.split()
a = float(str_num[0])
b = float(str_num[1])
c = float(str_num[2])
t = 0
if a+b < c or a+c < b or b+c < a or a+b == c:
    print("非法")
else:
    print(a+b+c)

Demo23 一周的星期几

题目描述

泽勒的一致性是一个由泽勒开发的算法,用于计算一周的星期几,公式如下:

(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$为向下取整符号

输入输出描述

输入年、月、日三个数据,数据之间用空格分隔

输出该日是周几

示例1

输入:

2013 1 25

输出:

星期五

示例2

输入:

2012 5 12

输出:

星期六

def zeller_congruence(year, month, day):
    if month < 3:
        month += 12
        year -= 1
    q = day
    m = month
    j = year // 100
    k = year % 100
    h = (q + (26 * (m + 1) // 10) + k + (k // 4) + (j // 4) + 5 * j) % 7
    return h
 
def weekday(year, month, day):
    days = ["星期六", "星期天", "星期一", "星期二", "星期三", "星期四", "星期五"]
    return days[zeller_congruence(year, month, day)]
 
year, month, day = map(int, input().split())
print(weekday(year, month, day))

Demo24 直线的交点

题目描述

直线A上的两个点是$(x1,y1)$和$(x2,y2)$,直线B上的两个点是$(x3,y3)$和$(x4,y4)$

如果两条直线有交点,可以通过解下面的线性等式找出:

如果没有解,则表示两条直线平行

输入输出描述

输入八个数据,分别为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

输出:

两条直线平行

import math
def line_intersection(x1, y1, x2, y2, x3, y3, x4, y4):
    # 计算直线A的斜率和截距
    if x2 - x1 != 0:
        k1 = (y2 - y1) / (x2 - x1)
        b1 = y1 - k1 * x1
    else:
        return "两条直线平行"
 
    # 计算直线B的斜率和截距
    if x4 - x3 != 0:
        k2 = (y4 - y3) / (x4 - x3)
        b2 = y3 - k2 * x3
    else:
        return "两条直线平行"
 
    # 检查两条直线是否平行
    if k1 == k2:
        return "两条直线平行"
    else:
        # 计算交点的坐标
        x = (b2 - b1) / (k1 - k2)
        y = k1 * x + b1
        return x, y
 
x1, y1, x2, y2, x3, y3, x4, y4 = map(float, input().split())
print(line_intersection(x1, y1, x2, y2, x3, y3, x4, y4))

Demo25 回文数

题目描述

输入一个三位整数,然后判断其是否为一个回文数

如果一个数从左向右和从右向左读取时是一样的,那么这个数就是回文数

输入输出描述

输入一个数字

输出Yes表示是回文数,否则输出No

示例1

输入:

121

输出:

Yes

示例2

输入:

123

输出:

No

num = int(input())
num1 = num%10*100 + int(num%100-num%10) + int(num/100)
if num == num1:
    print("Yes")
else:
    print("No")

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 rectangle_relation(x1, y1, w1, h1, x2, y2, w2, h2):
 
    left1, right1 = x1 - w1 / 2, x1 + w1 / 2
    top1, bottom1 = y1 - h1 / 2, y1 + h1 / 2
 
    left2, right2 = x2 - w2 / 2, x2 + w2 / 2
    top2, bottom2 = y2 - h2 / 2, y2 + h2 / 2
 
    if left1 > right2 or right1 < left2 or top1 > bottom2 or bottom1 < top2:
        return "相离"
    elif (left1 <= left2 and right1 >= right2 and top1 <= top2 and bottom1 >= bottom2) or \
         (left2 <= left1 and right2 >= right1 and top2 <= top1 and bottom2 >= bottom1):
        return "包含"
    else:
        return "重叠"
 
input1 = input().split()
x1, y1, w1, h1 = map(float, input1)
 
input2 = input().split()
x2, y2, w2, h2 = map(float, input2)
 
result = rectangle_relation(x1, y1, w1, h1, x2, y2, w2, h2)
print(result)

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
# 模式A
for i in range(1, 7):
    for j in range(1, i + 1):
        print(j, end=' ')
    print()
 
# 模式B
for i in range(6, 0, -1):
    for j in range(1, i + 1):
        print(j, end=' ')
    print()
 
# 模式C
for i in range(1, 7):
    for j in range(6 - i):
        print(" ", end="")
    for j in range(i, 0, -1):
        print(j, end=" ")
    print()
 
# 模式D
for i in range(1, 7):
    for j in range(7 - i):
        print(" ", end="")
    for j in range(i, 0, -1):
        print(j, 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
def print_pattern(n):
    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()
 
print_pattern(7)

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
def print_pattern(rows):
    for i in range(rows):
        # 打印前导空格
        for j in range(rows - i - 1):
            print("    ", end="")
 
        for j in range(i + 1):
            print(format(2 ** j, "4d"), end=" ")
 
        for j in range(i - 1, -1, -1):
            print(format(2 ** j, "4d"), end=" ")
 
        print()
 
rows = 7
 
print_pattern(rows)

Demo30 打印菱形I

题目描述

如下所示,是一个高度为9的菱形

    *
   * *
  * * *
 * * * *
* * * * *
 * * * *
  * * *
   * *
    *

用户输入菱形高度n,并打印出该高度下的菱形

输入输出描述

输入高度n,n为奇数

输出该高度的菱形

示例

输入:

5

输出:

  *
 * *
* * *
 * *
  *
def print_diamond(height):
    if height % 2 == 0:
        print("输入的高度必须是奇数")
        return
    for i in range(1, height, 2):
        spaces = (height - i) // 2
        stars = i
        print(" " * spaces + "* " * (stars // 2 + 1))
    for i in range(height, 0, -2):
        spaces = (height - i) // 2
        stars = i
        print(" " * spaces + "* " * (stars // 2 + 1))
height = int(input())
print_diamond(height)

Demo31 打印菱形II

题目描述

如下所示,是一个高度为9的菱形

    *
   * *
  *   *
 *     *
*       *
 *     *
  *   *
   * *
    *

用户输入菱形高度n,并打印出该高度下的菱形

输入输出描述

输入高度n,n为奇数

输出该高度的菱形

示例

输入:

5

输出:

  *
 * *
*   *
 * *
  *
def print_diamond(height):
    if height % 2 == 0:
        print("输入的高度必须是奇数")
        return5
    for i in range(1, height, 2):
        spaces = (height - i) // 2
        print(" " * spaces + "*", end="")
        if i > 1:
            print(" " * (i - 2) + "*", end="")
        print()
    for i in range(height, 0, -2):
        spaces = (height - i) // 2
        print(" " * spaces + "*", end="")
        if i > 1:
            print(" " * (i - 2) + "*", end="")
        print()
height = int(input())
print_diamond(height)

Demo32 打印菱形III

题目描述

如下所示,是一个高度为9的菱形

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

用户输入菱形高度n,并打印出该高度下的菱形

输入输出描述

输入高度n,n为奇数

输出该高度的菱形

示例

输入:

5

输出:

  *
 ***
*****
 ***
  *
def print_diamond(height):
    if height % 2 == 0:
        print("输入的高度必须是奇数")
        return
    for i in range(1, height + 1, 2):
        spaces = (height - i) // 2
        print(" " * spaces + "*" * i)
    for i in range(height - 2, 0, -2):
        spaces = (height - i) // 2
        print(" " * spaces + "*" * i)
height = int(input("请输入奇数高度: "))
print_diamond(height)

Demo33 猜数字

题目描述

计算机随机生成一个[0,100]之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相同

对于用户输入的数字,程序会提示它是过高还是过低

输入输出描述

每次输入一个整数

每次输出该数字是过高还是过低,如果猜中则输出猜中的数字并结束

示例

输入:50

输出:高了

输入:25

输出:低了

输入:42

输出:高了

输入:39

输出:猜中了!答案就是39

import random
num0 = random.randint(0,100)
user_num = int(input())
while num0 != user_num:
    if num0 > user_num:
        print("小了")
        user_num = int(input())
    if num0 < user_num:
        print("大了")
        user_num = int(input())
else:
    print("猜中了答案就是" + str(num0))

Demo34 最大公约数I

题目描述

输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8

输入输出描述

输入两个数字

输出最大公约数

示例1

输入:

16 24

输出:

8

示例2

输入:

7 3

输出:

1

def sort(a, b):
    if a > b:
        return b
    else:
        return a
str_list = input()
num0 = int(str_list.split()[0])
num1 = int(str_list.split()[1])
t = 0
for i in range(1,sort(num0, num1)+1):
    if num0 % i == 0 and num1 % i == 0:
        t = i
print(t)

Demo35 判断素数

题目描述

一个大于1的整数如果只能被正整数1和它本身整除,则它就是素数,例如2、3、5和7都是素数,而4、6、8、9则不是

输入输出描述

输入一个大于1的正整数

输出Yes表示该数字是素数,否则输出No

示例1

输入:

9

输出:

No

示例2

输入:

11

输出:

Yes

num = int(input())
t = 0
for i in range(2,num):
    if num % i == 0:
        t = t + 1
if t == 0:
    print("Yes")
else:
    print("No")

Demo36 最小公倍数

题目描述

输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15

输入输出描述

输入两个正整数

输出最小公倍数

示例1

输入:

3 9

输出:

9

示例2

输入:

4 6

输出:

12

def sort(a, b):
    if a > b:
        return a
    else:
        return b
str_list = input()
num0 = int(str_list.split()[0])
num1 = int(str_list.split()[1])
t = 0
i = sort(num0, num1)
while i:
    if i % num0 == 0 and i % num1 == 0:
        t = i
        break
    i = i + 1
print(t)

Demo37 整数的素因子

题目描述

输入一个正整数,然后找出它所有的最小因子,也称之为素因子

输入输出描述

输入一个正整数

输出多行,每行输出一个素因子

示例1

输入:

120

输出:

2 2 2 3 5

解释:

2 * 2 * 2 *3 * 5 = 120

示例2

输入:

100

输出:

2 2 5 5

def prime_factors(n):
    factors = []
    divisor = 2
    while n > 1:
        while n % divisor == 0:
            factors.append(divisor)
            n //= divisor
        divisor += 1
    return factors
number = int(input())
factors = prime_factors(number)
print(" ".join(map(str, factors)))

Demo38 完全数

题目描述

如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数

例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1

输入输出描述

输入一个正整数

输出该数是否为完全数

示例1

输入:

6

输出:

Yes

示例2

输入:

9

输出:

No

num = int(input())
t = 0
for i in range(1, num):
    if num % i == 0:
        t = t + i
if t == num:
    print("Yes")
else:
    print("No")

Demo40 计算π

题目描述

你可以使用下面的数列近似计算π

当i越大时,计算结果越近似于π

def calculate_pi(n):
    result = 0
    sign = 1
    for i in range(1, n + 1):
        result += sign * (1 / (2 * i - 1))
        sign *= -1
    return 4 * result
terms = int(input())
approx_pi = calculate_pi(terms)
print("π的近似值:", approx_pi)

Demo41 计算e

题目描述

你可以使用下面的数列近似计算e

当i越大时,计算结果越近似于e

def calculate_e(n):
    result = 1
    factorial = 1
    for i in range(1, n + 1):
        factorial *= i
        result += 1 / factorial
    return result
terms = int(input())
approx_e = calculate_e(terms)
print("e的近似值:", approx_e)

Demo42 剪刀石头布II

题目描述

延伸【Demo21剪刀石头布I】的问题,利用循环将程序改为,计算机和电脑谁先赢三次,谁就是终极胜利者

import random
user = 0
com = 0
while user < 3 and com < 3:
    num0 = random.randint(0, 2)
    num1 = int(input())
    dir = {0: "剪刀", 1: "石头", 2: "布"}
    print("计算机出的" + dir[num0])
    print("用户出的" + dir[num1])
    if (num0 == 0 and num1 == 1) or (num0 == 1 and num1 == 2) or (num0 == 2 and num1 == 0):
        user = user+1
    elif num0 == num1:
        user = user
        com = com
    else:
        com = com + 1
    print(user)
    print(com)
if user == 3 or com == 3:
    if user > com:
        print("用户赢")
    else:
        print("计算机赢")

Demo43 组合问题I

题目描述

在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数

注:组合(a,b)与组合(b,a)算同一种组合,只记录一次

for i in range(1, 8):
    for j in range(i+1,8):
        print(i,j)

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 i != k and j != k:
                num = i * 100 + j * 10 + k
                print(f"{num}")
                count += 1
 
print(f"总个数: {count}")

 

Demo45 水仙花数

题目描述

水仙花数,是一个三位数,且这个数的个位、十位和百位的立方和等于该数字本身,例如$153=1^3+5^3+3^3$

编写程序,输出所有的水仙花数

for i in range(100, 1000):
    a = i % 10
    b = int(i / 10) % 10
    c = int(i/100)
    if a*a*a + b*b*b + c*c*c == i:
        print(i)

 

Demo46 青蛙跳台阶

题目描述

一只青蛙,一次可以跳一个台阶或者两个台阶,现有n个台阶,问该青蛙有多少种不同的跳法?

例如:两个台阶,有两种跳法(1+1,2);四个台阶,有五种跳法(1+1+1+1,2+1+1,1+2+1,1+1+2,2+2)

def jump_ways_recursive(n):
    if n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        return jump_ways_recursive(n - 1) + jump_ways_recursive(n - 2)
n = int(input())
result = jump_ways_recursive(n)
print(f"{n}个台阶的跳法有{result}种")

Demo47 堆叠相加

题目描述

现有堆叠相加模式$a+aa+aaa+aaaa+aaaaa+......$

例如:$2+22+222+2222+22222$,其中a为2,且有5组数字

输入输出描述

输入两个数据分别为数字a和组数n

输出按照堆叠相加模式算出的和

示例

输入:

3 4

输出:

3702

解释:

3 + 33 + 333 + 3333 = 3702

str_list = input()
a = int(str_list.split()[0])
n = int(str_list.split()[1])
t = 0
for i in range(1,n+1):
    c = str("1"*i)
    c = int(c)
    t = t + c*a
print(t)

Demo48 十进制转二进制

题目描述

输入一个十进制正整数,输出其二进制形式

输入输出描述

输入一个十进制正整数

输出二进制字符串

示例

输入:

9

输出:

1001

def decimal_to_binary(decimal):
    if decimal == 0:
        return '0'
    binary_str = ''
    while decimal > 0:
        remainder = decimal % 2
        binary_str = str(remainder) + binary_str
        decimal //= 2
    return binary_str
decimal_input = int(input())
binary_output = decimal_to_binary(decimal_input)
print(f"{binary_output}")

Demo49 二进制转十进制

题目描述

输入一个二进制字符串,输出其对应的十进制数字

输入输出描述

输入一个二进制字符串

输出十进制数字

示例

输入:

1001

输出:

9

def binary_to_decimal(binary_str):
    decimal = 0
    power = len(binary_str) - 1 
    for bit in binary_str:
        decimal += int(bit) * (2 ** power)
        power -= 1
    return decimal
binary_input = input()
decimal_output = binary_to_decimal(binary_input)
print(f"{decimal_output}")

Demo50 十进制转十六进制

题目描述

输入一个十进制正整数,输出其十六进制形式

输入输出描述

输入一个十进制正整数

输出十六进制字符串

示例

输入:

1233321

输出:

1e1b9

def decimal_to_hexadecimal(decimal):
    hex_chars = "0123456789ABCDEF"
    hex_str = ""
    while decimal > 0:
        remainder = decimal % 16
        hex_str = hex_chars[remainder] + hex_str
        decimal //= 16
    return hex_str
decimal_input = int(input())
hexadecimal_output = decimal_to_hexadecimal(decimal_input)
print(f"{hexadecimal_output}")

Demo51 十六进制转十进制

题目描述

输入一个十六进制字符串,输出其对应的十进制数字

输入输出描述

输入一个十六进制字符串

输出十进制数字

示例

输入:

1e1b9

输出:

123321

def decimal_to_hexadecimal(decimal):
    hex_chars = "0123456789ABCDEF"
    hex_str = ""
    while decimal > 0:
        remainder = decimal % 16
        hex_str = hex_chars[remainder] + hex_str
        decimal //= 16
    return hex_str
decimal_input = int(input("请输入一个十进制正整数: "))
hexadecimal_output = decimal_to_hexadecimal(decimal_input)
print(f"{decimal_input}的十六进制形式为: {hexadecimal_output}")

Demo52 最长公共前缀

题目描述

给定两个字符串 s1 和 s2 ,求两个字符串最长的公共前缀串,字符区分大小写

输入输出描述

输入两行,分别表示s1和s2

输出前缀串

示例

输入:

abcdefg

abcdhko

输出:

abcd

str1 = input()
str2 = input()
str_list1 = []
str_list2 = []
length1 = len(str1)
length2 = len(str2)
t = 0
for char in str1:
    str_list1.append(char)
for char1 in str2:
    str_list2.append(char1)
 
if length1 > length2:
    t = length2
else:
    t = length1
for i in range(0, t):
    if str_list1[i] == str_list2[i]:
        print(str_list1[i],end="")
    else:
        break

Demo53 子串出现的次数

题目描述

给定两个字符串 s1 和 s2 ,求 s2 在 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹配

输入输出描述

输入两行字符串,分别为s1和s2,s2的长度小于等于s1

输出s2在s1中出现的次数

示例1

输入:

ABCsdABsadABCasdhjabcsaABCasd

ABC

输出:

3

示例2

输入:

AAAAAAAA

AAA

输出:

2

s1 = input().strip()
s2 = input().strip()
count = 0
i = 0
while i <= len(s1) - len(s2):
    if s1[i:i+len(s2)] == s2:
        count += 1
        i += len(s2)
    else:
        i += 1
print(count)

Demo54 最长公共子串

题目描述

给定两个字符串 s1 和 s2 ,求 s1 与 s2 之间的最长公共子串,字符区分大小写

输入输出描述

输入两行字符串,分别为s1和s2

输出最长公共子串

示例

输入:

123ABCDEFG83hsad

iughABCDEFG23uy

输出:

ABCDEFG

s1 = input().strip()
s2 = input().strip()
len_s1, len_s2 = len(s1), len(s2)
dp = [[0] * (len_s2 + 1) for _ in range(len_s1 + 1)]
max_length = 0
end_position = 0
for i in range(1, len_s1 + 1):
    for j in range(1, len_s2 + 1):
        if s1[i - 1] == s2[j - 1]:
            dp[i][j] = dp[i - 1][j - 1] + 1
            if dp[i][j] > max_length:
                max_length = dp[i][j]
                end_position = i - 1
        else:
            dp[i][j] = 0
if max_length == 0:
    print("No common substring")
else:
    start_position = end_position - max_length + 1
    result = s1[start_position:end_position + 1]
    print(result)

Demo55 检测密码

题目描述

一些网站会给密码强加一些规则:

(1)密码必须至少有8个字符

(2)密码只能包含英文字母和数字

(3)密码应该至少包含两个数字

(4)密码应该至少包含两个大写字母

如果密码符合规则,输出Yes;否则输出No

输入输出描述

输入一串密码

输出该密码是否符合规则

示例1

输入:

123456ab

输出:

No

示例2

输入:

123abcABC

输出:

Yes

def check_password(password):
    if len(password) < 8:
        return "No"
    if not password.isalnum():
        return "No"
    if sum(c.isdigit() for c in password) < 2:
        return "No"
    if sum(c.isupper() for c in password) < 2:
        return "No"
    return "Yes"
password = input()
result = check_password(password)
print(result)

Demo56 回文素数

题目描述

回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数

输出显示前100个回文素数,每行显示10个

def huiwen(num):
    num_str = str(num)
    return num_str == num_str[::-1]
 
def sushu(num):
    t = 0
    for i in range(2, num):
        if num % i == 0:
            t = t + 1
    if t == 0:
        return 1
    else:
        return 0
num = 10
a = 0
str_list = []
while a < 100:
    if huiwen(num) and sushu(num):
        str_list.append(num)
        a = a+1
    num = num+1
for i in range(0, 100):
    print(str_list[i], end=' ')
    if i % 10 == 0:
        print()

Demo57 反素数

题目描述

反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数

输出显示前100个反素数,每行显示10个

def huiwen(num):
    num_str = str(num)
    if num_str == num_str[::-1]:
        return 0
    else:
        return 1
 
def sushu(num):
    t = 0
    for i in range(2, num):
        if num % i == 0:
            t = t + 1
    if t == 0:
        return 1
    else:
        return 0
def fan(num):
    num_str = str(num)
    return num_str[::-1]
num = 10
a = 0
str_list = []
while a < 100:
    if huiwen(num) and sushu(num) and sushu(int(fan(num))):
        str_list.append(num)
        a = a+1
    num = num+1
for i in range(0, 100):
    print(str_list[i], end=' ')
    if i % 10 == 0:
        print()

 

Demo58 双素数

题目描述

双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数

输出显示小于1000的双素数

def sushu(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True
 
def generate_twin_primes(limit):
    twin_primes = []
    for num in range(2, limit - 1):
        if sushu(num) and sushu(num + 2):
            twin_primes.append((num, num + 2))
    return twin_primes
 
twin_primes_list = generate_twin_primes(1000)
 
for twin_prime in twin_primes_list:
    print(twin_prime[0], twin_prime[1])

 

Demo59 梅森素数

如果一个素数可以写成$2^p-1$的形式,其中p是某个正整数,那么这个素数就称作梅森素数

输出p≤31的所有梅森素数

def sushu(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 mersenne_prime(p):
    return 2**p - 1
for p in range(1, 32):
    candidate = mersenne_prime(p)
    if sushu(candidate):
        print(f"{candidate}")

 

Demo60 平方根的近似求法

有几种实现开平方$\sqrt{n}$的技术,其中一个称为巴比伦法

它通过使用下面公式的反复计算近似地得到:

当nextGuess和lastGuess几乎相同时,nextGuess就是平方根的近似值

lastGuess初始值为1,如果nextGuess和lastGuess的差值小于一个很小的数,比如0.0001,就可以认为nextGuess是n的平方根的近似值;否则,nextGuess成为下一次计算的lastGuess,近似过程继续执行

编写代码,求解n的平方根的近似值

def babylonian_sqrt(n, epsilon=0.0001):
    last_guess = 1.0
    next_guess = (last_guess + n / last_guess) / 2.0
    while abs(next_guess - last_guess) >= epsilon:
        last_guess = next_guess
        next_guess = (last_guess + n / last_guess) / 2.0
    return next_guess
number = 25
result = babylonian_sqrt(number)
print(f"{result}")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值