Python第六次作业

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

题目描述

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

转换的公式为如下:fahrenheit=(9/5)*celsius+32

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

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

celsius = int (input('请输入温度(摄氏度):'))
fahrenheit = ( 9 / 5 ) * celsius + 32
print('等于' + str(fahrenheit) + '华氏度')

Demo02 计算圆柱体的体积

题目描述

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

volume=area*length

输入输出描述

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

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

radius = float(input("请输入圆柱体的半径:"))
length = float(input("请输入圆柱体的高:"))
 
import math
pi = math.pi
 
area = radius * radius * pi
volume = area * length
 
print(f"圆柱体的底面积是:{area} , 圆柱体的体积是:{volume}")

Demo03 将英尺数转换为米数

题目描述

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

输入输出描述

输入一个数据表示英尺数

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

foot = float(input("请输入英尺:"))
 
meter = foot * 0.305
 
print(f"对应米数为:{meter}")

Demo04 计算小费

题目描述

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

输入输出描述

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

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

a,b=map(float,input("请输入小计和酬金率(用空格隔开):").split())
 
print(f"小费为:{a * b * 0.01}")
print(f"合计金额为:{a + a * b * 0.01}")

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

题目描述

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

输入输出描述

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

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

num = int(input("请输入一个整数(0-1000):"))
count = 0
 
if  0 >= num or num >= 1000:
    num = int(input("请重新输入一个整数(0-1000):"))
 
while num > 0:
    count += num % 10
    num //= 10 
 
print(f"各位数字之和为:{count}")

Demo06 计算年数和天数

题目描述

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

输入输出描述

输入一个分钟数

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

minute = int(input("请输入分钟数:"))
 
year = minute // (60 * 24 * 365)
day = minute // (60 * 24 ) - year * 365
 
print(f"年数为:{year}")
print(f"天数为:{day}")

Demo07 计算能量

题目描述

水从初始温度加热到最终温度是需要能量的,请计算需要多少能量,公式如下:Q = M * (finalTemperature - initialTemperature) * 4184 这里的M是按千克计的水量,初始温度和最终温度均为摄氏度,热量Q以焦耳计

输入输出描述

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

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

M = float(input("请输入水量(kg):"))
initialTemperature = float(input("请输入初始温度:"))
finalTemperature = float(input("请输入最终温度:"))
 
Q = M * (finalTemperature - initialTemperature) * 4184
 
print(f"所需能量值为:{Q}")

Demo08 分割数字

题目描述

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

输入输出描述

输入一个四位整数

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

num = int(input("请输入一个四位整数:"))
 
if num < 1000 or num > 10000:
    num = int(input("请重新输入一个四位整数:"))
 
a = num // 1000
b = num // 100 % 10
c = num // 10 % 10
d = num % 10
 
print(f"{d}\n{c}\n{b}\n{a}")

Demo09 计算三角形的面积

题目描述

输入三角形的三个顶点坐标,并计算其面积,计算公式如下s=(side1+side2+side3)/2 \\area = \sqrt{s(s-side1)(s-side2)(s-side3)}

输入输出描述

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

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

x1,y1,x2,y2,x3,y3 = map(float,input("请输入三角形的三个顶点坐标(用空格隔开):").split())
 
side1 = (x1 ** 2 + y1 ** 2) ** 0.5
side2 = (x2 ** 2 + y2 ** 2) ** 0.5
side3 = (x3 ** 2 + y3 ** 2) ** 0.5
s = (side1 + side2 + side3) / 2
area = (s * (s - side1) * (s - side2) * (s - side3)) ** 0.5
 
print("三角形的面积为:", area)

Demo10 显示当前时间

题目描述

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

输入输出描述

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

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

# 从datetime模块导入datetime类和timedelta类(表示时间间隔)
from datetime import datetime,timedelta
place = int(input("请输入时区:"))
# 获取当前时间
now = datetime.now()
# 将时间格式化为字符串
time_8= now.strftime("%H:%M:%S")
 
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=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分别表示三边对应的角

输入输出描述

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

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

import math
 
x1, y1 = map(float, input("请输入第一个顶点的坐标,以空格分隔:").split())
x2, y2 = map(float, input("请输入第二个顶点的坐标,以空格分隔:").split())
x3, y3 = map(float, input("请输入第三个顶点的坐标,以空格分隔:").split())
 
side1 = math.sqrt( (x1-x2)**2+(y1-y2)**2)
side2 = math.sqrt((x2-x3)**2+(y2-y3)**2)
side3 = math.sqrt((x1-x3)**2+(y1-y3)**2)
 
