python --- md题集

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

题目描述

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

转换的公式为如下:

输入输出描述

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

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

print("输入:")
celsius = float(input())
fahrenheit = (9 / 5) * celsius + 32
print("输出:")
print("%.1f"%fahrenheit)

Demo02 计算圆柱体的体积

题目描述

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

输入输出描述

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

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

import math


print("输入:")
radius, length =map(float,input().split())
area = radius * radius * math.pi
volume = area *length
print("输出:")
print("%.2f"%area)
print("%.2f"%volume)

Demo03 将英尺数转换为米数

题目描述

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

输入输出描述

输入一个数据表示英尺数

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

print("输入:")
yc = float(input())
m = yc * 0.305
print("输出:")
print("%.4f"%m)

Demo04 计算小费

题目描述

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

输入输出描述

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

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

import math


print("输入:")
num1, num2 = map(float,input().split())
tip = num1 * (num2 / 100)
sum = num1 + tip
print("输出:")
print("%.2f"%tip)
print("%.2f"%sum)

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

题目描述

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

输入输出描述

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

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

print("输入:")
num = int(input())
if 0 <= num <= 1000:
    if num // 100 != 0:
        print("输出:")
        print(num // 100 + num / 10 // 10 + num % 10)
    elif num // 10 != 0:
        print("输出:")
        print(num // 10 + num % 10)
    else:
        print("输出:")
        print(num % 10)

Demo06 计算年数和天数

题目描述

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

输入输出描述

输入一个分钟数

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

print("输入:")
minute = int(input())
year = minute // (365 * 24 * 60)
day = minute % (365 * 24 * 60) // (24 * 60)
print("输出:")
print(year)
print(day)

Demo07 计算能量

题目描述

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

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

输入输出描述

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

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

print("输入:")
M = float(input())
inTe = float(input())
fiTe = float(input())
Q = M * (fiTe - inTe) * 4184
print("输出:")
print("%.1f"%Q)

Demo08 分割数字

题目描述

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

输入输出描述

输入一个四位整数

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

print("输入:")
num = int(input())
if num > 10000 or num < 1000:
    print("错误")
else:
    a = num // 1000
    b = num // 100 % 10
    c = num // 10 % 10 
    d = num % 10
print("输出:")
print(d)
print(c)
print(b)
print(a)

Demo09 计算三角形的面积

题目描述

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

输入输出描述

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

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

import math


print("输入:")
x1, y1, x2, y2, x3, y3 = map(float, input().split(' '))
# 三点一线不能构成三角形
if (abs((y1 - y2) / (x1 -x2)) == abs((y1 - y3) / (x1 - x3))):
    print("三点一线") 
else:
    a = float(math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2))
    b = float(math.sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2))
    c = float(math.sqrt((x1 - x3) ** 2 + (y1 - y3) ** 2))
    s = (a + b + c) / 2
    area = float(math.sqrt(s * (s - a) * (s - b) * (s - c)))
    print("输出:")
    print('%.1f'%area)

Demo10 显示当前时间

题目描述

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

输入输出描述

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

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

# 从datetime模块导入datetime类和timedelta类(表示时间间隔)
from datetime import datetime, timedelta
print("输入:")
place = int(input())
# 获取当前时间
now = datetime.now()
# 将时间格式化为字符串
time_8 = now.strftime("%H:%M:%S")

print("输出:")
if place == 8:
    print(time_8)
elif place == -5:
    # 修改时间(将小时加11)
    modified_time = now + timedelta(hours =11)
    time_5 = modified_time.strftime("%H:%M:%S") 
    print(time_5)
else:
    print("错误")

Demo11 计算三角形的三个角

题目描述

输入三角形的三个顶点坐标,并计算该三角形的三个角分别是多少(角度制)

其中a、b、c分别表示三条边,A、B、C分别表示三边对应的角

输入输出描述

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

输出三行,分别为A、B、C三个角的度数,结果保留两位小数

import math


print("输入:")
x1, y1, x2, y2, x3, y3 = map(float, input().split(' '))
# 三点一线不能构成三角形
if (abs((y1 - y2) / (x1 -x2)) == abs((y1 - y3) / (x1 - x3))):
    print("三点一线") 
