课后练习

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]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值