练习题
1.有多少个三位数字能被17整除?编写程序,将这些数字显示出来。
for i in range(100,1000):
if i%17==0:
print(i,end="\t")
2.连续整数之和:
(a)写一个程序,提示输入整数X,然后计算从1开始,连续X个整数之和。也就是说,如果X=5、要计算1+2+3+4+5=15。
n=int(input("输入一个整数:"))
sum=0
for i in range(1,n+1):
sum+=i
print(sum)
(b)改写程序,使用循环嵌套的方式计算连续整数和。例如,如果输入5,输出连续5个数字的和:
1 =1
1+2 =3
1+2+3 =6
1+2+3+4 =10
1+2+3+4+5 =15
n=int(input("输入一个整数:"))
for i in range(1,n+1):
sum=0
for j in range(1,i):
sum+=j
print(sum)
(e)再次修改程序,如果得到的和能被操作数的数目(X)所整除,显示和的值。例如,和1+2+3+4+5-15,有5个操作数及一个和15,和15能被5整除,因此和显示出来。(你能找出其中的模式吗?)
n=int(input("输入一个整数:"))
for i in range(1,n+1):
sum=0
for j in range(1,i+1):
sum+=j
if sum%i==0:
print(sum)
3、在这个练习中,将纳特转换为锡可,锡可转换为加仑(哈利波特小说中出现的货币)。进行计算,显示非零值。也就是说,如果没有足够的纳特能转换到锡可,那么“0锡可”不应显示出来。(1加仑=17锡可,1锡可=29纳特)
nate=int(input("输入纳特数:"))
if nate>0:
xike=nate/29
jialun=xike/17
print(nate,"纳特是",xike,"锡可,是",jialun,"加仑")
4、(完全数)。这一章中有一个程序检查数字是否为完全数。如果想检查大量数字(大范围内的数a字)是否是完全数,那么所给出的程序并不是最好的。该如何改进?例如,只输出完全数,但同时对丰沛数和不足数进行计数?是否需要检查2~theNum-1的每一个数字?
5.要求计算BMI。现在添加程序功能,显示BMI对应的CDC标准体重状况类别:
BMI | 体重状况 |
---|---|
低于 18.5 | 偏轻 |
18.5 -24.9 | 正常 |
25.0-29.9 | 超重 |
30.0及以上 | 过胖 |
height = float(input("输入身高,米"))
weight = float(input("输入体重,千克"))
bmi = weight / (height ** 2)
if bmi<18.5:
print("体重偏轻")
elif 18.5<=bmi<=24.9:
print("体重正常")
elif 25.0<=bmi<=29.9:
print("体重超重")
else:
print("体重过胖")
6.写一个程序,提示输入一个整数,并显示此整数。如果输人的不是整数,程序将一直提示要求输入整数。下面是会话示例:
输入一个整数:abc
错误 :再试一次,输入一个整数:4a
错误 :再试一次,输入一个整数:2.5
错误 :再试一次,输入一个整数:123
这个整数是:123
提示:isdigit方法会有用。
a=input("输入一个整数")
while not a.isdigit():
a=input("错误:再试一次,输入一个整数:")
else:
print("这个整数是:",a)
7、编写一个程序,生成下面的算术例子。提示:
1)分治:哪些较为简单的问题需要解决?
2)考虑使用字符串来构建数字,然后再转换。
3)range 迭代器可能会有所帮助。
【分析】
第一个算术:
循环9次,第一个数每次末尾加多一个数。将数字转换为字符,然后连接字符串,再转为数字,例如str(1)+str(2)=“12”,再int(“12”)。
第二个数字都是8,第三个数字是依次加1
a=""
for i in range(1,10):
a=a+str(i)
b=8
print(int(a),"*",b,"+",i,"=",int(a)*b+i)
其他的算是以此类推。
8.写一个程序,检査数N是否为素数。简单的方法是检查2~N之间所有的数字。但实际上有一些数不需要检查。例如,大于根号N的数字就不需要进行检查。写一个程序,检查素数,注意避免那些不必要的检查。
import math
N = int(input("输入一个整数:"))
for i in range(2,int(math.sqrt(N)+1)):
if N%i==0:
print("不是素数")
break
else:
print("是素数")
12.写一个for循环,当输入“alphabetical”时,输出“pbil”
【分析】
结果分别是第3、6、9、12个字母。用for循环,从1循环到字符串长度数时,循环变量是3的倍数的就放到一起。
s=input("输入一个字符串")
r=""
n=1
for i in s:
if n%3==0:
r+=i
n+=1
print(r)
13.写一个简短的程序,完成以下功能:
- 提示用户输入数字。
- 输出这个数是否为完全数。
- 如果不是1个完全数,提示用户输入下一个数。
flag=0 # 作为标志,是完全数就改为1
while flag==0:
sum=0
n=int(input("输入一个整数"))
for i in range(1,n):
if n%i==0:
sum+=i
if sum==n:
print("这是完全数")
flag=1
else:
print("这不是完全数")
14.解释“is”和“ = = ",之间的差异。举一个例子(与本章中使用的不同),对“is”返回假,对“ = = ”返回真。
【参考答案】
“= =” 是一个比较运算符,用来比较两个值是否相等。
“is” 是用来检查两个变量是否指向存储在内存中的同一对象。
a = 7
b=7
那么a= =7,结果就是True
但a is b的结果就是Flase.
因为虽然 a 和 b 有相同的值,但是它们是两个不同的变量,它们分别指向内存中不同的对象。
15、这是使用while 循环的1个例子。其中有1个错误,你能找到 while 循环中的错误吗?仔细思考这个whie循环,找出是什么地方出错。参考本章中的流程图,应该会有所帮助。使用Python检查你的想法是否正确!
s= “that car was really fast”
i=1
while i>0:
for c in s :
if c ==“t”:
print (“found a it’in sentence”)
else :
print (“maybe the next character?”)
【参考答案】
在循环中没有对i的值进行更改,这个循环永不停止
16.如果 while循环是由“while True:”控制,它会永远循环下去,如何控制循环,使得它会停止?能给出一段简单的Python代码吗?
【参考答案】
可以使用break跳出循环
n=5
a=1
while True:
if a==n:
break
a+=1
17.编写程序,提示输入大于2的正数(检查是否符合这种条件),然后反复求该数字的平方根,直到平方根小于2。显示每次得到的平方根和已经完成的操作次数。例如:
输入大于2的正数:20
1:4.472
2:2.115
3:1.454
此外,请查阅字符串格式化(见4.41节)的内容,输出时采用3位小数的格式。
【参考答案】
import math
count = 0
while True:
number = input("输入大于2的正数: ")
if int(number) > 2 and number.isdigit():
while int(number) >= 2:
count += 1
number = math.sqrt(int(number))
print(f"{count}:{number:.3f}")
19.要了解一个程序试图完成什么工作,按照控制语句分析是必不可少的。在下面的例子中,当x=4时会发生什么情况?
while True:
for x in range (6):
Y = 2*x+1
print y
if y >9:
break
(a)程序跳出 while 循环,停止运行。
(b)程序跳出for循环,但while循环控制条件仍然为真,进入无限循环。
©程序不会中断,只是继续for循环。
【参考答案】
x=4时,Y=9,跳出循环,停止运行,选(a)
20.在下表空白处填上Tre或者False
p | q | (not p)or q | (p and q) or q | (p or q) and p | (p or q)and(p and q) |
---|---|---|---|---|---|
True | True | True | True | True | True |
True | Flase | Flase | Flase | True | Flase |
Flase | True | True | True | Flase | Flase |
Flase | Flase | True | Flase | Flase | Flase |
21.对于Python函数range(a,b),判定下面的陈述为 True 或False.
- 值“a”在范围内。
- 值“b”在范围内。
【参考答案】
range的范围包括了起始值,不包括终止值。
第一个是True,第二个Flase
22.什么是迭代器?举两个迭代器的例子。
【参考答案】
迭代器是一个在Python中用于遍历序列(比如列表、元组、字典、集合、字符串)或集合对象(比如函数返回的对象、文件对象等)中元素的编程工具。它允许你按顺序逐个访问集合中的所有项目,而不必一次性将所有元素加载到内存中。
示例:
列表(List)的迭代器:在Python中,你可以使用iter()函数来创建列表的迭代器。例如:my_list = [1, 2, 3, 4, 5],然后my_iter = iter(my_list)。
字典(Dictionary)的迭代器:同样,你可以迭代字典中的键、值或项。例如,my_dict = {‘a’: 1, ‘b’: 2},使用iter(my_dict)、iter(my_dict.keys())或iter(my_dict.values())。
23、用自己的语言,描述循环中的continue和break语。
【参考答案】
continue英文单词是继续的意思,在循环中,能结束本次循环,继续下一轮循环。
break 是打破的意思。在循环中,能跳出循环结构。
25、寻找这样的两位数,使得将它进行平方后,将产生1个三位数字,而这个3位数字最右边的两个数字与原来的2位数字相同。也就是说,对于形如AB的每一个数字,对于CAB*AB=CAB成立。
# 遍历所有两位数
for x in range(10, 100):
# 计算平方
square = x ** 2
# 检查平方是否为三位数
if 100 <= square < 1000:
# 检查平方的最后两位是否等于 x
if square % 100 == x:
print(f"找到的两位数: {x}, 其平方: {square}")
编程项目
1、发明国际象棋的价值
关于国际象棋的发明者,有着一个广为流传的神话。当地统治者非常高兴,要给国际象棋的发明者大量的黄金作为奖励。发明者提出了另–种奖励方案,他希望得到棋盘上堆放的麦粒,但是需要按以下的方式来摆放:在棋盘的第一个正方形格子的4个角上,各放上1颗麦粒;第二个正方形格子的4个角上各放上2颗麦粒;第3格的各个角上放4颗麦粒;第4格的各个角上放8颗麦粒,以此类推,每次粮食的数量增加一倍。统治者以为这样对他更有利,就接受了发明者的提议。棋盘上共有64个方格。
编1个程序计算以下内容:
(a)统治者要向发明者奖励麦粒的总数是多少?
(b)1颗麦粒重量约50毫克。小麦共重多少?
©选择1个地区(州、国家等),并确定将上述重量的小麦覆盖在该区域上,小麦的深度将是多少?提示输人区域的面积,然后输出的小麦的深度和所使用的单位。
2.折纸有多厚
从报纸中抽出一张,对折,再对折,继续对折。可以把它折叠30次吗?假设可以(你可能无法把它折叠8次以上)折叠30次,请问厚度为多少?假设纸的厚度是1/200厘米。编程序来解决这个难题。提示输人折叠次数,输出厚度,以米为单位。
3、海龟绘图:多边形
提示输入多边形的边数。利用正多边形的内角计算公式((边数-2)x180°)/边数)绘制多边形。可选项:提示输入1种颜色名称,用这种颜色填充多边形内部。