《计算机与Python程序设计基础》实验课程期末编程练习题
目录
《计算机与Python程序设计基础》实验课程期末编程练习题
一些小tips:
1.输入任意大的自然数,输出各位数字的和。例如输入12345,输出结果为: 自然数12345各位数字之 和为15。
2.任意输入一个字符串,判断是不是回文字符串: 比如"abcba","12321"就是回文字符串。
3.利用turtle 模块编程,画笔宽度为5,颜色为红色,画出一个边长为200的等边三角形。
4.任意输入一个阿拉伯数字,编程转换成中文数字。比如:1234567890 -> 壹贰叁肆伍陆柒捌玖零'''。
5.编写程序,在1到100,生成一个含10个随机数的列表,要求所有元素不相同,并输出列表。
6.获得用户输入的一个字符串,将字符串按照空格分割,然后逐行打印出来。
7.输入一个字符串,要求截取最后两个字符替换最前面的两个字符。 如:"abcdefg"变成"fgcde"。
8.求1到200能够被17整除的最大数
9.求出这两个整数的最大公约数和最小公倍数。
11.猴子吃桃子问题:小猴在第1天摘了若干个桃子,当天吃掉一半多一个;第2天接着吃了剩下的桃子的 一半多一个。以后每天都吃尚存桃子的一半多一个,到第7天早上要吃时只剩下一个,问小猴最初共摘 下多少个桃子?
12.循环控制的序列是列表,随机生成10个1~100的整数,求最小值、最大值和平均值。
13.显示100~200不能被3整除的数,要求一行显示10个数。
14. 使用牛顿迭代法求解平方根。计算一个正实数a的平方根可以根据牛顿迭代法实现:首先假设t=a,开 始循环,如果t=a/t(或小于容差),则t等于a的平方根,循环结束后返回结果;否则将t和a/t的平均 值赋给t,继续循环。
15.编程显示Fibonacci数列:1、1、2、3、5、8……的前20项。要求每行显示5项。
16. 如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。 例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数 请按照从小到大的顺序输出 1000 以内的水仙花数(3位数),并用"逗号"分隔输出结果
20. 利用for循环求1-100中所有奇数的和以及所有偶数的和
21.编程求1-2+3-4+5 ...+99
22.输入一年份,判断该年份是否是闰年并输出结果
23.一个小球从h米高度自由落下,每次落地后反跳回原高度的 2/3再落下,求它在第m次落地时,共经过多少 米?第m次落地后反弹多高?分两行输入h和m, 输出结果保留两位小数
25.一个班的身高已经量好了,请输出其中超过平均身高的那些身高.程序的输入为一行数据,以空格分 隔,每个数据都是一个正整数.程序要输出那些超过输入的身高的平均数的输入值,每个数后面有一个 空格,输出的顺序和输入的相同,平均身高要求保留小数点后两位
26.输入一个正整数n(1≤n<7). 输出n行由大写字母A开始构成的三角形字符阵列,其中每个字母后面都有一个空格.
28.编写程序,读入一个字符串,去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出
一些小tips:
1.用input()之前先想好自己需要的是什么,如果是字符串就不需要eval()
2.很多题目虽然用一些特定的函数或者方法可以使代码较为简洁,但是如果水平不够,也可以选择用简单的循环和条件语句来实现
1.输入任意大的自然数,输出各位数字的和。例如输入12345,输出结果为: 自然数12345各位数字之 和为15。
难点在于对任意大的自然数各位求和,可以采用从头到尾遍历的方法(使用len()函数确定下限),也可以采用从末位逐步取数。
这里采用的是第二种更简单的方法。
n=eval(input("请输入任意大的自然数:"))
sum=0
while(n): #n取完之后自然为False
sum+=n%10 #取最后一位累加
n=n//10 #截短一位
print("此自然数各位之和为:%d"%sum)
2.任意输入一个字符串,判断是不是回文字符串: 比如"abcba","12321"就是回文字符串。
和第一题异曲同工,用len()函数遍历即可。
a=input("请输入要判断的字符串:")
for i in range(0,len(a)-1):
if(a[i]!=a[len(a)-1-i]): #这里要额外-1因为是从0开始的
print("不是回文字符串")
break;
else:
print("是回文字符串")
3.利用turtle 模块编程,画笔宽度为5,颜色为红色,画出一个边长为200的等边三角形。
import turtle as t
t.pensize(5)
t.pencolor('red')
t.forward(200)
t.left(120)
t.forward(200)
t.left(120)
t.forward(200)
理解即可
4.任意输入一个阿拉伯数字,编程转换成中文数字。比如:1234567890 -> 壹贰叁肆伍陆柒捌玖零'''。
最简单的方法是用十个if(如果你不会字典的话)
这里采用字典
dict1={1:'壹',2:'贰',3:'叁',4:'肆',5:'伍',6:'陆',7:'柒',8:'捌',9:'玖',0:'零'}
key=eval(input("请输入一个阿拉伯数字:"))
print(dict1[key])
5.编写程序,在1到100,生成一个含10个随机数的列表,要求所有元素不相同,并输出列表。
import random lst=random.sample(range(1,101),10)#sample可以保证互不相同且随机 print(lst)
最简洁的写法
6.获得用户输入的一个字符串,将字符串按照空格分割,然后逐行打印出来。
s=input("请输入一串字符串:")
sum=""
for i in s:
if(i==" "):
print(sum)
sum=""
else:
sum=sum+i
print(sum)
简单写法
s=input("请输入一串字符串:")
print(*s.split(" ")) #*拆分列表
简洁写法
7.输入一个字符串,要求截取最后两个字符替换最前面的两个字符。 如:"abcdefg"变成"fgcde"。
s1=input("请输入一串字符串:")
s2=s1[-2:]
s2+=s1[2:-2]
print(s2)
切片即可
8.求1到200能够被17整除的最大数
n=0
for i in range(1,201):
if(i%17==0):
n=i
print("1~200中能被17整除的最大数是:%d"%n)
最后一个自然是最大数
9.求出这两个整数的最大公约数和最小公倍数。
m,n=eval(input("请输入两个逗号隔开的整数:"))
def max_gcd(a,b):
while(a-b):
if(a
这道题应该有点超纲(因为函数没学到),如果不用函数的话会很杂乱。
求最大公约数用辗转相除法,求最小公倍数用较大的数暴力求解
11.猴子吃桃子问题:小猴在第1天摘了若干个桃子,当天吃掉一半多一个;第2天接着吃了剩下的桃子的 一半多一个。以后每天都吃尚存桃子的一半多一个,到第7天早上要吃时只剩下一个,问小猴最初共摘 下多少个桃子?
num=1
for i in range(6):
num=(num+1)*2
print(num)
12.循环控制的序列是列表,随机生成10个1~100的整数,求最小值、最大值和平均值。
import random
lst=[]
for i in range(10):
lst.append(random.randint(1,101)) #这里没说10个随机数不相同,不能用sample
sum=0
for i in lst:
sum+=i
avg=sum/10
print(lst)
print("最小值为:%d"%min(lst))
print("最大值为:%d"%max(lst))
print("平均值为:%.2f"%avg)
13.显示100~200不能被3整除的数,要求一行显示10个数。
counter=1
for i in range(100,201):
if(i%3!=0):
print(i,end=" ")
if(counter%10==0):
print()
counter=counter+1
14. 使用牛顿迭代法求解平方根。计算一个正实数a的平方根可以根据牛顿迭代法实现:首先假设t=a,开 始循环,如果t=a/t(或小于容差),则t等于a的平方根,循环结束后返回结果;否则将t和a/t的平均 值赋给t,继续循环。
a=eval(input("输入一个正实数a:"))
t=a
while(t>a/t):
t=(t+a/t)/2
print("a的平方根是:%f"%t)
15.编程显示Fibonacci数列:1、1、2、3、5、8……的前20项。要求每行显示5项。
n=list(range(1,21))
n[0]=1
n[1]=1
counter=1 #计数器
for i in range(2,20):
n[i]=n[i-1]+n[i-2]
for i in range(20):
print(n[i],end=" ")
if(counter%5==0): #逢5进1
print()
counter=counter+1 #注意这条语句的位置和缩进
16. 如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。 例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数 请按照从小到大的顺序输出 1000 以内的水仙花数(3位数),并用"逗号"分隔输出结果
for i in range(100,1000):
if( ( (i//100)**3+(i//10%10)**3+(i%10)**3)==i ):
print("%d"%i,end=",")
print("b ")
17.输入某年某月某日,判断这一天是这一年的第几天?
20. 利用for循环求1-100中所有奇数的和以及所有偶数的和
ssum=0
osum=0
for i in range(1,101):
if(i%2==0):
osum=osum+i
else:
ssum=ssum+i
print("1~100的奇数和为:%d"%ssum)
print("1~100的偶数和为:%d"%osum)
21.编程求1-2+3-4+5 ...+99
sum=0
for i in range(1,100):
if(i%2==0):
sum-=i
else:
sum+=i
print("1-2+3-4+5...+99的和为%d"%sum)
22.输入一年份,判断该年份是否是闰年并输出结果
凡符合下面两个条件之一的年份是闰年
1)能被4整除但不能被100整除
2)能被400整除
输入样例:
2019
输出样例: 2
019 不是闰年
year=eval(input("请输入一个年份:"))
if( (year%4==0 and year%100!=0) or year%400==0 ):
print("%d是闰年"%year)
else:
print("%d不是闰年"%year)
23.一个小球从h米高度自由落下,每次落地后反跳回原高度的 2/3再落下,求它在第m次落地时,共经过多少 米?第m次落地后反弹多高?分两行输入h和m, 输出结果保留两位小数
输入样例:
100 20
输出样例:
小球第20次落地时,共经过了499.82米
小球第20次落地后反弹的高度是0.03米
h=eval(input("请输入高度h:"))
m=eval(input("请输入次数m:"))
sum=0
for i in range(m):
sum+=h
sum+=h*2/3
h=h*2/3
print("小球第%d次落地时,共经过了%.2f米"%(m,sum))
print("小球第%d次落地后反弹的高度是%.2f米"%(m,h))
25.一个班的身高已经量好了,请输出其中超过平均身高的那些身高.程序的输入为一行数据,以空格分 隔,每个数据都是一个正整数.程序要输出那些超过输入的身高的平均数的输入值,每个数后面有一个 空格,输出的顺序和输入的相同,平均身高要求保留小数点后两位
输入样例:
143 174 119 127 117 164 110 128
输出样例:
143 174 164
s=input("请输入班内每人身高:")
lst=s.split(" ") #按空格切割成整数列表
sum=0
avg=0
for i in lst:
sum+=eval(i)
avg=sum/(len(lst))
for i in lst:
if(eval(i))>avg:
print(i,end=" ");
26.输入一个正整数n(1≤n<7). 输出n行由大写字母A开始构成的三角形字符阵列,其中每个字母后面都有一个空格.
输入样例:
4
输出样例:
A B C D
E F G
H I
J
n=eval(input("输入一个正整数:"))
ch=65
counter=n
m=1
while(counter):
print(chr(ch),end=" ")
if(m==counter):
print()
counter=counter-1
m=0 #这里必须要m=0否则会无限循环
ch=ch+1
m=m+1
28.编写程序,读入一个字符串,去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出
输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz
s=input("请输入一个字符串:")
set1=set(s)
print(*sorted(list(set1))) #转换成列表后解包,*是
print("".join(sorted(list(set1)))) #另一种方法



