Python 基础语法之三(练习)
2019-07-06 本文已影响0人
Alexander_Zz
一、基础练习
1.1 给定一个不超过 5 位的正整数,判断该数的位数,依次打印出个位、十位、百位、千位、万位的数字
- 判断位数,折半思想
num = int(input('>>>'))
if num >= 1000:
if num > 9999:
print ('5')
else:
print ('4')
elif num >= 100:
print ('3')
elif unm >=10:
print ('2')
else:
print ('1')
- 参考答案
num = int(input('>>>'))
if num >= 1000:
if num > 9999:
digit = 5
else:
digit = 4
elif num >= 100:
digit = 3
elif unm >=10:
digit = 2
else:
digit = 1
print ('digit is',digit)
var = num
for i in range(digit):
n = var // 10
print (var - n*10)
var = n
参考答案.png
1.2 打印一个边长为 n 的正方形
- 参考答案
var = int(input ('>>>'))
for i in range(var):
if i == 0 or i == var-1:
print ('@'*var)
else:
print ('@'+' '*(var-2)+'@')
参考答案.png
1.3 求 100 内所有奇数的和
- 参考答案
sum = 0
for i in range(100):
if i & 1:
sum += i # 与 sum = sum + i 相同
else:
continue
else:
print (sum)
奇数和.png
- 偶数和
sum = 0
for i in range(101):
if i & 1:
continue
else:
sum += i
else:
print (sum)
偶数和.png
- 效率版本
减少计算,提升效率
sum = 0
for i in range(1,100,2):
sum += i
else:
print (sum)
1.4 判断学生成绩,成绩等级 A - E。其中,90 分以上为 'A',80 - 89 分为 'B',70 - 79 分为 'C',60 - 69 分为 'D',60 分以下为 'E'
- 参考答案
score = int(input('>>>'))
if score > 69:
if score < 80:
print ('C')
elif score < 90:
print ('B')
else:
print ('A')
else:
if score < 60:
print ('E')
else:
print ('D')
参考答案.png
1.5 求 1 到 5 阶乘之和
- 参考答案
n = int(input('>>>'))
c = 1
x = 0
for i in range(1,n+1):
c *= i
x += c
else:
print (x)
参考答案.png
1.6 给一个数,判断它是否是素数(质数)
- 参考答案
质数:一个大于1的自然数只能被1和它本身整除
x = int(input())
for i in range(2,x):
if x % i == 0:
print ('No')
break
else:
print ('Yes')
参考答案.png
1.7 打印九九乘法表
- 参考答案
for i in range(1,10):
for j in range(1,i+1):
print (j,'*',i,'=',i*j,end='\t')
else:
print ()
- 打印乘法表上半部分
for i in range(1,10):
print(' '*7*(i-1),end='')
for j in range(i,10):
product = i*j
if product < 10:
end = ' '
else:
end = ' '
print(str(i)+'*'+str(j)+'='+str(i*j),end=end)
print()
九九乘法表.png
乘法表上半部分.png
1.8 输入两个数,比较大小后,从小到大升序打印
- 参考答案
x = int (input ('>>>'))
y = int (input ('>>>'))
if x >= y:
print (y,x)
else:
print (x,y)
- 真值 if 条件 else 假值
Python 没有三目运算符
x = input ('1st: ')
y = input ('2nd: ')
print (y,x) if x>y else print (x,y)
参考答案.png
真值 if 条件 else 假值.png
1.9 给一个半径,求圆的面积和周长。(π = 3.14)
- 参考答案
radius = int (input ('>>>')) # radius,半径
pi = float (3.14) # pi,圆周率
print ('perimeter is',radius * 2 * pi) # perimeter,周长
print ('area is',pi * radius ** 2) # area,面积
参考答案.png
1.10 输入 n 个数,求每次输入后的算数平均数
- 参考答案
count = 0 # count,计数
summation = 0 # sum / summation,求和
while True:
x = input ('quit enter F ,plz input a num ')
if x != 'F':
summation += int(x)
count += 1
print ('avg is',(summation // count)) # avg,平均数
else:
break
参考答案.png
1.11 打印菱形
- 思路
行号 个数 前空格 总空格
1 1 3 6
2 3 2 4
3 5 1 2
4 7 0 0
5 5 1 2
6 3 2 4
7 1 3 6
- 参考答案
range 可以从负数开始,不要被束缚住思想
for i in range(-3,4):
if i<0:
prespace = -i
else:
prespace = i
print (' '*prespace + '*'*(7-prespace*2))
# 精简版本
for i in range(-3,4):
print (' '*(-i) + '*'*(7+i*2)) if i<0 else print (' '*i + '*'*(7-i*2))
参考答案.png
精简版本.png
1.12 打印对顶三角形
- 思路
序号 对称序列 星号数 总空格 前置空格 后置空格
1 3 7 0 0 0
2 2 5 2 1 1
3 1 3 4 2 2
4 0 1 6 3 3
5 1 3 4 2 2
6 2 5 2 1 1
7 3 7 1 0 0
# 可以看出,和签到空格、起终点有关
- 参考答案
n = 7
e = n//2
for i in range(-e,n-e):
prespace = -i if i<0 else i
print (' '*(e-prespace) + '*'*(2*prespace+1))
# 精简
n = 7
e = n//2
for i in range(-e,n-e):
print (' '*(e+i) + '*'*(2*(-i)+1)) if i<0 else print(' '*(e-i) + '*'*(2*i+1))
参考答案.png
1.13 打印闪电
- 思路
行号 个数 前空格 后空格 总空格 数据
1 1 3 3 6 -3
2 2 2 3 5 -2
3 3 1 3 4 -1
4 7 0 0 0 0
5 3 3 1 4 1
6 2 3 2 5 2
7 1 3 3 6 3
- 参考答案
for i in range(-3,4):
if i<0:
print (' '*(-i) + '*'*(4+i))
elif i>0:
print (' '*3 + '*'*(4-i))
else:
print ('*'*7)
参考答案.png
1.14 斐波那契数列
- 定义
指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*) - 100 以内数列打印
print (0)
print (1)
a = 0
b = 1
while True:
c = a + b
if c > 100:
break
a = b
b = c
print (c)
- 求数列 101 项
答案:101,573147844013817084101
# 方案一
i = 1
j = 1
count = 0
while True:
i,j = j,i+j
count += 1
if count == 100:
break
print (i)
# 方案二
a = 1
b = 1
index = 2
print ('{0},{1}'.format(0,0))
print ('{0},{1}'.format(1,1))
print ('{0},{1}'.format(2,1))
while True:
c = a + b
a = b
b = c
index += 1
print ('{0},{1}'.format(index,c))
if index == 101 :
break
100 以内.png
101 项方案二.png
101 项方案一.png
1.15 猴子吃桃问题
- 猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,有多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想吃时,只剩下一个桃子了。求第一天共摘了多少桃子。
- 思路
total = x
剩下
d1 x/2-1
d2 d1/2-1
d3 d2/2-1
...
d9 d8/2-1
d10 1
- 参考答案
peach = 1
for i in range(9):
peach = 2*(peach+1)
print (peach) # 1534