Trains-03练习-结构
基础练习
练习目标
if-else判断语句
while循环语句
01. 计算车费
题目描述
小红打车,起步价8元(3公里), 每公里收费 2 元,她打车行驶了 n 公里,计算车费
输入描述
输入一个公里数
输出描述
输出应付车费
示例
输入:
5
输出:
12
#输入小红打车行驶的距离
n = float(input("请输入小红打车行驶的距离:"))
#设置计费方式
if n <= 3:
print("小红应付车费为:8元")
else:
money = 8 + (n - 3) * 2
print("小红应付车费为:",money,"元")
02. 判定闰年
题目描述
一个年份如果能被4整除但不能被100整除,或者能被400整除,那么这个年份就是闰年
输入输出描述
输入一个年份
输出Yes表示该年份为闰年,No则表示不是闰年
示例1
输入:
2008
输出:
Yes
示例2
输入:
2002
输出:
No
#设置容错
try:
#输入一个年份
year = int(input("请输入要判断的年份:"))
#设置判断方式
#筛选符合闰年条件的
if year % 400 == 0:
print("Yes")
elif year % 4 == 0 and year % 100 != 0:
# and 表示 并列关系 ! 表示 非
print("Yes")
#筛出不符合条件的
else:
print("No")
except:
print("输入的数据有误 请重新输入")
03. 未来周几
题目描述
输入表示今天是一周内哪一天的数字(星期天是0,星期一是1,…,星期六是6)
并输入今天之后到未来某天的天数,然后输出该天是星期几
输入描述
分别输入两个数据,表示今日星期几的数字和未来某天的天数
输出描述
输出未来某天是星期几
示例1
输入:
1
3
输出:
星期四
示例2
输入:
0 31
输出:
星期三
#容错管理
try:
#定义长量
week = 7
# 输入今天是星期几
now_week = int(input("请输入今天是星期几:"))
#输入未来某天的天数
day = int(input("请输入未来某天的天数:"))
#设置算法
yu_day = day % week
yu_day = int(yu_day)
future_day = now_week + yu_day
future_day = int(future_day)
if future_day > 7:
future_day = future_day - 7
print("未来某天是星期", future_day)
else:
print("未来某天是星期", future_day)
except:
print("输入的数据有误 请重新输入")
04. 方程求解
题目描述
如有一个2×2的线程方程组:
a
x
+
b
y
=
e
c
x
+
d
y
=
f
ax+by=e \\ cx+dy=f
ax+by=ecx+dy=f
你可以使用克莱姆法则解该线性方程:
x
=
e
d
−
b
f
a
d
−
b
c
,
y
=
a
f
−
e
c
a
d
−
b
c
x=\frac{ed-bf}{ad-bc},y=\frac{af-ec}{ad-bc}
x=ad−bced−bf,y=ad−bcaf−ec
其中
a
d
−
b
c
ad-bc
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
输出:
无解
#容错管理
from colorsys import yiq_to_rgb
try:
# 输入对应的6个数据
a = float(input("请输入数据a的值:"))
b = float(input("请输入数据b的值:"))
c = float(input("请输入数据c的值:"))
d = float(input("请输入数据d的值:"))
e = float(input("请输入数据e的值:"))
f = float(input("请输入数据f的值:"))
if a*d-b*c == 0:
print("该方程无解")
else:
# 写出对应的公式
x = (e * d - b * f) / (a * d - b * c)
y = (a * f - e * c) / (a * d - b * c)
x = float(x)
y = float(y)
# 输出对应的解
print("x的解为:", x)
print("y的解为:", y)
except:
print("输入的数据有误 请重新输入")
05. 三角形周长
题目描述
输入三角形三边的长度,如果输入合法则计算周长并输出结果;否则输出非法
如果任意两边之和大于第三边则输入都是合法的
输入输出描述
输入三个数据表示三边,数据之间用空格分隔
输出三角形的周长,如果非法则输出非法
示例1
输入:
1 1 1
输出:
3
示例2
输入:
1 3 1
输出:
非法
#容错管理
try:
# 输入三角形的三边
a = float(input("请输入三角形的一条边"))
b = float(input("请输入三角形的一条边"))
c = float(input("请输入三角形的一条边"))
if a+c >b and a+b>c and b+c>a:
C=a+b+c
C=float(C)
print("三角形的周长为:", C)
else:
print("非法")
#输出三角形的周长
except:
print("输入的数据有误 请重新输入")
06. 图形构建
题目描述
输入一个整数n,按照下面的格式输出n行满足规律的数据
输入描述
输入一个整数n,表示输出n行数据
输出描述
输出满足规律的数字组成的图形(示例中的几种模式分别输出)
示例
模式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
#定义常量
x = 1
#设置列数的循环
while x <= 6:
# 设置行的循环
y = 1
while y <= x:
print(y," ",end="")
y +=1
print("")
x +=1
print("")
#模式B
#定义常量
x = 1
#设置列数的循环
while x <= 6:
# 设置行的循环
y = 1
while y <= 6-x+1:
print(y," ",end="")
y +=1
print("")
x +=1
print("")
#模式C
#定义常量
x = 1
#设置列数的循环
while x <= 6:
# 设置行的循环
y = 6
while y != 0 :
if y > x:
print(" ", end="")
else:
print(y,end="")
y -= 1
print("")
x +=1
print("")
#模式D
# 只是需要再模式B的基础上每行添加对应行数的空格就行
#定义常量
x = 1
#设置列数的循环
while x <= 6:
#在输出y之前添加对应数量的空格
z = 1
while z < x:
print(" ",end="")
z += 1
# 设置行的循环
y = 1
while y <= 6-x+1:
print(y,end="")
y +=1
print("")
x +=1
print("")
#模式E(实验模型)
#定义常量
x = 1
#设置列数的循环
while x <= 6:
# 设置行的循环
y = 1
while y != 7 :
if x > y :
print(" ", end="")
else:
print(y, end="")
y += 1
print("")
x +=1
print("")
07. 判断素数
题目描述
一个大于1的整数如果只能被正整数1和它本身整除,则它就是素数,例如2、3、5和7都是素数,而4、6、8、9则不是
输入描述
输入一个大于1的正整数
输出描述
输出Yes表示该数字是素数,否则输出No
示例1
输入:
9
输出:
No
示例2
输入:
11
输出:
Yes
#容错管理
try:
#设置常量
first = 2
parameter = 0
#输入一个大于1的正整数
math = int(input("请输入一个大于1的正整数"))
#设置检验素数的方式
while first < math:
if math % first == 0:
parameter = 1
first = first +1
#输出是否为素数
if parameter ==1:
print("No")
else:
print("Yes")
except:
print("输入数据有误 请重新输入")
08. 最大公约数
题目描述
输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8
输入描述
输入两个数字
输出描述
输出最大公约数
示例1
输入:
16 24
输出:
8
示例2
输入:
7 3
输出:
1
#定义常量
c = 0
#输入两个正整数
a = int(input("请输入第一个正整数:"))
b = int(input("请输入第二个正整数:"))
#设置计算最大公约数的算法
#以下是采用辗转相除发来计算最大公约数
#首先判断一下 a 和 b 的大小
if a >= b:
a = a
b =b
else:
c = a
a = b
b = c
#开始使用辗转相除法
#开始循环
while b!=0:
d = a % b
a = b
b = d
#也可以写成这种 a , b = b , d 用来交换数据的值
print("输出最大公约数是",a)
#计算最小公倍数的话 只需要把 a*b /最大公约数即可
09. 计算π
题目描述
你可以使用下面的数列近似计算π
π
=
4
(
1
−
1
3
+
1
5
−
1
7
+
1
9
−
1
11
+
.
.
.
+
(
−
1
)
i
+
1
2
i
−
1
)
π=4(1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}-\frac{1}{11}+...+\frac{(-1)^{i+1}}{2i-1})
π=4(1−31+51−71+91−111+...+2i−1(−1)i+1)
当i越大时,计算结果越近似于π
#定义常量
x=1
m=2
#输入要用多少个项数进行计算
i = int(input("请输入要使个项进行计算:"))
#这个是一个全局变量 在后面要用 所以定义在循环外面
p = 0
#开始循环
while x <= i:
#设置类加 针对项数 改变对应的符号
p = p + 1/x * (-1)**m
#采用 2 进行递增
x +=2
#改变符号的关键
m+=1
#计算最后兀 的值
pi = 4 * p
#输出得到兀的值 输入i 的值越大 最后得到的pi值越准确
print("兀 的值为:",pi)
10. 排列组合
题目描述
在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数
注:组合(a,b)与组合(b,a)算同一种组合,只记录一次
#定义常量
x = 1
n = 0
#开始第一个循环
while x <=7:
y = x
while x <= y <= 7:
print("组合有:",(x,y))
n +=1
y += 1
x+=1
print("所有组合的个数为:",n)
拓展作业
w01.计算e
题目描述
你可以使用下面的数列近似计算e
e
=
1
+
1
1
!
+
1
2
!
+
1
3
!
+
1
4
!
+
.
.
.
+
1
i
!
e=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+...+\frac{1}{i!}
e=1+1!1+2!1+3!1+4!1+...+i!1
当i越大时,计算结果越近似于e
#定义常量
x = 1 #定义一个初始值
jie = 1 #定义阶乘运算的初始值
y = 1 #用于计算累加的变量
e = 1 #e 的初始值
m = 1 # 用于计算阶乘的变量
#输入对应的i值
i = int(input("请要计算的阶乘的项数-1为:"))
#设置累加的循环
while y != i:
# 设置阶乘的计算
while x != m + 1:
jie = jie * x
x += 1
#累加计算
e = e +1/jie
#多项
y +=1
#多项的递增
m +=1
#输出e的值
print("请输入e的近似值为:",e)
#这里的m 和 y 可以改为一个变量使用 但二者虽然变化相同 但毕竟意义不一样
w02.组合
题目描述
有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
#定义常量
x = 1
n = 0
#开始第一个循环,进行第一位的选择
while 0 < x < 5:
# 开始第二个循环,进行第二位的选择
y = x+1
while x < y < 5:
# 开始第三个循环,进行第三位的选择
z = y + 1
while y < z < 5:
print("组合有:", (x, y, z))
z += 1
n +=1
y += 1
x+=1
#输出所有组合的个数
print("所有组合的个数为:",n)
w03.水仙花
题目描述
水仙花数,是一个三位数,且这个数的个位、十位和百位的立方和等于该数字本身,例如 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33
编写程序,输出所有的水仙花数
#输入一个三位数
math_three = int(input("请输入一个三位数:"))
#分别去除各个位上的数字
#百位
hundred_math = math_three // 100
#十位
ten_math = math_three % 100 //10
#个位
one_math = math_three % 100 % 10
if hundred_math ** 3 + ten_math ** 3 + one_math ** 3 == math_three:
print("这个三位数是水仙花数:", math_three)
else:
print("这个三位数不是水仙花数")
except:
print("输入的三位数有误,请重新输入")
w04.进制
题目描述
编写代码,实现十进制数据转换二进制、二进制转换十进制、十进制转换十六进制、十六进制转换十进制的代码实现
输入描述
输入一个原始数据
输出描述
输出一个转换后的数据
示例
输入一个数据(十进制): 3
输出(二进制):11
# 输入数据
d = int(input("请输入一个十进制数:"))
print("输入的十进制数",d)
# 循环求解(因为不知道迭代多少次,使用死循环)
b = ""
while True: #不设置循环的界限 采用 break进行循环停止
res = d // 2 # 整除的结果,用于下一次整数2
remainder = d % 2 # 余数,用于拼接字符串
b = str(remainder) + b # 拼接字符串(二进制)
if res == 0:
print("求解结束")
break
# 将整数结果赋值给d
d = res
print(f"转换后的二进制:{b}")