基础练习
练习目标
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 模式C12 13 2 14 3 2 15 4 3 2 1 6 5 4 3 2 1 模式D 1 2 3 4 5 61 2 3 4 51 2 3 41 2 31 21
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=1else:x=-1pi+=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*isum+=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+=1print(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//100b=i%100//10c=i%100%10if(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进制 #输入十进制数xx=int(input("输入一个十进制数:")) #创建一个列表存储ii_list=[]while (x!=0):i=x%16i_list.append(str(i))x=x//16i_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进制xstr=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]=10if(i=="B"):str_list[index]=11if(i=="C"):str_list[index]=12if(i=="D"):str_list[index]=13if(i=="E"):str_list[index]=14if(i=="F"):str_list[index]=15sum+=int(str_list[index])*(16**(len(str_list)-index-1)) print("10进制数为:",sum)