cont1=math.acos((side1**2-side2**2-side3**2)/(-2*side2*side3))
cont2=math.acos((side2**2-side1**2-side3**2)/(-2*side1*side3))
cont3=math.acos((side3**2-side2**2-side1**2)/(-2*side1*side2))
 
angle_1=math.degrees(cont1)
angle_2=math.degrees(cont2)
angle_3=math.degrees(cont3)
 
print("%.2f\n%.2f\n%.2f\n"%(angle_1,angle_2,angle_3))
 
 

Demo12 最小数量的硬币

题目描述

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

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

输入输出描述

输入总金额

输出每种硬币的个数

money = float(input("请输入总金额:"))
 
coin_one = int(money)
money = money - coin_one
coin_25j = int(money / 0.25)
money = money - coin_25j * 0.25
coin_1j = int(money / 0.1)
money = money - coin_1j * 0.01
coin_5f = int(money / 0.05)
money = money - coin_5f *0.05
coin_1f = int(money / 0.01)
 
print(f"一元硬币:{coin_one}个, 两角五分硬币:{coin_25j}个, 一角硬币:{coin_1j}个, 五分硬币:{coin_5f}个, 一分硬币:{coin_1f}个")
 

Demo13 正多边形的面积

题目描述

正多边形是边长相等的多边形,而且所有的角相等,计算正多边形的公式为:area = \frac{n*s^2}{4*tan(\frac{π}{n})}

输入输出描述

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

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

import math
 
n = int(input("请输入正多边形的边数:"))
s = float(input("请输入正多边形的边长:"))
pi = math.pi
 
area = (n * s**2) / (4 * math.tan(pi/n))
print(f"面积为:{area}")

Demo14 计算身体质量指数

题目描述

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

BMI指数解读如下:

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

**输入输出描述**

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

输出BMI指数结果
 

weight ,high = map(float,input("请输入体重和身高(空格分隔):").split())
 
BMI = weight/(high**2)
if BMI<18.5:
  print("超轻")
elif BMI<25.0:
  print("标准")
elif BMI<30.0:
  print("超重")
elif BMI>=30.0:
  print("肥胖")
else:
  print("输入错误")

Demo15 判定闰年

题目描述

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

输入输出描述

输入一个年份

输出Yes表示该年份为闰年,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元

输入输出描述

输入一个两位数

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

import random
 
input_num = int (input("输入:"))
input_str =  str(input_num)
random_num = random.randint(10,100)
random_str = str(random_num)
print(random_num)
 
if input_num ==random_num:
  print("奖金为:10000")
elif random_str[0] ==  input_str[1] and random_str[1] == input_str[0]:
  print("奖金为:3000")
elif (random_str[0] == input_str[0] or random_str[0] == input_str[1])or(random_str[1] == input_str[0] or random_str[1] == input_str[1]) :
  print("奖金为:1000")
else:
  print("奖金为:0")

Demo17 解一元二次方程

题目描述

一元二次方程$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$称为判别式,如果它为正,则方程有两个实数解;为零,方程只有一个实数解;为负,没有实数解

输入输出描述

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

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

import math
 
a, b, c = map(float,input("请输入a, b, c(空格分隔):").split())
 
if a == 0 :
    print("输入错误")
 
elif b ** 2 - 4 * a * c > 0:
    r_1 = round((-b + math.sqrt(b ** 2 - 4 * a * c))/(2 * a),2)
    r_2 = round((-b - math.sqrt(b ** 2 - 4 * a * c))/(2 * a),2)
    print(r_1)
    print(r_2)
 
elif b ** 2 - 4 * a * c == 0:
    r = round((-b + math.sqrt(b ** 2 - 4 * a * c))/(2 * a),2)
 
else:
    print("无实数解")

Demo18 解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六个数据,数据之间用空格分隔

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

# 解2×2线程方程
 
a,b,c,d,e,f = map(float,input("输入:").split())
# 前提:(ad - bc)不等于0
 
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(x,y)

Demo19 未来是周几

题目描述

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

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

**输入输出描述**

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

输出未来某天是星期几

# 未来是周几
 
 
week ,future_day = map(int ,input("输入:").split())
day = (week+future_day)%7
if day == 0:
  print("星期天") 
if day == 1:
  print("星期一") 
if day == 2:
  print("星期二") 
if day == 3:
  print("星期三") 
if day == 4:
  print("星期四") 
if day == 5:
  print("星期五") 
