python 结构作业
基础练习
练习目标
if-else判断语句
while循环语句
01. 计算车费
题目描述
小红打车,起步价8元(3公里), 每公里收费 2 元,她打车行驶了 n 公里,计算车费
输入描述
输入一个公里数
输出描述
输出应付车费
示例
输入:
5
输出:
12
#输入 km=float(input("公里数:")) if km<=3: print("车费为:") else: print("车费为:%.2f" %(8+2*(km-3)))
02. 判定闰年
题目描述
一个年份如果能被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")
03. 未来周几
题目描述
输入表示今天是一周内哪一天的数字(星期天是0,星期一是1,...,星期六是6)
并输入今天之后到未来某天的天数,然后输出该天是星期几
输入描述
分别输入两个数据,表示今日星期几的数字和未来某天的天数
输出描述
输出未来某天是星期几
示例1
输入:
1
3
输出:
星期四
示例2
输入:
0 31
输出:
星期三
#输入 today=int(input("今天星期几:")) days=int(input("未来第几天:")) x=days%7 #输出 print("今天星期"+str(x+today))
04. 方程求解
题目描述
如有一个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
输出:
无解
#输入 #ax+by=e cx+dy=f a,b,c,d,e,f=map(float,input("请依次输入a,b,c,d,e,f 6个数据:").split()) if (a*d-b*c==0): print("该方程无解") else: print("x的解为:x=%.1f" %((e*d-b*f)/(a*d-b*c))) print("y的解为y=%.1f" %((a*f-e*c)/(a*d-b*c)))
05. 三角形周长
题目描述
输入三角形三边的长度,如果输入合法则计算周长并输出结果;否则输出非法
如果任意两边之和大于第三边则输入都是合法的
输入输出描述
输入三个数据表示三边,数据之间用空格分隔
输出三角形的周长,如果非法则输出非法
示例1
输入:
1 1 1
输出:
3
示例2
输入:
1 3 1
输出:
非法
#输入 a,b,c=map(float,input("请输入三角形的边长:").split()) if((a+b>c) and (a+c>b) and (b+c>a)): print("三角形三边的周长是:%.1f" %(a+b+c)) else: 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
for i in range(1,7): for j in range(1,i+1): print(j,end="") print("\n") #在 range() 函数中,如果只提供两个参数,第三个参数(步长)默认为1。 #为了代码的可读性,加一个-1 for i in range(7,0,-1): for j in range(1,i): print(j,end="") print()
07. 判断素数
题目描述
一个大于1的整数如果只能被正整数1和它本身整除,则它就是素数,例如2、3、5和7都是素数,而4、6、8、9则不是
输入描述
输入一个大于1的正整数
输出描述
输出Yes表示该数字是素数,否则输出No
示例1
输入:
9
输出:
No
示例2
输入:
11
输出:
Yes
a=int(input("输入一个大于1的数:")) for i in range(2,a+1): if(a%i==0): break if(a==i): print("Yes") else: print("No")最大公约数
题目描述
输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8
输入描述
输入两个数字
输出描述
输出最大公约数
示例1
输入:
16 24
输出:
8
示例2
输入:
7 3
输出:
1
a,b=map(int,input("请输入两个正整数:").split()) if(a>b): x=b else: x=a for i in range(x,1,-1): if(a%i==0 and b%i==0): break print(str(a)+"与"+str(b)+"的最大公约数为",i)
09. 计算π
题目描述
你可以使用下面的数列近似计算π
当i越大时,计算结果越近似于π
pi=0 for i in range(1,100): if(i%2==1): x=1 else: x=-1 pi+=1/(2*i-1)*x print("Π值为:",4*pi)
10. 排列组合
题目描述
在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数
注:组合(a,b)与组合(b,a)算同一种组合,只记录一次
sum=0 for i in range(5,1,-1): sum+=i print("一共有"+str(sum)+"可能")
拓展作业
w01.计算e
题目描述
你可以使用下面的数列近似计算e
当i越大时,计算结果越近似于e
#设x为每一项的分母,y为每一项 x=1 sum=0 sum=float(sum) for i in range(1,100): x=x*i sum+=1/x print("e的值为",sum+1)
w02.组合
题目描述
有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
#建立数组 digits=[1,2,3,4] x=0 #应为 4*3*2 种可能 for i in range(1,5): for j in range(1,5): if(i!=j): for k in range(1,5): if((i!=k) and (j!=k)): x+=1 print(100 * i + 10 * j + k) print("如上所示,共有"+str(x)+"种可能")
w03.水仙花
题目描述
水仙花数,是一个三位数,且这个数的个位、十位和百位的立方和等于该数字本身,例如$153=1^3+5^3+3^3$
编写程序,输出所有的水仙花数
#设百 十 个 位分别为a b c,这个三位数为x #i % 100 / 10 会得到一个浮点数 //得到的商向下取整 print("水仙花数有:") for i in range(100,1000): a=i//100 b=i%100//10 c=i%100%10 if(i==a**3+b**3+c**3): print(i)
w04.进制
题目描述
编写代码,实现十进制数据转换二进制、二进制转换十进制、十进制转换十六进制、十六进制转换十进制的代码实现
输入描述
输入一个原始数据
输出描述
输出一个转换后的数据
示例
输入一个数据(十进制): 3
输出(二进制):11
#输入一个十进制数x #x=int(input("输入(十进制):")) # #创建一个列表存储i i_list=[] while(x!=0): i=x%2 #将i添加到空列表中 i_list.append(str(i)) x=x//2 #将i_list中的项目反转输出 # # list.reverse()方法用于原地反转列表中的元素顺序,但是这个方法没有返回值(即返回None) # i_list.reverse() # #使输出数据之间没有间隔 print(''.join(i_list)) #十进制转16进制 #输入十进制数x x=int(input("输入一个十进制数:")) #创建一个列表存储i i_list=[] while (x!=0): i=x%16 i_list.append(str(i)) x=x//16 i_list.reverse() #代码应该在循环中更新列表 i_list,而不是更新循环变量 j,因为循环变量 j 的更新不会影响到列表 i_list。 # 使用 enumerate 来获取每个元素的索引和值 for index,j in enumerate(i_list): if j=="10": i_list[index]="A" if j=="11": i_list[index]="B" if j=="12": i_list[index]="C" if j=="13": i_list[index]="D" if j=="14": i_list[index]="E" if j=="15": i_list[index]="F" print(''.join(i_list)) #2进制转10进制 #输入2进制x str=input("输入一个字符串:") sum=0 # #range() 函数生成一个从字符串长度减1(即最后一个字符的索引)开始到0(包括0)的逆序列。步长设置为-1,表示索引是递减的。 # for index,i in enumerate(str): sum+=int(i)*(2**(len(str)-1-index)) print("十进制数为:",sum) #16进制转10进制 str=input("请输入一个16进制数:") sum=0 str_list=list(str) for index,i in enumerate(str_list): if(i=="A"): str_list[index]=10 if(i=="B"): str_list[index]=11 if(i=="C"): str_list[index]=12 if(i=="D"): str_list[index]=13 if(i=="E"): str_list[index]=14 if(i=="F"): str_list[index]=15 sum+=int(str_list[index])*(16**(len(str_list)-index-1)) print("10进制数为:",sum)