else:
    a = float(math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2))
    b = float(math.sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2))
    c = float(math.sqrt((x1 - x3) ** 2 + (y1 - y3) ** 2))
    A = math.acos(((a * a) - (b * b) - (c * c)) / (-2 * b * c))
    B = math.acos(((b * b) - (a * a) - (c * c)) / (-2 * a * c))
    C = math.acos(((c * c) - (b * b) - (a * a)) / (-2 * b * a))
    A = math.degrees(A)
    B = math.degrees(B)
    C = math.degrees(C)
    print("输出:")
    print("%.2f"%A)
    print("%.2f"%B)
    print("%.2f"%C)

Demo12 最小数量的硬币

题目描述

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

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

输入输出描述

输入总金额

输出每种硬币的个数

print("输入:")
coins = int(input())
a = coins // 1
b = coins % 1 // 0.25
c = coins % 1 % 0.25 // 0.1
d = coins % 1 % 0.25 % 0.1 // 0.05
e = coins % 1 % 0.25 % 0.1 % 0.05 // 0.01
print("输出:")
print(f"{a}个一元硬币")
print(f"{b}个两角五分硬币")
print(f"{c}个一角硬币")
print(f"{d}个五分硬币")
print(f"{e}个一分硬币")

Demo13 正多边形的面积

题目描述

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

输入输出描述

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

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

import math

print("输入:")
n, s = map(float, input().split())
area = (n * s ** 2) / (4 * math.tan(math.pi / n))
print("输出:")
print("%.2f"%area)

Demo14 计算身体质量指数

题目描述

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

BMI指数解读如下:

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

输入输出描述

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

输出BMI指数结果

print("输入:")
m, kg = map(float, input().split())
BMI = kg / (m * m)
if BMI < 18.5:
    print("输出:")
    print('超轻')
elif 18.5 <= BMI <25.0:
    print("输出:")
    print('标准')
elif 25.0 <= BMI <30.0:
    print("输出:")
    print('超重')
elif 30.0 <= BMI:
    print("输出:")
    print('肥胖')

Demo15 判定闰年

题目描述

一个年份如果能被4整除但不能被100整除,或者能被400整除,那么这个年份就是闰年

输入输出描述

输入一个年份

输出Yes表示该年份为闰年,No则表示不是闰年

print("输入:")
year=int(input())
if(year%4==0 and year%100!=0) or year%400==0:
     print("输出:")
     print("Yes")
else:
    print("输出:")
    print("No")

Demo16 中彩票

题目描述

随机产生一个两位数数字,然后用户输入一个两位数数字,并根据以下规则判定用户赢得的奖金是多少

(1)输入的数字和随机产生的数字完全相同(包括顺序),奖金为10000元

(2)输入的数字和随机产生的数字相同(不包括顺序),奖金为3000元

(3)输入的数字和随机产生的数字有一位数相同,奖金为1000美元

(4)输入的数字和随机产生的数字都不相同,没有奖金,0元

输入输出描述

输入一个两位数

输出两行,第一行输出那个随机产生的两位数,第二行输出用户的奖金

import random


ra_num = random.randint(10, 99)
print("输入:")
num = int(input())
print("输出:")
print(ra_num)
a = num // 10
b = num % 10
x = ra_num // 10
y = ra_num % 10
if a == x and b == y:
    print("10000")
elif a == y and b == x:
    print("3000")
elif a == x or a == y or b == x or b == y:
    print("1000")
else:
    print("0")

Demo17 解一元二次方程

题目描述

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

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

输入输出描述

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

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

import math


print("输入:")
a, b, c = map(float, input().split())
derta = b ** 2 - 4 * a * c
if derta < 0:
    print("输出:")
    print("无实数解")
elif derta == 0:
    r = -b / (2 * a)
    print("输出:")
    print("%.2f"%r)
elif derta > 0:
    q = math.sqrt(b ** 2 - 4 * a * c)
    r1 = (-b + q) / (2 * a)
    r2 = (-b - q) / (2 * a) 
    print("输出:")
    print("%.2f"%r1)
    print("%.2f"%r2)

Demo18 解2×2线程方程

题目描述

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

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

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

输入输出描述

输入a、b、c、d、e、f六个数据,数据之间用空格分隔

输出两行,第一行x的解,第二行y的解,保留一位小数

import math


print("输入:")
a, b, c, d, e, f = map(float, input().split())
m = a * d - b * c
x = (e * d - b * f) / m
y = (a * f - e * c) / m
if m == 0:
    print("输出:")
    print("无解")