if day == 6:
  print("星期六") 

Demo20 本年中的第几天

题目描述

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

输入输出描述

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

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

year,month,day = map(int,input("输入").split())
# 定义每月的天数表
month_day =[0,31,28,31,30,31,30,31,31,30,31,30,31]
# 判断闰年,并对二月进行加一操作
if (year %4 ==0 and year%100 ==0) or year%400 == 0:
  month_day[2] += 1 
  
for i in range(0 , month):
  day += month_day[i]
 
print(day)

Demo21 剪刀石头布I

题目描述

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

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

输入输出描述

输入数字0、1或2

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

import random
 
my = input('请输入(剪刀 = 1 、石头 = 2 、布 = 3):')
 
i = random.randint(1,4)
 
 
if my == i :
    print('平局')
    
if my == 1 :
    if i == 2:
        print('you=剪刀,电脑=石头')
        print('你输了')
    else:
        print('you=剪刀,电脑=布')
        print('你赢了')
    
if my == 2 :
    if i == 1:
        print('you=石头,电脑=剪刀')
        print('你赢了')
    else:
        print('you=石头,电脑=布')
        print('你输了')
    
if my == 3 :
    if i == 1:
        print('you=布,电脑=剪刀')
        print('你输了')
    else:
        print('you=布,电脑=石头')
        print('你赢了')

Demo22 三角形的周长

题目描述

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

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

输入输出描述

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

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

a , b , c = map(float,input("请输入三边边长:").split())
 
if a + b > c and b + c > a and a + c > b :
    print(f"三角形周长为:{a + b + c}")
else:
    print("非法输入")

Demo23 一周的星期几

题目描述

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

h=(q+⌊26(m+1)10⌋+k+⌊k4⌋+⌊j4⌋+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$为向下取整符号

**输入输出描述**

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

输出该日是周几

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)

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

