前言
随着科技时代的飞速发展,Python语言的需求量和普及度越来越广,对初学者十分友好的语言,它的语法清晰易读、
面向对象、可移植性、可扩展性,跨平台的开源编程语言,支持在Windows、Mac和Linux等平台上运行。
一、Python语言是什么?
Python是一门解释型、面向对象、带有动态语义的高级程序设计语言,也称为“解释型语言”或“胶水语言”。
二、编程开发环境
1.集成开发环境:Python 3.8.4
链接:https://pan.baidu.com/s/13a_KnPPTUicm1b2434AvdQ
提取码:dgsh
2.编辑器:Pycharm 2022.1
链接:https://pan.baidu.com/s/1kXE0ur5YK5_NrE02_-BB9Q
提取码:d4mh
二、实战示例学习
1.输出Welcome to the World of ESP
print()函数:用于打印输出
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
objects:表示输出的对象。输出多个对象时,需要用逗号间隔。
sep:用来间隔多个对象。
end:用来设定以什么结尾。默认值为\n(换行符),可换成其他字符。
file:写入的文件对象。
flush:用于刷新(清除)内部缓冲区/流,两个值(True/False)。
print('Welcome to the World of Python')
2.求最大值
for 迭代变量 in 字符串|列表|元组|字典|集合:
迭代变量:用于存放序列类型变量中读取出来的元素,一般不手动赋值
range()函数:创建一个整数列表,一般用在for循环中。
语法:range(start,stop[,step])
参数说明:
start:计数从start开始(0~n-1)。例如range(n)等价于range(0,n-1)
stop:计数到stop结束。例如:range(0,n)等价于[0,1,…,n]
step:步长,默认为1.例如:range(0,n)等价于range(0,n,1)
List = [33, 11, 66, 99, 55] #直接定义 列表List
List1 = [0 for i in range(4)] #间接定义 range():随机函数
Max = List[0] #定义变量Max用来存储值,初始值赋值为列表中任意一个值
#print(Max)
for i in List: #遍历列表
if i > Max: #比较相邻两个数的大小
Max = i #将i的值赋给MAX
print("这个列表中最大值为:", Max) #输出MAX值
3.最大公约数 & 最小公倍数
最大公约数
#greatest common divisor
#辗转相除法
List = []
number1 = input("请输入第一个数字\n")
number2 = input("请输入第二个数字\n")
m = max(number1,number2)
n = max(number1,number2)
r = number1%number2
while r != 0:
m=n
n=r
r=m%n
print(number1,"和",number2,"的最大公约数为",n)
4.冒泡排序
# 冒泡排序算法例子
# def函数 定义一个新函数(bubbleSort函数,arr为一个对象)
def bubbleSort(arr):
# len()函数获取对象的长度
# 对象可以为(字符串,列表,元组)
n = len(arr)
# 遍历所有数组元素
# range()函数表示生成一个列表对象 从下标0开始
for i in range(n):
# Last i elements are already in place
for j in range(0, n - i - 1):
# 从小到大排序
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
# arr数组赋初始值
arr = [22, 11, 88, 66, 55, 44, 77, 99, 44, 33]
bubbleSort(arr)
print("BubbleSort排序后的数组:")
# 依次输出排序后的数组
for i in range(len(arr)):
print("%d" % arr[i], end=','),
# 去掉最后最后一个逗号
print(arr[-1])
# range()函数补充
# 只有一个参数时:表示下标0到这个参数内的所有整数,不包含参数本身
# 有2个参数时,第一个参数,表示左边界,第2个参数表示右边界,含左不含右
# 有三个参数时,第一个表示左边界,第二个表示右边界,第三个表示步长step,
# 即两个整数之间相差的数,含左不含右
5.斐波拉契数列
判断法:
#CalFibonacci.py
#F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
#迭代法
def CalFibonacci(): #def函数 定义一个新函数(CalFibonacci函数)
number=input("请输入大于1的范围数\n") #number为字符串数据类型
i,j=0,1 #赋值 i=0 j=1
if int(number)<0: #输入的数字小于0,重新输入
print("请您重新输入数字\n")
elif int(number)==1 or int(number)==2: #输入的数字为1,2,输出1
print(i)
else:
while i<int(number) and j<int(number): #输出F(1)到F(n-1)项的值
print(i,end=',') #依次输入CalFibonacci数列
i,j=j,i+j #该语句从右至左执行 等价于i=j,j=i+j,i+j
print(i) #输出F(n)项的值
CalFibonacci() #函数调用
递归法:
① append()函数:
用在列表末尾添加新的对象。
② 语法:
List.append(object)
③ 参数:
List:列表对象名;
object:添加到列表末尾的对象。
④ 返回值:
append()函数无返回值,但是会修改原本列表里的值。
⑤ 代码示例:
#CalFibonacci子函数部分
def CalFibonacci(n): #def函数 定义一个新函数(CalFibonacci函数,n为一个对象)
if n <= 0: #判断输入值小于等于0
return 0 #返回0
elif n == 1 or n == 2: #判断是否为F(2)和F(3)项
return 1 #斐波拉契数列二,三项都为1
else: #当最近的if不成立时,执行下面这段语句
return CalFibonacci(n-2)+CalFibonacci(n-1) #F(n)=F(n-2)+F(n-1)
#main主函数部分
number=input("请输入大于1的范围数\n") #number为字符串数据类型
x=int(number) #将number强制类型转换为整型 赋值给变量x
List = [] #定义一个对象名为List的空列表
for i in range(x):
List.append(CalFibonacci(i)) #append()函数:列表末尾添加新的对象
if List[i] > x: #当列表新增对象大于输入值number时
break #终止for循环
for i in range(len(List)-1): #遍历List列表
if i==0:
print(List[i], end=',') #输出F(1)项
elif i>0 and List[i-1]+List[i]<x:
print(List[i], end=',') #输出F(2)到 F(n-1)项
else:
print(List[i]) #输出F(n)项
6.水仙花数 & 玫瑰花数
水仙花数的概念:指一个3位数,它的每一位上的数字的3次幂之和等于其本身(100~1000之间)
pow()函数:python中的内置函数,它接收两个参数,x和y,pow(x,y)函数返回的是x的y次方的值。
语法:pow(1,3) 等价于 1的三次方幂
① 水仙花数代码:
#narcissistic number
#水仙花数的概念:指一个3位数,它的每一位上的数字的3次幂之和等于其本身
#范围:(100~1000)
#例如:153 1*1*1+5*5*5+3*3*3=153
print("水仙花数如下所示:")
for i in range(1,10): #遍历1~9 最高位(百位)不能为0
for j in range(0,9): #遍历0~9 次高位(十位)
for k in range(0,10): #遍历0~9 最低位(个位)
sum1 = pow(i,3)+pow(j,3)+pow(k,3) #例如:1*1*1+5*5*5+3*3*3=153
sum2 = i*100+j*10+k #例如:1*100+5*10+3=153
if sum1 == sum2: #判断两式相等,输出水仙花数
print("水仙花数:%3d"%(sum1))
② 玫瑰花数代码:
#number of four roses
#四位玫瑰花数的概念:指一个4位数,它的每一位上的数字的4次幂之和等于其本身
#范围:(1000~10000)
#例如:1634 1*1*1*1+6*6*6*6+3*3*3*3+4*4*4*4=1634
print("玫瑰花数如下所示:")
for i in range(1000,10000):
#方法1
a = int(i%10) #个位
b = int(i/10%10) #十位
c = int(i/100%10) #百位
d = int(i/1000) #千位
sum1 = pow(a, 4) + pow(b, 4) + pow(c, 4) + pow(d, 4)
# 方法2
# sum1 = pow(int(i%10),4) + pow(int(i/10%10),4) + pow(int(i/100%10),4) + pow(int(i/1000),4)
if sum1 == i:
print("玫瑰花数:%4d"%(sum1))
7.回文数
① 什么是回文数?
指数字从左至右数和从右至左数完全相等,例如121 232 353…
# 判断输入的数字是否为回文数(palindromic number)
# 回文数指 该数字从左至右 = 从右至左 例如 121 232 101...
# 0~9都是回文数
List = [] # 定义一个对象名为List的空列表
num = input("请输入大于0的数\n") # number为字符串数据类型
number = int(num) # 强制类型转换
x, y , z = 0, 1 , 1 # 赋变量x,y初值x=0 y=1
# 将输入数按个位~N位反向排序
str1 = []
for i in range(len(num)): # 将输入数num依次存入List列表
str1 = List.append(number%10) # append()函数:列表末尾添加新的对象
# print(List[i], end=' ') # 按输入数从N位~个位依次输出
number = number // 10 # 缩小10倍
print('\nnum=', num)
for j in range(len(List)-1):
y *= 10
for i in range(len(List)): # 遍历List列表
x += List[i] * y # 列表每个元素依次*10求和赋值给X
y /= 10 # 增大10倍
print('x=', int(x))
if int(num) == int(x): # 判断输入数num是否等于X
print("\nTrue")
else:
print("\nFalse")
8.九九乘法口诀表
一、什么是format函数?
它是一种字符串格式化的方法,主要是用来构造字符串。
基本语法:通过 {} 和 : 来代替以前的 % 。在 {} 符号操作过程中,每一个 {} 都可以设置顺序,
分别与format的参数顺序对应,如果没有设置{}下标,默认重0开始递增。
(1)语句1:print("{:.5f}".format(3.1415926)),它的输出为3.14159,表示保留小数点后五位有效数字。
(2)语句2:print("{1} {0} {2} {1}".format(“hello”, “world”,“of ESP”)),它的输出为’world hello of ESP world’,注意下标位置。
#multiplication table
print("N阶乘法口诀表")
num = input("请输入一个数字\n")
for i in range(1,int(num)+1):
for j in range(1,i+1):
print("{}*{}={:1d}".format(j, i, i * j), end=" ")
print('\n')
9.判断是否为闰年,这一天在该年份的第几天
1、闰年条件:
年份能被400整除
年份能被4整除 同时 不能被100整除
#For a leap year
#判断输入的日期,是否为闰年,并且在当前年份的第几天
#例如 2000 12 31 是闰年 在当前年份的第366天
#例如 2001 12 31 不是闰年 在当前年份的第365天
month_day = [31,28,31,30,31,30,31,31,30,31,30,31] #1~12月的天数
sum_day = 0 #总天数
year = int(input("请输入年份:"))
month = int(input("请输入月份:"))
day = int(input("请输入天数:"))
def Leap_Year(year): #闰年判断条件:year能被400整除 或者 Year能被4整除 和 不能被100整除
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
print(year,"年是闰年")
month_day[1] = 29 #是闰年时,将2月天数改为29天
else:
print(year,"年不是闰年")
Leap_Year(year) #调用判断闰年函数
for i in range(int(month)-1): #遍历月份列表
sum_day += month_day[i] #累加输入月份前总天数
sum_day += int(day) #加当月天数
print("{}-{}-{}在这一年的第{:2d}天:".format(year, month,day,sum_day))
10.天天向上的力量
天天向上的力量:指周一到周五每天都在学习进步,周末松懈玩耍,累积一年后的结果为多少?
#天天向上的力量
#当每天进步1%,平年一年后的累积进步结果为 (1+1%)^365 闰年:(1+1%)^366
#假设周一到周五在进步,周六周日在退步(假设1月1号为周一)
year = input("请输入你想从哪一年开始进步,如2023\n")
dayrate = input("请输入一个每天进步的速度,如1%请写0.01\n")
dayback = input("请输入周末每天松懈的速度,如1.5%请写0.015\n")
year1 = eval(year)
day_rate = eval(dayrate)
day_back = eval(dayback)
step_speed = 1 #退步的速度积累值
if (year1 % 4 ==0 or year1 %100 !=0) and year1 % 400 ==0:
day_number = 366
print("恭喜你比平年多一天!")
else:
day_number = 365
print("恭喜你比闰年少一天!")
for i in range(1,day_number+1): #从第一天开始
# print(i,end=',') #遍历输出每一天
# if i%30==0: #30个元素回车换行一次
# print()
if (i%6==0 or i%7 ==0) and day_back != 0: #周末时间,开始玩耍
step_speed *= pow(1+day_back,1) #oh my gad,知识量下滑
else:
step_speed *= pow(1+day_rate,1) #学习时间,开始努力
result = step_speed #检验结果的时间到啦
#result = pow(1+day_rate,day_number) #That's nice,知识量增加
#print(day_back)
print("周一到周五进步{0:%}的情况下,周末松懈{1:%}的情况下,\n一年后对应的累积效果为初始状态的{2:.5f}倍".format(day_rate,day_back,result))
总结
刚开始学习python,记录下自己的知识收获,面向大海,春暖花开!