文章目录
一、数据类型题
选择题
填空题
附加题
二、分支和循环结构题
基础题
附加题
附加挑战题
三、祝大家周末愉快!作业题先就这么多吧,下周再附上。
大家好,我是小豪,首先祝大家周末愉快!
今天给大家带来的不是知识点,而是我们的基础题,就像是《黄冈密卷》一样。唔,小时候的记忆,说白也就是试卷。
此次的练习题我也整理成了markdown文档,有需要的可以去我的博客下载,另外pygame游戏我也设置了下载积分0,都是免费的(因为下载积分很难获取,算是给大家的福利吧!共同进步,加油!点个赞哦)
作业文本,点击下载
好了,话不多说,今天练习题涉及到的知识点也就是我文章前五天的基本内容,下面是习题以及解题思路:
一、数据类型题
选择题
1. print(100 - 25 * 3 % 4) 应该输出什么? (B)
# 根据运算符号的优先级,先算25*3%4==75%4==3
A. 1
B. 97
C. 25
D. 0
2. 下列哪种说法是错误的(A)。
A. 除字典类型外,所有标准对象均可以用于布尔测试
B. 空字符串的布尔值是False
C. 空列表对象的布尔值是False
D. 值为0的任何数字对象的布尔值是False
3. Python不支持的数据类型有(A)。
A. char
B. int
C. float
D. list
4. (多选)n = 6784,以下能够获取到7 的方法有(CD)。
`A. n / 1000 % 100 `# 6.784
`B. n % 1000 / 100`# 7.84
`C. n // 100 % 10`# 7
`D. n // 10 % 100 // 10`# 7
5. 运行以下程序,当从键盘上输入12,运行结果是(A)。
x = (input())
print(type(x))
# input功能:从控制台输入,默认类型是字符串
A.
B.
C. 出错
D. class 'dict'
6. 下列表达式的运算结果是( ) 。
a = 100
b = False
print(a * b > -1)
# 布尔值在数字中用法:0 即是 False ;除了0以外的数字,都是True
A. False
B. 1
C. 0
D.True
7. 下列四组数,依次为二进制、八进制和十六进制,符合要求的是(D)
# 进制表示是不会出现比进制高的数字的,
# 二进制不可能出现2,逢2进1;同理,8进制不可能出现8
# 十六进制表示方法是0,1,2,3...9,a,b,c,d,e;
# 所以别看D选项最后是19,他是符合十六进制的哦!
A. 12, 77, 10
B. 12, 80, 10
C. 11, 78, 19
D. 11, 77, 19
8. 二进制数加法运算的基本特点是“逢二进一”,即0+0=0,0+1=1,1+0=1,1+1=0并进位。运用这一基本法则和十进制运算的类似规律,得出二进制数加法运算1001+101的结果为(C)
# |1|0|1
# 1|0|0|1
#--------------
# = 1|1|1|0(逢2进1)
A. `1001`
B. `1010`
C. `1110`
D. `1101`
9. 十进制数53转换成二进制数是()
A. `100101`
B. `110101`
C. `100100`
D. `110100`
10. 下列关于print函数用法错误的是()
A. `print(100)`
B. `print(100, 200)`
C.` print(100, 'hello world!')`
D. `print(10 20)`
填空题
1. 在Python中表示空类型的是(None)。
2. 查看变量中数据的类型的函数名是(type)。
3. 已知`x = 3 == 3`,执行结束后,变量x的值为(True)。
4. 已知 `x = 3`,那么执行语句 `x += 6` 之后,x的值为(9)。
5. 表达式 `3 ** 2` 的值为(9),表达式 `3 * 2`的值为(6),表达式 `4 ** 0.5 `的值为(2)。
6. Python中如果要在程序中表示一个二进制说需要加前缀(0b或者0B),八进制数前缀(0o或者0O),十六进制数加前缀(0x或者0X)。
7. Python给我们分别提供了函数(bin)(oct)(hex)用于将其他进制的数转换成二进制、八进制和十六进制。
8. 语句a, b=10,20执⾏后,a的值是( 10 );语句a, a = 10, 20 执⾏后,a的值是( 20 )。
9. 在Python中,布尔类型有( 两个 )个值,分别是( True,False )。
### 编程题
1. 从控制台输入圆的半径,计算周长和面积
a = int(input('请输入半径:', ))
# input ==> 功能:从控制台输入,前面加上int ==> 意思就是把输入的内容转换为int整数类型
S = a ** 2 * 3.14
C = a * 2 * 3.14
print('圆的面积是:', S, '圆的周长是:', C)
2. 假设今天的上课时间为15678秒,编程计算今天上课时间是多少小时,多少分钟,多少秒;以‘XX时XX分XX秒’的方式表示出来。
例如: 时间 67 秒 —> 00 时 01 分 07 秒
time = 15678 # 秒数
h = 15678 // 3600 # 除以60得到分钟,再除以60得到小时(取整用整除//)
m = 15678 % 3600 // 60# % 取余,既然整除3600得到的是小时,那 % 3600 剩下的,再整出个60,就是分钟了。
s = 15678 % 3600 % 60# 同上理
print('%d时%d分%d秒' % (h, m, s))
# 这里用到了%d占位符,在print输出语句中,可以在前部分打印字符串,里面变量可以用%d先占位,然后在最后用%(变量名)来替换。
# 例如:print('一共有%d小时'%h)
# %d数字占位符,最后把变量h替换之前的%d,很简单吧!会用就行。%s字符串占位符,用法一样。
3.使用print输出语句 打印下列格式的数据。要求:一行一行的打印
*
***
*****
*******
# 方法一:
print(' *\n', ' ***\n', ' *****\n', '*******')
# 直接按照print输出语句来打印,每行是什么就打印什么
# 每行都是一定的空格+‘*’号组成,print语句打印完会自动换行。
# 方法二:
for a in range(4):
q = ' '
b = '*'
print(q * (4 - a), b * (2 * a + 1))
# 找规律,每行空格是越来越少,每行‘*’是越来越多;所以用总循环4减去递增的a,控制空格数量逐渐减少;用递增的a控制变多的‘*’号
当然了,解题的方法很多,思路懂了就好
4.使⽤一个print输出3个数据,3个数据在⼀行显示,并且用等号(=)隔开。
name = '小豪成长日记'
age = 25
like = '学习'
print(name, age, like, sep=' = ')
# 这里考的知识点就是在print输出语句中,sep 是用来连接输出的内容的,默认是空格,这里修改成‘=’号,就完成了
# print输出语句中,除了sep 还有end(结尾控制,默认换行)
附加题
### 预习:逻辑运算符 完成下面的需求
1. 下列表达式的值为True的是(B)。
`A. 3 > 2 > 2`
`B. 1 and 2 != 1`
`C. not(11 and 0!=1)`
`D. 10 < 20 and 10 < 5`
2.写出判断一个数是否能同时被3和7整除的条件语句, 并且打印对应的结果。
例如:输入 21 打印 True, 输入 9 打印 False。
num = int(input('请输入一个数:', ))
if num % 3 == 0 and num % 7 == 0:
print('True')
else:
print('False')
# 很简单的if...else语句
3.写出判断一个数是否能够被3或者7整除,但是不能同时被3或者7整除的条件语句, 并且打印对应的结果。
例如:输入 14 打印 True, 输入 4 打印 False, 输入 21 打印 False。
num = int(input('请输入一个数:', ))
if (num % 3 == 0 or num % 7 == 0) and not (num % 3 == 0 and num % 7 == 0):
print('True')
else:
print('False')
# 如果你不清楚怎么写的话,就按题目把每个条件语句的先后顺序,用圆括号扩起来,保证他的运算优先级。当然,上面代码还可以优化,具体自行操作。
4.输入年,写代码判断输入的年是否是闰年,并且打印对应的结果 。(是闰年的条件: 能被4整除但是不能被100整除或者能够被400整除的年)
例如:输入 2020 打印 True, 输入 2011 打印 False
num = int(input('请输入年份:', ))
if num % 4 == 0 and num % 100 != 0 or num % 400 == 0:
print('Ture')
else:
print('False')
5.定义两个变量保存一个人的身高和体重,编程实现判断这个人的身材是否正常!
公式: 体重(kg)/身高(m)的平方值 在18.5 ~ 24.9之间属于正常。
例如: 输入体重: 55, 输入身高:1.55, 输出: True
high = float(input('请输入您的身高:',))
weight = float(input('请输入您的体重:',))
a = high / weight** 2
if 18.5 <= a <= 24.9:
print('Ture')
else:
print('False')
# 这里**运算优先级最大,所以不需要加括号
二、分支和循环结构题
基础题
根据输入的百分制成绩打印及格 或者不及格,60分以下为不及格。 例如: 输入 120 提示 成绩不合法 输入 90 打印及格 输入 54 打印不及格 a = int(input('请输入您的成绩:'))
if 60 <= a <= 100:
print('及格')
elif 0 <= a <60:
print('不及格')
else:
print('成绩不合法')
根据输入的年龄打印成年或者未成年,18岁以下为未成年,如果年龄不在正常范围(0到150岁)内则打印这不是人!。
例如:输入-10 提示 这不是人 输入14 提示未成年 输入20 提示成年人
age = int(input('请输入您的年龄:'))
if not (0 <= age <= 150): # 先设置大范围,0~150
print('这不是人!')
elif age < 18: # 其次再写出小于18的
print('未成年')
elif age >= 18: # 最后打印出大于等于18的
print('已成年')
依次输入两个整数,如果两个数相减的结果为奇数则输出该结果,否则输出提示信息结果不是奇数。
a = int(input('请输入一个整数:'))
b = int(input('请再输入一个整数:'))
c = a - b # 设置第三个变量,用于代替两个整数的差
if c % 2 == 1: # %2取余数为1,则为基数,否则为偶数。
print(c)
else:
print('结果不是基数')
使用for循环输出 0到100内所有的奇数。
方法一:
# 从1开始,步长+2,
for i in range(1, 101, 2):
print(i)
方法二:
# 遍历,取余2为1,则是基数。for循环顾前不顾后,所以100以内写101
for i in range(1, 101):
if i % 2 == 1:
print(i)
5.使用while循环输出0到100内所有的偶数。
方法一:
# 设置从0开始,每次打印值+2
a = 0
while a < 100:
print(a)
a += 2
方法二:
# 同上题一样
求1到100以内能被7或者3整除,但是不能同时被3和7整除的数的个数
a = 0 #设置一个变量(用来计算个数的)
for i in range(101): #(先写出1~100的循环)
if (i % 7 == 0 or i % 3 == 0) and (i % 21 != 0): #(加入条件)
a += 1 # 满足条件,a+1;计算 i 打印了多少次
print(a) # 取消缩进,输出最后打印出a的值
3000米长的绳子, 每天减一半, 问多少天后这个绳子会小于5米 【不考虑小数】
# 在不知道循环次数的时候,记得用while循环
a = 3000
b = 0 # 设置个变量,用来计算天数。
while True: # 无限循环
a /= 2 # a = a / 2 ,每天减一半
b += 1 # b = b + 1 ,减一次,就加一天
if a < 5:
break # 当总长度a小于5米,停止循环。
print(b) # 取消缩进,打印b最后输出的数字,即天数。
在0到99之间随机选择一个数赋值给x, 在0到199之间随机选择一个数赋值给y,如果x 大于 y, 则输出x的值, 如果x 小于 y则输出y的值, 否则输出两者相等
import random # 导入 随机库
x = int(random.randint(0, 99)) # 赋值x 随机生成一个0~99的整数
y = int(random.randint(0, 199)) # 赋值y 随机生成一个0~199的整数
if x > y:
print(x)
elif x < y:
print(y)
else:
print('两者相等')
9.输入年, 输入月,获取这个月的天数
温馨提示:
1 3 5 7 8 10 12 月的天数是31
4 6 9 11 月的天数是30
2月份的话 闰年是29天 平年是28天
闰年的判断条件:
a. 能被4整除 但是不能被100整除
b. 能被400整除
其中a 和 b之间满足其中一个即可
a = int(input('请输入一个年份:'))
b = int(input('请输入一个月份:'))
if b in (1, 3, 5, 7, 8, 10, 12):
# 例如:a in b ==> 判断a是否在b当中;在这里判断b是否是大月31天
print('这个月有31天')
elif b in (4, 6, 9, 11):
print('这个月有30天')
elif b == 2 and (a % 4 == 0 and not a % 100 == 0 or a % 400) == 0:
print('这个月有29天')
else:
print('这个月有28天')
10.输出1到100中能被3整除和个位为3的数
for i in range(101):
if i % 3 == 0 or i % 10 == 3:
print(i)
附加题
统计100以内个位数是2并且能够被3整除的数的个数。
a = 0
for i in range(101):
if i % 10 == 2 and i % 3 == 0:
a += 1
print(a)
输入任意一个正整数,求它是几位数。
注意:不允许使用判断字符串长度的方式来求解。
# 考虑到不能用字符串的len来取长度, 那就只好用数学运算了
# 想象某个数,除以10,他就会少点,所以我们用了循环除以10,来确定他是几位数
a = int(input('请输入一个数:'))
b = 1 # 计算位数
if a < 10: # 先避免这种一位数的情况
print(b)
else:
while True: # 开始循环
a /= 10 # 拿到这个数,除以10
b += 1 # 除一次,计算一次位数
if a < 10: # 除到这个数小于10了,停止
break
print(b) # 最后打印这个位数
打印所有的水仙花数。
说明:水仙花数是一个三位数,其各位数字⽴方和等于该数本身。
例如:153是⽔仙花数,因为 153 = 1³ + 5³ + 3³。
for a in range(100, 1000): # 是个三位数
b = a % 10 # 取个位数
c = a // 10 % 10 # 取十位数
d = a // 100 # 取百位数
if b ** 3 + c ** 3 + d ** 3 == a: # 判断条件各数字立方和等于该本身
print(a)
写一个程序可以不断的输入数字,如果输入的数字是0,打印程序结束后结束该程序。
运行效果:
请输入数字: 9
请输入数字: 762
请输入数字: 18
请输入数字: 0
程序结束
# 解题思路:不断输入数字,那么肯定用循环,而且要把输入写在循环哪,这样才可以一直输入判断。
# 写完死循环后,要把出口加进去,也就是我们的条件,满足条件后,break。停止循环。
while 1:
a = int(input('请输入一个数:'))
if a == 0:
print('程序结束')
break
输出乘法口诀表(九九表)。
提示:用两个循环分别控制行和列的输出,共9行,第1行有1列,第2行有两2列,……。
格式为:
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
…
1 * 9 = 9 2 * 9 = 18 … 9 * 9 = 81
解题思路:
# 一个控制行数,一个控制列数,print输出语句后面刚才讲了,除了有sep(设置输出变量之间的连接方式的),还有end(控制输出完最后的指令,默认换行,这里改成\t
# \t 是python中的制表符,t = tab
# 制表符(也叫制表位):是在不使用表格的情况下在垂直方向按列对齐文本。
for a in range(1, 10):
for b in range(1, a + 1):
print('%d*%d=%d' % (a, b, a * b), end='\t')
print()
附加挑战题
统计101~200中素数的个数,并且输出所有的素数。(素数又叫质数,就是只能被1和它本身整除的数)
for i in range(101, 201): # 取除数的值
for a in range(2, i-1): # 取被除数的值
if i % a == 0: # 相除取余数,等于0说明整除,
break # 能整除的,全部停止循环
else:
print(i)
求斐波那契数列中第n个数的值,n是正整数。n值由控制台输入
说明:斐波那契数列是这样的一个数列:1、1、2、3、5、8、13、21、34、… ,第一个数和第二个数是1,从第三个数开始每个元素是前两个元素相加的和。
a = int(input('想求斐波那契数列第几位的值?请输入:'))
b = 0 # 第0位数
c = 1 # 第一位数
d = 1 # 第二位数
for x in range(2, a + 1): # 用循环次数来控制相加的次数
# 斐波那契数列是这样的一个数列:1、1、2、3、5、8、13、21、34、..
# 第一个数和第二个数是1,从第三个数开始每个元素是前两个元素相加的和。
d = b + c # 第二位等于第0位+第一位
b = c # 第0位往右移动一位
c = d # 第一位往右移动一位
print('第%d位数的值是%d' % (a, d))
一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
a = 884813000 # 8848.13m = 8848130mm * 100 = 884813000mm
b = 8 # 0.08mm * 100 = 8mm
c = 0
while True:
b *= 2
c += 1
if b > a:
break
print(c)
4.猜字游戏
在1到1000中随机生成一个数赋值给sys_num
控制台输入一个整数 赋值给 user_num
判断user_num与sys_num的关系
如果 user_num 大于 sys_num 提示 猜大了
如果 user_num 小于 sys_num 提示 猜小了
如果两者相等 提示 恭喜你 中奖啦
要求: 只要没中奖 就需要一直猜
import random
sys_num = int(random.randint(0, 1000))
while 1:
user_num = int(input('请输入一个整数:'))
if user_num > sys_num:
print('猜大了')
elif user_num < sys_num:
print('猜小了')
elif user_num == sys_num:
print('恭喜你中奖了')
break
5."百马百担"问题:一匹大马能驮3担货,一匹中马能驮2担货,两匹小马能驮1担货,如果用一百匹马驮一百担货,问有大、中、小马各几匹?
for a in range(100): # 这里可以取值34,因为大马最多33匹
for b in range(100): # 同理可以取值51
for c in range(100): #上面这么取值也是优化之一,让程序少计算一部分。
if (a + b + c) == 100 and (3 * a + 2 * b + 1 / 2 * c) == 100:
print('大马%d匹,中马%d匹,小马%d匹' % (a, b, c))
三、祝大家周末愉快!作业题先就这么多吧,下周再附上。
今天就到这里,明天见~