1.1 编写程序,生成一个包含50个随机整数的列表,然后删除其中的奇数。
说明:从后向前删。
#coding=utf-8
import random
number_list = []
for i in range(0,50):
number_list.append(random.randint(0,65535))
number_list2 = []
for num in number_list:
if num%2 == 0:
number_list2.append(num)
print("原数列:")
print(number_list)
print("新数列:")
print(number_list2)
1.2 编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行升序排列,奇数下标的元素保持不变。
说明:使用切片。
#coding=utf-8
import random
number_list = []
for i in range(0,20):
number_list.append(random.randint(0,100))
number_list2 = []
for num in number_list:
if num % 2 == 0:
number_list2.append(num)
number_list2.sort();
for num in number_list:
if num % 2 != 0:
number_list2.append(num)
print("原数列:")
print(number_list)
print("新数列:")
print(number_list2)
1.3 编写程序,用户从键盘输入效于1000的整数,对其进行因式分解。
说明:例如,10=25,60=2235。
#coding=utf-8
def diff(number):
number_list = []
temp_num = 0;
for i in range(2,(int)(number/2)-1):
if(number%i == 0):
temp_num = i
number_list.append(i)
break
if temp_num!=0 and number%temp_num == 0:
number_list.append(number/temp_num)
return number_list
number = input("请输入一个数字:")
number_list = diff((int)(number))
flag = True
while True:
flag = False
for num in number_list:
temp_list = diff(num)
if temp_list != []:
number_list.remove(num)
number_list.append(temp_list[0])
number_list.append(temp_list[1])
flag = True
if flag == False:
break
print("因式分解结果:")
for i in number_list:
if(i == number_list[len(number_list)-1]):
print(i,end="")
else:
print(str(i),end="*")
print("")
1.4 编写程序,计算100以内所有奇数的和。
要求:至少使用两种不同的方式。
#coding=utf-8
#方法1
sum = 0
for i in range(0,100):
if i%2 != 0:
sum = sum + i
print("100以内奇数的值为:"+str(sum))
#方法2
def sum(sum_num,num,limit_number):
if num>=limit_number:
return sum_num;
if num%2!=0:
sum_num = sum_num + num
return sum(sum_num,num+1,limit_number)
print("100以内的奇数的值为:"+str(sum(0,0,100)))
1.5 编写程序,输出所有由1、2、3、4这四个数字组成的素数,并且在每个素数中每个数字只使用一次。
#coding=utf-8
num_list = [1,2,3,4]
su_number_list = []
for num1 in num_list:
for num2 in num_list:
for num3 in num_list:
for num4 in num_list:
flag = True
number = num1*1000 + num2* 100 + num3 * 10 + num4
for i in range(2,(int)(number/2)+1):
if number%i == 0:
flag = False
if flag == True:
su_number_list.append(number)
print("素数列表:")
print(su_number_list)
1.6 编写程序,用户从键盘输入位数n,输出所有n位的“水仙花数”。
要求:至少给出3种不同n的运行结果。
说明:所谓n位水仙花数是指1个n位的十进制数,其各位数字的n次方之和等于该数本身。例如:153是水仙花数,因为153 = 13 + 53 + 33。
#coding=utf-8
def shuixian(number,n):
sum = 0
for item in str(number):
sum = sum + (int)(item)**n
if(sum == number):
print(number)
n = (int)(input("请输入一个数字的位数N:"))
number_list = []
for i in range((int)("1"+"0"*(n-1)),(int)("9"*n)+1):
number_list.append(i)
for item in number_list:
shuixian(item,n)
1.7 编写程序,根据身高和体重计算BMI值,同时输出国际和国内BMI指标建议值所确定的指标分类信息。
#coding=utf-8
def calc_bmi(height,weight):
return 10000*weight/(height**2)
def adjust_china(bmi):
print("使用中国BMI指数进行判断")
if bmi < 18.5:
print("偏瘦")
elif bmi < 24:
print("正常")
elif bmi < 28:
print("偏胖")
else:
print("肥胖")
def adjust_global(bmi):
print("使用国际BMI指数进行判断")
if bmi < 18.5:
print("偏瘦")
elif bmi < 25:
print("正常")
elif bmi < 30:
print("偏胖")
else:
print("肥胖")
height = input("请输入身高:")
weight = input("请输入体重:")
bmi = calc_bmi((int)(height),(int)(weight))
adjust_china(bmi)
adjust_global(bmi)
要求:给出身高和体重值,并计算BMI值,根据其指标分类找到合适的类别,最后打印出分类信息。
1.8 编写程序,计算12-22+32-42+…+972-982+992。
#coding=utf-8
sum = 0
for i in range(1,100):
if i % 2 == 0:
sum = sum - i**2
else:
sum = sum + i**2
print("结果为:"+str(sum))
1.9 编写程序,从键盘输入两个正整数m和n,求其最大公约数和最小公倍数。
说明:在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回a较小的数即为最大公约数。最小公倍数为两数之积除以最大公约数。
m = int(input("请输入m的值:"))
n = int(input("请输入n的值:"))
if m < n:
t = m
m = n
n = t
if(m % n == 0):
x = n
y = m
else:
for i in range(1, n):
if m%i==0 and n%i==0:
x = i
y = m
while True:
if y%m == y%n ==0:
break
y += 1
print("最大公因数为:{0},最小公倍数为:{1}".format(int(x),int(y)))
1.10 编写程序,实现猜数游戏。在程序中预设一个0~99之间的整数,让用户通过键盘输入所猜的数字,如果大于预设的数字,显示“太大了,请继续猜!”;如果小于预设的数字,显示“太小了,请继续猜!”;如此循环,直至猜中该数字,显示“预测N次,猜中了!”,其中N是用户输入字数的次数。
说明:例如,假定预设数字为51,用户输入67,打印出信息“太大了,请继续猜!”;获取用户键盘输入请查询eval()函数和input()函数的用法。
#coding=utf-8
import random
real_number = random.randint(0,99)
number = int(input("请输入您认为正确的数字:"))
while int(number)!=int(real_number):
if((int)(number) < int(real_number)):
print("猜错了,太小了")
else:
print("猜错了,太大了")
number = input("请输入您认为正确的数字:")
print("猜对了,正确答案是:"+str(real_number))
2、思考题
2.1 编写程序,模拟决赛现场最终成绩计算过程。首先输入大于2的整数作为评委人数,然后依次输入每个评委打分,要求每个分数都介于[0, 100],输入完所有评委打分情况之后,去掉一个最高分和一个最低分,剩余分数的平均分即为该选手的最终得分。
说明:使用列表存储每个评委的打分,并充分利用列表方法和内置函数。
#coding=utf-8
lis_score = []
n = int(input("输入评委人数:"))
while n < 2:
print("评委人数需大于2")
n = int(input("输入评委人数:"))
def check_score(score):
if score >= 0 and score <= 100:
return score
else:
print("分数不合法,重新输入!")
score = int(input("输入分数:"))
score = check_score(score)
score_list = []
for i in range(0,n):
temp_score = input("请输入第"+str(i)+"个教练给学生打的成绩:")
score_list.append(int(temp_score))
sum_total_score = 0
max_score = score_list[0]
min_score = score_list[0]
for item_score in score_list:
if item_score > max_score:
max_score = item_score
if item_score < min_score:
min_score = item_score
sum_total_score = sum_total_score + item_score
print("总成绩:"+str(sum_total_score))
print("最大值:"+str(max_score))
print("最小值:"+str(min_score))
try:
avg_score = str(int(sum_total_score-max_score-min_score)/int(len(score_list)-2))
print("平均分:"+avg_score)
except:
print("平均分:0")
2.2 编写程序,模拟蒙特·卡罗计算圆周率近似值的方法,输入掷飞镖的次数,然后输出圆周率近似值。
说明:1)蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计算问题。假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x,y)必然在木板上(更多的时候是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以4,这个数字会无限逼近圆周率的值;2)采用random库中的方法生成随机数。
#coding=utf-8
import random,math
s = 1 * 1
c = int(input())
hit = c
hits = 0
while hit != 0 :
hit = hit - 1
x = random.random()
y = random.random()
z = math.sqrt(x**2+y**2)
if z <= 1:
hits = hits + 1
PI = 4 * hits/c
print(PI)