【实验目标】 1)熟练掌握Python选择结构与循环结构语法,理解缩进的作用。
2)熟练运用for循环和while循环,理解带有else子句的循环语句执行流程。
3)理解break语句和continue语句在循环中的作用。 4)理解并能够熟练设计条件表达式。 【学习重点】
and不一定是布尔值、for和while中else用法。 【实验内容】
“”“1、(选择,教材习题4.2)编写程序,运行后用户输入4位整数作为年份,判断其是否为闰年。
提示:如果年份能被400整除,则为闰年;如果年份能被4整除但不能被100整除也为闰年。”""
"""x = input('请输入一个4位数年份:')
x = int(x)
if x%400==0 or (x%4==0 and not x%100==0):
print('YES')
else:
print('NO')""
“”"“2、(循环,教材习题4.4)编写程序,生成一个包含50个随机整数的列表,然后删除其中所有奇数。提示:从后向前删除。 “””
“”"
import random
x = [random.randint(0,100) for i in range(50)]
print(x)
for i in range(len(x))[::-1]: #切片
if x[i]%2==1:
del x[i]
print(x)
“”"
“”“3、(教材习题4.5)编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。
提示:使用切片
“””
“”"
import random
x = [random.randint(0,100) for i in range(20)]
print(x)
x[::2] = sorted(x[::2],reverse=True)
print(x)
“”"
“”“编写程序,至少使用2种不同的方法计算100以内所有奇数的和。
“””
“”"
print(sum([i for i in range(1,100) if i%2==1]))
print(sum(range(1,100)[::2]))
“”"
“”"5、(教材习题4.9)编写程序,实现分段函数计算,如下表所示。
x y
x<0 0
0<=x<5 x
5<=x<10 3x-5
10<=x<20 0.5x-2
20<=x 0
“”"
“”"
x = input('please input x:')
x = eval(x)
if 0<=x<5:
print(x)
elif 5<=x<10:
print(3*x-5)
elif 10<=x<20:
print(0.5*x-2)
else:
print(0)
“”""""
1、(条件+循环,教材习题4.6)编写程序,用户从键盘输入小于1000的整数,对其进行因式分解。
例如,10=2×5,60=2×2×3×5。
“”"
“”"
x = input('请输入一个小于1000的整数:')
x = eval(x)
t = x
i = 2
result = []
while True:
if t==1:
break
if t%i==0:
result.append(i)
t=t//i
else:
i+=1
print(x,'=','*'.join(map(str,result)))
“”"
“”"
2、10的阶乘(循环crr118)
“”"
“”"
fac = 1
for i in range(1,3):
fac = fac*i
print("1*2*3..*10=",fac)
“”"
“”"
3、计算糖果总数(循环 crr127)
编写程序,计算糖果总数。假设有一盒糖果,按照如下方式从中取糖果: 1个1个地取,正好取完。 2个2个地取,
还剩1个。 3个3个地取,正好取完。 4个4个地取
,还剩1个。 5个5个地取,还差1个。 6个6个地取,还剩3个。 7个7个地取,正好取完。 8个8个地取
,还剩1个。 9个9个地取,正好取完。 请问:这个盒子里一共有多少个糖果?
“”"
“”"
n = 1
while 1:
if n%2==1 and n%3==0 and n%4==1 and n%5==4 and n%6==3 and n%7==0 and n%8==1 and n%9==0:
print("这里有{} 糖果 在盒子里.".format(n))
break
else:
n=n+1
“”"
“”"
编写程序,计算“五天向上”和“两天向下”两种情况下的武力值。假设一年有365天,
郭大侠第一天的武力值为1。如果郭大侠每天勤于练功,每天武力值相比前一天会增加1%;
如果郭大侠每天不练功,每天武力值相比前一天会减少1%。郭大侠制订了一年的练功计划:
从第一天开始,前5天每天都练功,然后休息2天;接来下又练功5天,休息2天;
如此往复,请计算一年后,郭大侠的最终武力值(结果保留2位小数)。
“”"
“”"
star = 1
for i in range(1,366):
if i%6==0 or i%7==0:
star = star*(1-0.01)
else:
star = star*(1+0.01)
print("一年后,功力={:.2f}".format(star))
“”"
“”"
5、谁是小偷 (crr62)
警察抓了A、B、C、D四个偷窃嫌疑犯,其中只有一个人是真正的小偷,审问记录如下:
A说:“我不是小偷。”
B说:“C是小偷。”
C说:“小偷肯定是D。”
D说:“C在冤枉人。”
已知四个人中有三个人说的是真话,一个人说的是假话。请问到底谁是小偷?
“”"
“”"
l = ['A','B','C','D']
for x in l:
if (x!='A') + (x=='C') + (x=='D') + (x!='D') == 3:
print("小偷是:",x)
break
“”"
“”"
6、列表二分查找(crr65)
二分查找是一个经典的算法,用来在有序的一组数中快速找到待查找的数。所谓“二分”,
就是每次操作都将查找范围一分为二,即将查找区间缩小一半,直到找到或查询了所有区间都没有找
到要查找的数据为止。利用二分查找法,查找[34, 64, 67, 72, 73, 82, 83, 85, 87, 88, 90, 91,
96, 98]中指定数字的索引号。
“”"
ls = [34, 64, 67, 72, 73, 82, 83, 85, 87, 88, 90, 91, 96, 98]
x = int(input("请输入待查找的数:"))
low = 0
high = len(ls)-1
while low<=high:
mid = (low+high)//2
if ls[mid]<x:
low = mid +1
elif ls[mid]>x:
high = mid-1
else:
print("The number {} is found,and the index is {}!".format(x,mid));
break;
else:
print("There is no{} in the list.".format(x))