题目
杨辉三角
Version 1
def generate_pascal_triangle(n):
"""
生成n行杨辉三角
:param n: 行数
:return: 二维列表表示的杨辉三角
"""
triangle = []
for i in range(n):
row = [1] # 每行第一个元素总是1
if i > 0:
# 中间元素等于上一行相邻两元素之和
for j in range(1, i):
row.append(triangle[i-1][j-1] + triangle[i-1][j])
row.append(1) # 每行最后一个元素总是1
triangle.append(row)
return triangle
def print_triangle(triangle):
"""打印杨辉三角"""
max_width = len(' '.join(map(str, triangle[-1])))
for row in triangle:
print(' '.join(map(str, row)).center(max_width))
if __name__ == '__main__':
rows = int(input("How many rows:"))
result = generate_pascal_triangle(rows)
print_triangle(result)
Version 2
# 杨辉三角
def generate_pascal_triangle(n:int)->list:
triangle = [] # 初始化一个数组存储三角形
for row_num in range(n):# 几行
row = [None] * (row_num + 1) # 全部初始化为None
row[0],row[-1] = 1,1 # 最前面和最后面都赋值为1
# row_num >= 2
for j in range(1,row_num):# 只计算中间元素,所以是1,row_num
row[j] = triangle[row_num -1][j - 1] + triangle[row_num-1][j]
triangle.append(row)
return triangle
def make_beautiful(triangle:list):
# 计算最后一个数组长度作为三角形的最宽长度
width = len(" ".join(str(num) for num in triangle[-1]))
# 居中输出每一行
for row in triangle:
print(f"第{len(row)}行",end="\t")
row_str = " ".join(str(num) for num in row)
print(row_str.center(width))
make_beautiful(generate_pascal_triangle(int(input("你要输出多少行"))))
99 乘法表
for i in range(1,10):
for j in range(1,i+1):
print(f"{i}*{j}={i*j}",end="\t")
print("\n")
水仙花数
import sys
from numpy.f2py.auxfuncs import throw_error
class StartCannotLessThanZero(Exception):
pass
def sxh(start:int,end:int)->None:
if start <= 0:
raise StartCannotLessThanZero("起始数字不能小于或等于0")
for num in range(start,end+1):
digits = [int(num) for num in str(num)] # 将数字转化为数字列表, 123 -> [1,2,3]
print(digits)
power = len(str(num)) # 求出数字位数 3
result = sum(d ** power for d in digits) # 计算结果 1**3+2**3+3**3
print(result)
if num == result:
print(f"{num}是水仙花数")
if __name__ == '__main__':
print("请输入你想求出的水仙花数的范围")
start = int(input("start:"))
end = int(input("end:"))
sxh(start,end)
9/25
# for i in range(1, 10):
# for j in range(1, i + 1):
# print(f"{i}*{j}={i * 9}", end="\t")
# print("\n")
i = 1
while i <= 9:
j = 1
while j <= i:
print(f"{i}×{j}={i * j}", end="\t")
j += 1
i += 1
print("")
print()
# 倒三角
# 打印99乘法表的倒三角
# for i in range(9, 0, -1):
# for j in range(1, i + 1):
# print(f"{j}×{i}={j * i}", end="\t")
# print() # 换行
# print("\n")
i = 1
while i <= 9:
j = i
while j <= 9:
print(f"{i}×{j}={j * i}", end="\t")
j += 1
i += 1
print("")
# i = 1
# while i <= 9:
# j = 1
# while j <= i:
# print(i ** "\t", end="")
# print(f"{i}*{j}={i * j}", end="")
# # print((9 - 1) * "\t", end="")
# j += 1
# i += 1
# print("\n")
斐波那契数列
Version 1
def finbonaqi(n):
"""
递归计算第n个斐波那契数
参数:
n: 要计算的斐波那契数的位置(从0开始)
返回:
第n个斐波那契数
斐波那契数列定义:
F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2) (n >= 2)
"""
if n <= 0:
return 0
elif n == 1:
return 1
else:
return finbonaqi(n - 1) + finbonaqi(n - 2)
# 第三个斐波那契数字
# fibonaqi(3)
# finbonaqi(2) + fibonaqi(1)
# finbonaqi(1) + fibonaqi(0) # 1
# 0 + 1# 1
# 结果为2
list = []
for i in range(1,21):
list.append(finbonaqi(i)) # 求出第i个斐波那契数列上的数字
print(list)
Version 2
def fibonaqi(n)->list:
a, b = 1, 1
res = [1, 1]
for i in range(n):
c=a+b
res.append(c)
a,b = b,c
print(res)
fibonaqi(10)
上课的代码
10/16
#
# list = [int(a) for a in "123456"]
# print(list)
# print(list.index(6))
# list.reverse()
# print(list)
# 语法:列表.index(元素),查找指定元素的下标,如果找不到,报错ValueError
# index就是列表对象(变量)内置的方法(函数)
mylist = ["itcast", "itheima", "python"]
# 1.1 查找某元素在列表中的下标
index = mylist.index("itheima")
print(f"itheima在列表中的下标索引是:{index}")
# 1.2 如果找不到元素,会报错
try:
print(mylist.index("test"))
except Exception as e:
print(f"没找到{e}")
# 2. 修改特定下标索引的值
mylist[1] = "黑马传智教育"
print(f"列表修改后的元素值{mylist}")
# 3. 在指定下标位置前面插入新元素
# 插入元素
# 语法:列表.insert(索引,待插入元素)
print("在索引2前面插入heiheihei")
mylist.insert(2, "heiheihei")
mylist.insert(2, [4, 5, 6])
# mylist.insert(len(mylist), 4)
print(f"列表修改后的元素值{mylist}")
# 4. 在列表尾部追加```单个```新元素
mylist.append("单个元素")
print(f"列表修改后的元素值{mylist}")
# 5. 在列表尾部追加```一批```新元素
mylist.append([1, 2, 3])
print(f"列表修改后的元素值{mylist}")
# 追加元素方式2
# 语法:列表.extend(其他数据容器),将其他数据容器
extend_list = ["extend1", "extend2", "extend3"]
mylist.extend(extend_list) # 直接退添加到最后,
print(f"列表修改后的元素值{mylist}")
# 删除元素
# 语法1 del 列表[下标]
# 语法2 列表.pop(下标)
# 删除单个元素
mylist = ["itheima", "test", "python"]
del mylist[0]
print(f"删除后列表{mylist}")
element = mylist.pop(1)
print(f"删除元素{element},删除后列表{mylist}")
# 7. 删除某元素的第一个匹配项
mylist = [1, 2, 3, 3, 2, 2]
mylist.remove(2)
print(f"删除第一个匹配项后结果{mylist}")
# 8. 清空列表
mylist.clear()
print(f"列表清空后{mylist}")
# 9. 统计列表内元素的数量
mylist = ["itheima", "itheima", "itcast", "itheima", "python"]
count = mylist.count("itheima")
print(f"列表中itheima数量是{count}")
# 10.统计列表内有多少元素
mylist.insert(len(mylist), [1, 2, 3])
print(f"列表{mylist}里面有{len(mylist)}个元素")
nums = [0, 5, 10, 33, 8, 19, 25, 6]
nums.append(2)
print(nums)
nums.insert(2,22)
print(nums)
nums.remove(33)
print(nums)
nums.reverse()
print(nums)
nums.sort()
print(nums)
nums.clear()
print(nums)
# 1.
list = [21, 25, 21, 23, 22, 20]
# 2.
list.append(31)
print(list)
# 3.
new_list = [29, 33, 30]
list.extend(new_list)
print(list)
# 4.
print(list.pop(0))
# 5.a
print(list.pop(-1))
# 6.
print(list.index(31))
算法题网址知乎
浙公网安备 33010602011771号