(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

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

**输入输出描述**

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

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

x1, y1 = map(float, input("请输入第一个顶点的坐标,以空格分隔:").split())
x2, y2 = map(float, input("请输入第二个顶点的坐标,以空格分隔:").split())
x3, y3 = map(float, input("请输入第三个顶点的坐标,以空格分隔:").split())
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("直线的交点是:(",x,",",y,")")

Demo25 回文数

题目描述

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

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

**输入输出描述**

输入一个数字

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

num = int (input("输入:"))
temp =num
change_num =0
 
while num >0:
 change_num *= 10
 change_num += num%10
 num //= 10 
 
if temp == change_num:
  print("yes")
else:
  print("no")

Demo26 两个矩形

题目描述

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

**输入输出描述**

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

输出两者的关系

x1,y1,w1,h1 = map(float ,input("输入:").split())
x2,y2,w2,h2 = map(float ,input("输入:").split())
 
#求水平距离和垂直距离
level =abs(x1-x2) 
vertical = abs(y1-y2)
 
# 判断:
if level < (w1+w2)/2 and vertical<(h1+h2)/2:
# 包含:如果两个矩形的中心点之间的水平距离小于两个矩形宽度之和的一半,并且垂直距离小于两个矩形高度之和的一半,则两个矩形相交。  
  print("包含")
elif level<abs(w1-w2) and vertical<abs(h1-h2):
# 重叠: 如果一个矩形的中心点到另一个矩形的中心点的水平距离小于两个矩形宽度之差的一半,并且垂直距离小于两个矩形高度之差的一半
  print("重叠")
else:
  print("相离")

Demo27---32  打印数字或图案

题目描述

利用循环,寻找规律,打印如下数字模式:

#第一题
#             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
 
# 用户输入打印的行数
rows = int(input("输入"))
 
 
def print_num (row):
  for i in range(1,rows+1):
    print(" "*(row*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()  
 
 
print_num(rows)
 
 
#第二题
#         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
 
 
# 用户输入需要的层数
row = int(input("输入"))
 
 
def print_row (row):
  
  for i in range(1,row+1):
    print(" "*(row*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()
 
    
print_row(row)
 
 
#空心菱形
#方法一
layer = int(input('请输入图案输出行数(奇数):'))
p = 1
j = 1 
 
if layer % 2 == 0:
    layer = int(input('请输入图案输出行数(奇数):'))
 
print(' '*(layer // 2 - p + 2) + '*')
while p <= layer//2:
    print(' '*(layer // 2 - p + 1) + '*' + ' '*(2 * p - 1) + '*')
    p += 1
p = 1
while p <= layer//2 - 1:
    print(' '*(p+1) + '*' + ' '*(layer - 2 * p - 2) + '*')
    p += 1
    j -= 1
p = 1
print(' '*(layer // 2 - p + 2) + '*')
 
#方法二
layer = int(input('请输入图案输出行数:'))
 
if layer % 2 == 0:
    while layer % 2 == 0:
        layer = int(input('请输入图案输出行数(奇数):'))
 
for i in range(1,(layer+1)//2):
    print(' ' * (layer - i),end='')
    for j in range(2 * i -1):
        if j == 0 or j == 2 * i - 2:
            print('*',end='')
        else:
            print(' ',end='')
    print()
 
for i in range((layer+1)//2,0,-1):
    print(' ' * (layer - i),end='')
    for j in range(2 * i -1):
        if j == 0 or j == 2 * i - 2 :
            print('*',end='')
        else:
            print(' ',end='')
    print()    
 
 
 
#实心菱形
#方法一
layer = int(input('请输入图案输出行数(奇数):'))
p = 1
j = 1 
 
if layer % 2 == 0:
    while layer % 2 == 0:
        layer = int(input('请输入图案输出行数(奇数):'))
 
while p <= layer/2:
    print( ' '*(layer // 2 - p + 1) + '*'*(2 * p - 1))
    p += 1
p = 0
while p <= layer:
    print(' '*p + '*'*(layer - 2 * p) )
    p += 1
    j -= 1
 
#方法二
layer = int(input('请输入图案输出行数:'))
 
if layer % 2 == 0:
    while layer % 2 == 0:
        layer = int(input('请输入图案输出行数(奇数):'))
 
for i in range(1,(layer + 1) // 2):
    print(' '*(layer - i) + '*'*(i * 2 - 1))
 
for i in range((layer + 1) // 2,0,-1):
    print(' '*(layer - i) + '*'*(2 * i - 1))

Demo33 猜数字

题目描述

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

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

**输入输出描述**

每次输入一个整数

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

import random
 
 
computer = random.randint(0,101)
person = int(input("输入"))
while computer != person:
  if computer>person:
    print("猜低了")
  else:
    print("猜高了")
  person = int(input("输入"))
print(f"恭喜你猜中了! :{person}")

Demo34 最大公约数I

题目描述

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

**输入输出描述**

输入两个数字

输出最大公约数

tmp = 0
x , y =map(int,input("请输入两个数字:").split())
 
def common_divisor(x,y) -> int:
    while ( y != 0):
        tmp = x % y
        x = y
        y = tmp
 
    return x
 
print(f"最大公约数是:{common_divisor(x,y)}")
 

Demo35 判断素数

题目描述

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

**输入输出描述**

输入一个大于1的正整数

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

import math
 
 
def prime(num):
  if num<2:
    return False
  else:
    for i in range(2,int(math.sqrt(num)+1)):
      if num % i == 0:  
        return False
    return True
 
 
num = int(input("输入"))
 
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 计算π

题目描述

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

π=4(1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}-\frac{1}{11}+...+\frac{(-1)^{i+1}}{2i-1})

当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=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+...+\frac{1}{i!}

当i越大时,计算结果越近似于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)) 

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,7):
  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$

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

# 打印输出标准水仙花数,输出这些水仙花数
num = 100
while num >= 100 and num < 1000:
    a = num // 100         # a得到百位的
    b = (num // 10) % 10   # b得到十位的
    c = num % 10           # c得到个位的
    if num == a ** 3 + b ** 3 + c ** 3:
        print(num,end=' ')
    num += 1

Demo46 青蛙跳台阶

题目描述

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

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

def get_staircase(n:int) -> int:
    if n == 1 or n == 2:
        return n
    return get_staircase(n - 1) + get_staircase(n - 2)
 
 
n = int(input("请输入台阶数:"))
print(get_staircase(n))

Demo47 堆叠相加

题目描述

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

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

**输入输出描述**

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

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

num , group = map(int ,input("输入数字和组数:").split())
 
 
def get_num(num,group):
  sum = 0
  for i in range(1,group+1): 
    sum += int(str(num)*i)
  return sum
  
 
print(get_num(num,group))

Demo48 十进制转二进制

题目描述

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

输入输出描述

输入一个十进制正整数

输出二进制字符串

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 十进制转十六进制

题目描述

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

输入输出描述

输入一个十进制正整数

输出十六进制字符串

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

输出前缀串

str1 = str(input("请输入str1:"))
str2 = str(input("请输入str2:"))
 
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)   
 
find_lcs(str1,str2)

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

输出最长公共子串

str1 = str(input("请输入str1:"))
str2 = str(input("请输入str2:"))
 
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)   
 
find_lcs(str1,str2)

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

Demo56 回文素数

题目描述

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

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

import math
 
 
# 判断素数
def find_prime(num):
  if num < 2 :
    return False
  if num == 2 or num == 3:
    return True
  elif num % 2 == 0:
    return False
  elif num % 3 == 0:
    return False
  
  sqrt = int(math.sqrt(num))
  i = 1
  while (6*i-1) < sqrt :
    if num % (6*i-1) == 0 or num % (6*i+1) == 0:
      return False
    i += 1
  else:
      return True
  
 
# 判断回文数
def find_palindromic(num):
  str_num = str(num)
  i = 0
  j = len(str_num)-1
  while i < j:
    if str_num[i] != str_num[j]:
      return False
    i += 1
    j -= 1
  return True  
 
i = 100
count = 0
while count < 100:
  if find_prime(i) and find_palindromic(i):
    print(str(i) +" ",end="")
    count += 1
    if count % 10 == 0:
      print()
  i += 1

Demo57 反素数

题目描述

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

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

import math
 
 
# 判断质数
def is_prime(num):
  if num<2:
    return False
  if num == 2 or num ==3:
    return True
  if num % 2 == 0 or num % 3 == 0:
    return False
  
  sqrt_num =int(math.sqrt(num))
  k = 1
  while (6*k-1)<sqrt_num:
    if num % (6*k-1) == 0 or num % (6*k+1) == 0:
      return False
    k += 1
  return True
 
 
# 判断回文数
def is_palindromic (num):
  str_num =  str(num)
  i = 0
  j = len(str_num)-1
  while i < j:
    if str_num[i] != str_num[j]:
      return False
    i += 1
    j -= 1
  return True
 
 
 
# 反转
def get_sort_num(num):
  str_num = str(num)
  reversed_str =  str_num[::-1]
  return int(reversed_str)
 
count = 0
i = 17
while count < 100:
  if is_prime(i) and is_prime(get_sort_num(i))  and not is_palindromic(i):
    print (str(i)+" ",end="")
    count += 1
    if count % 10 == 0:
      print()
  i += 1

Demo58 双素数

题目描述

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

输出显示小于1000的双素数

import math
 
 
# 判断质数
def is_prime(num):
  if num<2:
    return False
  if num == 2 or num ==3:
    return True
  if num % 2 == 0 or num % 3 == 0:
    return False
  
  sqrt_num =int(math.sqrt(num))
  k = 1
  while (6*k-1)<sqrt_num:
    if num % (6*k-1) == 0 or num % (6*k+1) == 0:
      return False
    k += 1
  return True
 
 
i = 1
while i+2 < 1000:
  if is_prime(i):
    if is_prime(i+2):
      print(f"[{i},{i+2}] ",end="")
  i += 2

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+n/lasetGuess)/

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

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第八章的作业主要是关于字符串和列表、元组的操作。对于字符串,可以使用索引和切片来获取和修改字符串中的字符,还可以使用内置函数,如len()来获取字符串的长度,以及count()、index()等函数来统计字符出现的次数和找出字符的位置。 对于列表和元组,可以使用索引和切片来获取和修改列表和元组中的元素,还可以使用内置函数,如len()来获取列表和元组的长度,以及count()、index()等函数来统计元素出现的次数和找出元素的位置。 作业可能包括以下内容: 1. 使用字符串的切片和索引操作,截取出指定的子字符串; 2. 使用字符串的内置函数,如count()、index()等来统计指定字符的出现次数和位置; 3. 使用列表的索引来获取和修改指定的元素; 4. 使用列表的切片操作,截取出指定的子列表; 5. 使用列表的内置函数,如append()、count()等来添加元素和统计指定元素的出现次数; 6. 使用元组的索引来获取指定的元素; 7. 使用元组的切片操作,截取出指定的子元组; 8. 使用元组的内置函数,如count()、index()等来统计指定元素的出现次数和位置。 为了完成第八章的作业,我们需要熟悉字符串、列表和元组的基本操作和内置函数的使用。可以通过阅读和理解教材中的相关知识点和示例代码,然后按照作业的要求进行编写和测试。编写过程中需要注意细节和语法的正确性,同时也可以参考官方文档和其他相关资料进行查找和学习。完成作业后,可以将代码保存并运行,然后检查输出结果是否符合预期。如果有错误或不清楚的地方,可以再次阅读教材或者寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值