else:
    print("输出:")
    print("%.1f"%x)
    print("%.1f"%y)

Demo19 未来是周几

题目描述

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

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

输入输出描述

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

输出未来某天是星期几

print("输入:")
today, a = map(int, input().split())
if (today + a) % 7 == 0:
    print("输出:")
    print("星期天")
elif (today + a) % 7 == 1:
    print("输出:")
    print("星期一")
elif (today + a) % 7 == 2:
    print("输出:")
    print("星期二")
elif (today + a) % 7 == 3:
    print("输出:")
    print("星期三")
elif (today + a) % 7 == 4:
    print("输出:")
    print("星期四")
elif (today + a) % 7 == 5:
    print("输出:")
    print("星期五")
elif (today + a) % 7 == 6:
    print("输出:")
    print("星期六")

Demo20 本年中的第几天

题目描述

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

输入输出描述

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

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

import time


print("输入:")
year, month, day = map(int, input().split())
month_day = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
sum = 0
if (year%4==0 and year%100!=0) or year%400==0:
    month_day[1] = 29
for i in range(month - 1):
    sum += month_day[i]
sum = sum + day
print("输出:")
print(sum)

Demo21 剪刀石头布I

题目描述

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

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

输入输出描述

输入数字0、1或2

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

import random


print("输入:")
num = int(input())
d = {0:"剪刀", 1:"石头", 2:"布"}
computer = random.randint(0, 2)
print("输出:")
if num == 0:
    if computer == 0:
        print("计算机出的剪刀")
        print("用户出的剪刀")
        print("平局!")
    elif computer == 1:
        print('计算机出的石头')
        print("用户出的剪刀")
        print("计算机赢")
    else:
        print('计算机出的布')
        print("用户出的剪刀")
        print("用户赢")

if num == 1:
    if computer == 1:
        print("计算机出的石头")
        print("用户出的石头")
        print("平局!")
    elif computer == 2:
        print('计算机出的布')
        print("用户出的石头")
        print("计算机赢")
    else:
        print('计算机出的剪刀')
        print("用户出的石头")
        print("用户赢")

if num == 2:
    if computer == 2:
        print("计算机出的布")
        print("用户出的剪布")
        print("平局!")
    elif computer == 0:
        print('计算机出的剪刀')
        print("用户出的布")
        print("计算机赢")
    else:
        print('计算机出的石头')
        print("用户出的布")
        print("用户赢")

Demo22 三角形的周长

题目描述

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

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

输入输出描述

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

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

print("输入:")
a, b, c = map(int, input().split())
if a <= 0 or b <= 0 or c <= 0:
    print("输出:")
    print('非法')
elif a+b <= c or b+c <=a or c+a <= b:
    print("输出:")
    print('非法')
else:
    length = a + b + c 
    print("输出:")
    print(length)

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

输入输出描述

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

输出该日是周几

from calendar import *
def num_to_string(num):
    numbers={
        0:"日",1:"一",2:"二",3:"三",4:"四",5:"五",6:"六"
    }
    return numbers.get(num,None)
 
def weekday(y,m,d):
    monthDay1=[31,28,31,30,31,30,31,31,30,31,30,31]   
    days=0
    for i in range(1,y):
        if(isleap(i)):
            days=days+366
        else:
            days=days+365
    for j in range(1,m):
        if(j==2 and isleap(y)):    
            days=days+29
        else:          
            days=days+monthDay1[j-1]
    total_days=days+d
    xingqi=(total_days)%7   
    print("{0} 年 {1} 月 {2} 日是 星期{3}".format(y,m,d,num_to_string(int(xingqi)))) 
 
 
y=int(input("请输入年份:"))
m=int(input("请输入月份:"))
d=int(input("请输入日期:"))
 
if y<1 or m<1 or m>12 or d<1 or d>31: 
    print("输入错误!")
else:
    total=weekday(int(y),int(m),int(d))

Demo24 直线的交点

题目描述

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

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

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

输入输出描述

输入八个数据,分别为x1 y1 x2 y2 x3 y3 x4 y4,数据之间用空格分隔

如有交点则输出交点的坐标x y,否则输出两条直线平行

