Python10-课堂习题
1,打印一个边长为n的正方形?
程序一
line = int(input(">>>"))
for i in range(line):
if i == 0 or i == line - 1:
print("*" * line)
else:
print("*" + " " * (line - 2) + "*")
2,求100内所有计数的和?
程序一
思路:使用for循环,利用range函数的步长产生所有的奇数!
sum = 0
for i in range(1, 100, 2):
sum += i
print(sum)
程序二
思路:使用列表解析式和sum内建函数
sum([i for i in range(1, 100, 2)])
3,判断学生成绩,成绩等级A到E,其中90分以上为A,80分到90为B,70到80为C,60到70为D,60以下为E?
程序一
使用if条件判断,并分割一下判断
import random
num = int(input(">>>"))
if num >= 70:
if num >= 80:
if num >=90:
print("A")
else:
print("B")
else:
print("C")
elif num >= 60:
print("D")
else:
print("E")
4,求1到5阶乘之和?
程序一
定义二个变量,把上一次计算的结果利用到下一次。
num = 0
six = 1
for i in range(1, 6):
six *= i
num += six
print(num)
5,给定一个数字,判断这个数是否为质数?
程序一
通过求2到num之间数的余数是否为0,来判断这个数是否为质数!
num = int(input("Please enter a value greater than 2: "))
for i in range(2, num):
if num % i == 0:
print(num, "This is NO")
break
else:
print(num, "This is OK")
6,给一个半径,求圆的面积和周长。
程序一
radius = int(input(">>>"))
print("area:{}\nperimeter:{}".format(3.14 * (radius ** 2), int(2 * 3.14 * radius)))
7,输入两个数值,比较大小后,从小到大升序打印?
程序一
num1 = int(input("num1>>>"))
num2 = int(input("num2>>>"))
if num1 > num2:
print(num2, num1)
else:
print(num1, num2)
程序二
利用三元表达式可以让程序更简洁
num1 = int(input("num1>>>"))
num2 = int(input("num2>>>"))
print(num2, num1) if num1 > num2 else print(num1, num2)
8,输入若干个整数,比较后,输出最大值?
程序一
six = int(input(">>>"))
while True:
num = input(">>>")
if num:
num = int(num)
if num > six:
six = num
print(six)
else:
break
9,输入n个数,求每次输入后的算数平均数?
程序一
num = 0
count = 0
while True:
six = input(">>>")
if six == 'quit':
break
num += int(six)
count += 1
mean = num / count
print(mean)
10,九九乘法表打印?
程序一
for i in range(1, 10):
for j in range(1, i + 1):
print("{}*{}={:<3}".format(j, i, i * j), end=' ')
print()
程序二
[print("{}*{}={:<3}{}".format(j, i, i * j, '\n' if i == j else ' '), end='')for i in range(1, 10) for j in range(1, i + 1)]
程序三
反向打印乘法表
for i in range(1, 10):
line = ''
for j in range(i, 10):
line += "{}*{}={:<3}".format(j, i, i * j)
print("{:>85}".format(line))
11,打印菱形
程序一
思路:菱形是一个对称的形状
num = 7
lenght = num // 2
for i in range(-lenght, lenght + 1):
if i < 0:
space = -i
else:
space = i
print(" " * space + "*" * (7 - space * 2))
程序二
line = 7
length = line // 2
for i in range(-lenght, line - lenght):
prespace = -i if i < 0 else i
print(' ' * (lenght - prespace) + '*' * (prespace * 2 + 1))
程序三
line = 7
length = line // 2
six = line - lenght
for i in range(-lenght, six):
if i < 0:
print(" " * -i + "*" * (six + i))
elif i > 0:
print(" " * lenght + "*" * (six - i))
else:
print("*" * line)
12,斐波那契数列,求100以内?
程序一
num1 = 0
num2 = 1
while True:
num = num1 + num2
if num > 100:
break
num1, num2 = num2, num
print(num)
程序二
输出斐波那契第101项值
num1 = 1
num2 = 2
index = 2
while True:
num = num1 + num2
num1, num2 = num2, num
index += 1
print('{},{}'.format(index, num))
if index == 101:
break
使用列表索引方式
numlist = [1, 1]
for i in range(101):
numlist.append(numlist[i] + numlist[i + 1])
print(numlist[100])
13,猴子吃桃问题?
程序一
num = 1
for i in range(9):
num = (num + 1) * 2
print(num)
14,求100000以内所有的质数?
程序一
count = 0
for i in range(3, 100000, 2):
for j in range(3, int(i ** 0.5) + 1, 2):
if i % j == 0:
break
else:
count += 1
程序二
思路:使用列表
重点一:使用了开平方和去掉偶数
重点二:在if判断的第二个条件,把i的计算结果提前计算完成并赋值,节约了if还需要每次都计算!
impoty math
numlist = [2, 3]
count = 2
for i in range(3, 100000, 2):
six = math.ceil(math.sqrt(i))
for j in numlist:
if i % j == 0:
break
if j >= six:
numlist.append(i)
count += 1
break
15,依次接收用户输入的3个数字,排序后打印
程序一
num = []
for i in range(3):
num.append(int(input(">>>")))
if num[0] > num[1]:
if num[0] > num[2]j:
if num[1] > num[2]:
print(num[2], num[1], num[0])
else:
print(num[1], num[2], num[0])
else:
print(num[1], num[0], num[2])
else:
if num[0] > num[2]:
print(num[2], num[0], num[1])
else:
if num[1] < num[2]:
print(num[0], num[1], num[2])
else:
print(num[0], num[2], num[1])
程序二
num = [int(input(">>>")) for i in range(3)]
while True:
nummin = min(num)
print(nummin, end=' ')
num.remove(nummin)
if len(num) == 1:
print(num[0])
break
程序三
num = [int(input(">>>")) for i in range(3)]
num.sort()
print(num)
16,用户输入一个数字,判断是几位,依次打印每一位数字及其重复的次数?
程序一
while True:
num = input("input a psitive number").strip().lstrip('0')
if num.isdigit():
break
print("The length of {} is {}".format(num, len(num)))
程序二
倒序打印
num = input(">>>")
for i in range(len(num), 0, -1):
print(num[i - 1], end=' ')
程序三
使用reversed()内建函数
num = input(">>>")
for i in reversed(num):
print(i, end=' ')
程序四
负索引
num = input(">>>")
for i in range(len(num)):
print(num[-i - 1], end=' ')
程序五
num = input(">>>")
count = [0] * 10
for s in num:
i = int(s)
if count[i] == 0:
count[i] = num.count(s)
print("The count of {} is {}".format(i, count[i]))
程序六
使用字典
num = input(">>>")
numdict = {}
for i in num:
if not numdict.get(i): # 判断numdict.get(i)是否是None,not None就是True
numdict[i] = 1
continue
numdict[i] += 1
print(numdict)
方法二:
num = input(">>>")
numdict = {}
for i in num:
if i in numdict:
numdict[i] += 1
else:
numdict[i] = 1
print(numdict)
17,输入五个数字,打印每个数字的位数,将这些数字排序打印,要求升序打印?
程序一
判断输入的是否是数值,如果是字符串就continue重新输入
nums = []
while len(nums) < 5:
num = input("Please input a number: ").strip().lstrip('0')
if not num.isdigit():
continue
print("The length of {} is {}".format(num, len(num)))
nums.append(int(num))
nums.sort()
print(nums)
sort方法排序
18,转置矩阵
程序一
martix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(martix)
for i, row in enumerate(martix):
for j , col in enumerate(row):
if i < j:
martix[i][j], martix[j][i] = martix[j][i], martix[i][j]
print(martix)
程序二
martix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
lenght = len(martix)
for i in range(lenght): # j < i
for j in (i):
martix[i][j], martix[j][i] = martix[j][i], martix[i][j]
print(martix)
19,转置矩阵二
程序一
martix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
numlist = [[0 for col in range(len(martix))] for row in range(len(martix[0]))] #开辟几个空列表,每个空列表中填充几个元素!
for i, row in enumerate(numlist):
for j, col in enumerate(row):
numlist[i][j] = martix[j][i]
print(martix)
20,随机产生100个整数,数字范围{-1000, 1000},升序输出数字及其重复的次数?
import random
numlist = [random.randint(-1000, 1000) for i in range(100)]
numdict = {}
for i in numlist:
if i not in numdict:
numdict[i] = 1
else:
numdict[i] += 1
numdicts = sorted(numdict.items())
print(numdicts)
21,字符串表’abcdefghijklmnopqrstuvwxyz’,随机挑选2个字母组成字符串,共选100个,降序输出并输出重复的次数?
程序一
import random
alpha = 'abcdefghijklmnopqrstuvwxyz'
numdict = {}
numlist = [''.join(random.choices(alpha, k=2)) for i in range(100)]
for i in numlist:
if i not in numdict:
numdict[i] = 1
else:
numdict[i] += 1
numdicts = sorted(numdict.items(), reverse=True)
print(numdicts)
列表解析式练习:
1,返回1 到 10 平方的列表?
[i ** 2 for i in range(1, 11)]
2,有一个列表,生成一个新的列表,要求新列表元素是lst相邻2项的和?
lst = [1, 4, 9, 16, 2, 5, 10, 15]
程序一
lst = [1, 4, 9, 16, 2, 5, 10, 15]
[lst[i] + lst[i + 1] for i in range(len(lst) - 1)]
3,打印九九乘法表
[print("{}*{}={:<3}{}".format(j, i, i * j, '\n' if i == j else ''), end='') for i in range(1, 10) for j in range(1, i + 1)]
4,生成ID,格式”0001.adfdadfdfa”,按照顺序生成100个?
程序一
import random
['{:04}.{}'.format(i, ''.join(random.choices('abcdefghijklmnopqrstuvwxyz', k=10))) for i in range(1, 101)]
+——————————————————————-+
习题练习:
1,如果球从10米的高度落下,弹跳到6米高,这个索引就是0.6;球在一次弹跳之后总的运动就是16米。
如果球继续弹跳,每次后续的弹跳运动的距离都是到地板的距离加上这个距离的0.6倍。
要求:写一个程序,让用户输入一个球的初始高度以及允许球持续弹跳的次数。最后输出总的运动距离?
程序一:
def sumriadui(num, count):
sum = 0
for i in range(count):
tmp = num
num *= 0.6
sum = tmp + num + sum
return float(sum)
+================================================================================+
算法之插入排序
定义一个列表
lyst = [2, 5, 1, 4, 3]
定义循环次数为列表元素减去1
i = 1
开始进入循环
while i < len(lyst):
把索引为i的值赋值给一个临时变量
itemToInsert = lyst[i]
定义需要移位比较的次数,通过次数判断出应该插入的正确位置
j = i - 1
进入判断循环
while j >= 0:
如果索引为i的值小于索引(i - 1)的值,就需要右移,否则break退出循环
if itemToInsert < lyst[j]:
lyst[j + 1] = lyst[j]
j -= 1
else:
break
把临时变量替插入到正确的位置
lyst[j + 1] = itemToInsert
i += 1
print(lyst)
算法之冒泡排序
date_set = [9, 1, 22, 31, 45, 3, 6, 2, 11]
loop_count = 0
for j in range(len(date_set)):
for i in range(len(date_set) - j - 1):
if date_set[i] > date_set[i + 1]:
date_set[i], date_set[i + 1] = date_set[i + 1], date_set[i]
loop_count += 1
print(date_set)
print(date_set)
print("loop times", loop_count)
算法之选择排序
num = [9, 1, 22, 31, 45, 3, 6, 2, 11]
six = 0
for i in range(len(num)):
for j in range(i + 1, len(num)):
if num[j] < num[six]:
six = j
else:
num[i], num[six] = num[six], num[i]
print(num)
=========================================================
numlist = [1, 3, 5, 7, 9, 8, 6]
Lenght = len(numlist)
for i in range(Lenght):
Maxindex = i
for j in range(i + 1, Lenght):
if numlist[j] > numlist[Maxindex]:
Maxindex = j
if numlist[i] != numlist[Maxindex]:
numlist[i], numlist[Maxindex] = numlist[Maxindex], numlist[i]
print(numlist)
简单选择排序实现二
二元选择排序,固定左边最大值和右边最小值,减少迭代元素的次数
numlist = [1, 3, 4, 5, 7, 8, 234, 5]
Lenght = len(numlist)
for i in range(Lenght // 2):
Maxindex = i
Minindex = -i - 1
minorigin = Minindex
for j in range(i + 1, Lenght - i):
if NumList[Maxindex] < NumList[j]:
Maxindex = j
if NumList[Minindex] > NumList[-j - 1]:
Minindex = -j - 1
if i != Maxindex:
NumList[i], NumList[Maxindex] = NumList[Maxindex], NumList[i]
if i == Minindex or i == Lenght + Minindex:
Minindex = Maxindex
if minorigin != Minindex:
NumList[minorigin], NumList[Minindex] = NumList[Minindex], NumList[minorigin]
print(NumList)
=========================================================
算法之插入排序
num = [9, 1, 22, 31, 45, 3, 6, 2, 11]
for i in range(1, len(num)):
var = num[i]
position = i
while position > 0 and num[position - 1] > var:
num[position] = num[position - 1]
position -= 1
#这一步把var的值移动到正确的位置上
num[position] = var
print(num)
算法插入排序;用到了等式互换
num = [9, 1, 22, 31, 45, 3, 6, 2, 11]
for i in range(len(num)):
while i > 0 and num[i] < num[i - 1]:
num[i], num[i - 1] = num[i - 1], num[i]
i -= 1
print(num)
1,计算杨辉三角
line = 6
row = [1] * line
for i in range(line):
offset = line - i
tmp = 1
for j in range(1, i // 2 + 1):
var = tmp + row[j]
row[j], tmp = var, row[j]
if i != 2 * j:
row[-j - offset] = var
print(row[:i + 1])
2,求杨辉三角第m行第n列的值?
组合恒等式:C(m, n) = m! / (n!(m - n)!) #!感叹号表示阶乘
杨辉三角的定理:C(m - 1, n - 1) = (m - 1)! / ((n - 1)!(m - n)!)
程序一
m = 9
n = 5
maxnum = m - 1
minnum = n - 1
centernum = m - n
numlist = []
factorial = 1
for i in range(1, m):
factorial *= i
if i == minnum:
numlist.append(factorial)
if i == centernum:
numlist.append(factorial)
if i == maxnum:
numlist.append(factorial)
print(numlist[2] // (numlist[0] * numlist[1]))