print("输入:")
x1, y1, x2, y2, x3, y3, x4, y4 = map(float, input().split(' '))
try:
#(y1 - y2)*x - (x1 - x2)*y == (y1 - y2)*x1 - (x1 - x2)*y1
#(y3 - y4)*x - (x3 - x4)*y == (y3 - y4)*x3 - (x3 - x4)*y3
    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))

Demo25 回文数

题目描述

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

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

输入输出描述

输入一个数字

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

number = int(input("Enter a three-digit integer:")) 
a = number % 10 
b = number // 100 
if a == b: 
    print("%d is a palindrome" %number) 
else :
    print("%d not is a palindrome" %number)

Demo26 两个矩形

题目描述

判断两个矩形之间的关系:包含,重叠,相离

输入输出描述

输入两行,每行四个数据,分别是矩形的中心坐标x、y和矩形的宽、高

输出两者的关系

x1, y1, k1, h1 = map(float, input().split())
x2, y2, k2, h2 = map(float, input().split())

# 求水平距离和垂直距离
level = abs(x1 - x2)
vertical = abs(y1 - y2)

# 判断
# 包含:如果两个矩形的中心点之间的水平距离小于两个矩形宽度之和的一半,并且垂直距离小于两个矩形高度之和的一半,则两个矩形相交。 
if level < (k1 + k2)/2 and vertical < (h1 + h2)/2:
    print("包含")
# 重叠: 如果一个矩形的中心点到另一个矩形的中心点的水平距离小于两个矩形宽度之差的一半,并且垂直距离小于两个矩形高度之差的一半
elif level < abs(k1 -k2) and vertical <(h1 - h2):
    print("重叠")
else:
    print("相离")

第二部分 循环语句

Demo27- 32 打印数字/图案

模式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)
num = int(input("请输入行数:"))
for i in range(1, num + 1):
    for j in range(1, i + 1):
        print(j, end="")
    print()

(模式B)
num = int(input("请输入行数:"))
for i in range(1, num + 1):
    for j in range(1, num + 2 - i):
        print(j, end="")
    print()

(模式C)
num = int(input("请输入行数:"))
for i in range(1, num + 1):
    for k in range(num - i):
        print(" ", end="")
    for j in range(i, 0, -1):
        print(j, end="")
    print()

(模式D)
num = int(input("请输入行数:"))
for i in range(1, num + 1):
    for k in range(i):
        print(" ", end="")
    for j in range(1, num + 2 - i):
        print(j, 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

a = int(input('请输入行数:'))
for i in range(1, a + 1):
    print(" "*(a*2-2*i),end="")
    for j in range(i, 0, -1):
        print(str(j)+" ",end="")
    for j in range(2, i + 1):
        print(str(j)+" ",end="")
    print()



a = int(input('请输入行数:'))
 
for i in range(1, a + 1):
   print(" "*(a*2-2*i),end="")
   num = 1
   for j in range(1, i * 2):
      if j < i:
         print(str(num)+" ",end="")
         num *= 2
      else:
         print(str(num)+" ",end="")
         num = int(num/2)
   print()


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



# (1)
for a in range(0, 6):
    for b in range(0, 9 - a):
        print(' ',end="")
    for c in range(a):
        print('*',end="")
        print(' ',end="")
    print()
for i in range(4, 0, -1):
    for j in range(0, 9 - i):
        print(" ",end="")
    for k in range(i):
        print("*",end="")
        print(' ',end="")
    print()
(2)
n = int(input('请输入行数:'))
for a in range(0, n // 2 + 2):
    for b in range(0, n - a):
        print(' ',end="")
    for c in range(a):
        print('*',end="")
        print(' ',end="")
    print()
for i in range(n // 2, 0, -1):
    for j in range(0, n - i):
        print(" ",end="")
    for k in range(i):
        print("*",end="")
        print(' ',end="")
    print()




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


(1)
for i in range(1, 6):
    for j in range(0, 9 - i):
        print(" ",end="")
    for k in range(i * 2 - 1):
        if k == 0 or k == i * 2 - 2:
            print("*",end="")
        else:
            print(" ",end="")
    print()
for a in range(i - 1, 0, -1):
    for b in range(0, 9-a):
        print(" ",end="")
    for c in range(a * 2 - 1):
        if c == 0 or c == a * 2 - 2:
             print("*",end="")
        else:
             print(" ",end="")         
    print() 

(2)
n = int(input('请输入行数:'))
for i in range(1, n // 2 + 2):
    for j in range(0, n - i):
        print(" ",end="")
    for k in range(i * 2 - 1):
        if k == 0 or k == i * 2 - 2:
            print("*",end="")
        else:
            print(" ",end="")
    print()
for a in range(i - 1, 0, -1):
    for b in range(0, n-a):
        print(" ",end="")
    for c in range(a * 2 - 1):
        if c == 0 or c == a * 2 - 2:
             print("*",end="")
        else:
             print(" ",end="")         
    print() 


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


(1)
for a in range(0, 6):
    for b in range(0, 9 - a):
        print(' ',end="")
    for c in range(a * 2 - 1):
        print('*',end="")
    print()
for i in range(4, 0, -1):
    for j in range(0, 9 - i):
        print(" ",end="")
    for k in range(i * 2 - 1):
        print("*",end="")
    print()

(2)
n = int(input('请输入行数:'))
for a in range(0, n // 2 + 2):
    for b in range(0, n - a):
        print(' ',end="")
    for c in range(a * 2 - 1):
        print('*',end="")
    print()
for i in range(n // 2, 0, -1):
    for j in range(0, n - i):
        print(" ",end="")
    for k in range(i * 2 - 1):
        print("*",end="")
    print()

Demo33 猜数字

题目描述

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

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

输入输出描述

每次输入一个整数

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

import random

computer = random.randint(0, 100)
num = int(input("输入:"))
while 0 < num < 100: 
    if computer > num:
        print("低了")
        num = int(input("输入:"))
    elif computer < num:
        print("高了")
        num = int(input("输入:"))
    else:
        print(f"猜中了,答案就是{computer}")
        break

Demo34 最大公约数I

题目描述

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

输入输出描述

输入两个数字

输出最大公约数

print("输入:")
temp = 0
x, y = map(int,input().split())

def common_divisor(x, y) -> int:
    while(y != 0):
        temp = x % y
        x = y
        y = temp
    return x


print("输出:")
print(common_divisor(x, y))

Demo35 判断素数

题目描述

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

输入输出描述

输入一个大于1的正整数

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

import math


print("输入:")
def prime(num):
   if num < 2:
      return False
   else:
      for i in range(2, num):
         if num % i == 0:
            return False
      return True
        
num = int(input())
print("输出:")
flag = prime(num)
if flag:
   print("Yes")
else:
   print("No")

Demo36 最小公倍数

题目描述

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

输入输出描述

输入两个正整数

输出最小公倍数

x , y = map(int,input("请输入两个数字:").split())
 
 
def commom_multiples(x,y):
# 将大的数值赋值给tmp
    if x < y:
        tmp = y
    else:
        tmp = x
 
    while True :
        if tmp % x == 0 and tmp % y == 0:
            break
        tmp += 1
    
    return tmp
	
print(f"最小公倍数是:{commom_multiples(x,y)}")

Demo37 整数的素因子

题目描述

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

输入输出描述

输入一个正整数

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

def prime(num):
  arr=[]
  i = 2
  while i * i <= num :
    if num % i == 0:
      arr.append(i)
    else:
      i += 1
  if num > 1 :
    arr.append(num)
  return arr
 
 
num = int(input("输入"))
 
print(prime(num))

Demo38 完全数

题目描述

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

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

输入输出描述

输入一个正整数

输出该数是否为完全数

num = int(input("输入"))
 
 
def perfect_num (num):
  sum = 1
  for i in range (2,num // 2 + 1):
    if num % i == 0:
      sum += i
  if num == sum:
    return True
  else:
    return False
 
 
if perfect_num(num):
  print("yes")
else:
  print("no")

Demo39 前50个素数

题目描述

打印前50个素数,每打印10个素数换行

import math
 
 
arr = []
 
 
def prime_num (num):
  if num < 2:
    return False
  elif num == 2 or num == 3:
    return True
  elif num % 2 == 0 or num % 3 == 0:
    return False
  
  sqrt_num = int(math.sqrt(num))
  i = 1
  while 6 * i - 1 <= sqrt_num:
    if num%(6 * i - 1) ==  0 or num % (6 * i + 1) == 0:
      return False
    i += 1
  return True
 
 
num = 2
i = 1
while i <= 50:
  if prime_num(num):
    arr.append(num)
    i += 1
  num += 1
 
i = 1
while i <= 50:  
  print(str(arr[i-1]) + " " ,end=" ")
  if  i % 10 == 0:
    print()
  i += 1

Demo40 计算π

题目描述

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

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

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)

Demo41 计算e

题目描述

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

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

import math

def sime_e(n):
    e = 1
    for i in range(1, n + 1):
        e += 1 / math.factorial(i)
    return e


print(sime_e(1000))

Demo42 剪刀石头布II

题目描述

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

import random
 
count_use = 0
count_com = 0
 
while True:
  use_num = int( input("输入:"))
  com_num = random.randint(0,2)
 
  def change(num):
    if num ==0:
      return " 剪刀"
    elif num == 1:
      return " 石头"
    elif num ==2:
      return " 布"
    else :
      return 0
      
 
  if change(use_num)==0 :
    print("输入不合法")
    continue
    
  else:
    print("计算机输出" + change(com_num))
    print("用户出的" + change(use_num))
  
    if com_num == use_num:
        print("平手")
    elif (com_num == 1 and use_num == 0) or (com_num == 0 and use_num == 2) or (com_num == 2 and use_num == 1):
        count_com += 1
        print("计算机赢"+str(count_com)+"回")
      
    else:
        count_use += 1
        print("用户赢了" + str(count_use) + "回")
      
    if count_use == 3:
        print("用户获得了胜利")
        break
    elif count_com == 3:
        print("电脑获得了胜利")
        break

Demo43 组合问题I

题目描述

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

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

count = 0

for i in range(1, 8):
    for j in range(i + 1, 8):
        if i != j:
            print(f'{i},{j}',end=" ")
            count += 1
print()
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:
                count += 1
                print(f'{i}{j}{k}',end=" ")
print()
print(f'共有{count}个')

Demo45 水仙花数

题目描述

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

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

for i in range(100, 1000):
    a = i // 100
    b = i // 10 % 10
    c = i % 10
    if i == a ** 3 + b ** 3 + c ** 3:
        print("水仙花数为:%s"%i)

Demo46 青蛙跳台阶

题目描述

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

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

class Solution:
    def floor(self, n):
        x, y =1, 1
        for i in range(n):
            x, y = y, x + y
        return x

s = Solution()
s.floor(4)
print(s.floor(4))

Demo47 堆叠相加

题目描述

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

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

输入输出描述

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

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

a = int(input("请输入a:"))
n = int(input("请输入n:"))
sum = 0
temp = a
for i in range(1, n + 1):
    sum = sum + a
    a = temp + a * 10
print(sum)

Demo48 十进制转二进制

题目描述

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

输入输出描述

输入一个十进制正整数

输出二进制字符串

print("输入:")
num = int(input())
print("输出:")
print(bin(num)[2:])


(2)
num = int(input('请输入一个正整数:'))
i = 0
count = ''
num_1 = 0
num_0 = 0
 
while num > 0 :
    i = num % 2
    num //= 2
    if i == 1:
        num_1 += 1
    if i == 0:
        num_0 += 1
    count += str(i)
    
j = 0
for j in range(-1,-len(count)-1,-1):
    print(count[j],end='')

Demo49 二进制转十进制

题目描述

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

输入输出描述

输入一个二进制字符串

输出十进制数字

num = int(input('请输入一个二进制数:'))
 
 
def num_turn_d(num):
  all = 0
  str_num = str(num)
  for i in range(0,len(str_num)):
    all += int(str_num[i])
    if i == len(str_num)-1: 
      return all
    all *= 2 
 
 
 
print(num_turn_d(num))

Demo50 十进制转十六进制

题目描述

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

输入输出描述

输入一个十进制正整数

输出十六进制字符串

print("输入:")
num = int(input())
print("输出:")
print(hex(num)[2:])


(2)
num = int(input("请输入一个正整数:"))
 
 
def change_num(num):
  ox_num = "0123456789ABCDEF"
  fin_num = ""
  while num > 0:
    get_num = num % 16
    num //= 16
    fin_num = ox_num[get_num] + fin_num  
  return fin_num
 
 
print(change_num(num))

Demo51 十六进制转十进制

题目描述

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

输入输出描述

输入一个十六进制字符串

输出十进制数字

num = str(input("请输入一个十六进制的数:"))
 
 
def change_num(num):
  ox_num = "0123456789abcdef"
  all = 0
  len_num = len(num)
  for j in num:
    for i in ox_num:
      if i == j:
        all += ox_num.index(i)* 16 ** (len_num-1)
        len_num -= 1
  return all
  
 
print(change_num(num))

Demo52 最长公共前缀

题目描述

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

输入输出描述

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

输出前缀串

class Solution:
    def prefix(self, strs):
        if len(strs) == 0:
            return ""
    # 遍历字符串
        for i in range(len(strs[0])):
            com_prefix = str[0][i]
            for j in str[1:]:
                if len(j) <= i or com_prefix != j[i]:
                    return strs[0][:i]
            
solution = Solution
print(solution.prefix(['abcdefg', 'abcdhko']))

Demo53 子串出现的次数

题目描述

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

输入输出描述

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

输出s2在s1中出现的次数

str1 = str(input("请输入str1:"))
str2 = str(input("请输入str2:"))
 
 
def count_occurrences(s1, s2):
    count = 0
    i = 0
    while i < len(s1):
        if s1[i:i+len(s2)] == s2:
            count += 1
            i += len(s2)
        else:
            i += 1
    return count
 
print(count_occurrences(str1,str2))

Demo54 最长公共子串

题目描述

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

输入输出描述

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

输出最长公共子串

?
print("输入:")
str1 = str(input())
str2 = str(input())

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("输出:")
    print(lcs)

find_lcs(str1, str2)

示例

输入:

123ABCDEFG83hsad

iughABCDEFG23uy

输出:

ABCDEFG

Demo55 检测密码

题目描述

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

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

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

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

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

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

输入输出描述

输入一串密码

输出该密码是否符合规则

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))


不全:
import re
def check(number):
    a = re.compile(r'[0-9a-zA-Z]{8,}')
    if a.fullmatch(number) is None:
        return False
    return True

print("输入:")
number = input()
if check(number):
    num_number = 0
    upper_number = 0
    for i in number:
        if i.isdigit():
            num_number += 1
    if num_number >= 2:
        print("Yes")
    else:
        print("No") 
    for j in number:
        if j.isupper():
            upper_number += 1
    if upper_number >= 2:
        print("Yes")
    else:
        print("No") 
else:
    print("No")

Demo56 回文素数

题目描述

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

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

def is_prime(num):
    for i in range(2, num // 2 + 1):
        if num % i == 0:
            return False
    return True

def is_huiwen(num):
    if str(num) == str(num)[::-1]:
        return True


count = 0
num = 2
while count < 100:
    if is_prime(num) and is_huiwen(num):
        print("%10d"%num, end="")
        count += 1
        if count % 10 == 0:
            print()
    num += 1

Demo57 反素数

题目描述

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

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

def is_prime(num):
    for i in range(2, num // 2 + 1):
        if num % i == 0:
            return False
    return True


def rev(num):
    return int(str(num)[::-1])


def is_not_huiwen(num):
    if str(num) != str(num)[::-1]:
        return True


count = 0
num = 2
while count < 100:
    if is_prime(num) and is_prime(rev(num)) and is_not_huiwen(num):
        print("%10d"%num, end="")
        count += 1
        if count % 10 == 0:
            print()
    num += 1

Demo58 双素数

题目描述

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

输出显示小于1000的双素数

print("孪生数有:")
l = []
for i in range(2, 1001):
    flag = True
    for num in range(2, i):
        if i % num == 0:
            flag = False
            break
    if flag:
        l.append(i)
    else:
        pass
j = 1
while j < len(l):
    if l[j] - l[j - 1] == 2:
        print(f'{l[j - 1]}和{l[j]}',end="")
        print()
    j += 1

Demo59 梅森素数

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

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

def is_prime(p):
    for i in range(2, p // 2 + 1):
        if p % i == 0:
            return False
    return True


def is_prime_range(start, end):
    arr = []
    b = []
    for p in range(start, end + 1):
        if is_prime(p):
            arr.append(p)
    for p in arr:
        b.append(2 ** (p - 1))
    print(b)


res = is_prime_range(2, 31)
print(res)

Demo60 平方根的近似求法

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

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

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

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

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

def square_root(n):
    lastGuess = n / 2
    for i in range(20):
        nextGuess =(1 / 2) * (lastGuess + (n / lastGuess))
        lastGuess = nextGuess
    return nextGuess


print(square_root(6))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值