注意事项!!!
首先,感谢各位对Python感兴趣的初学者的刚看。本博主是一名研究生专业是信息与通信工程,目前研二,现在处于找工作的状态。就目前的状况,现在还没有找到自己的就业职位,当现在目前都是以语言编程为主的。所以,现在想就Python语言的学习进行记录。网上Python的学习课程数不胜数,你可能根本不知道哪一个视频适合你。GitHub上的这个连接的内容,这个连接有详细的内容需要一百天才可以学习结束,时间太长。https://github.com/jackfrued/Python-100-Days/blob/master
其次,博主也是一边学习一边总结。前期的方法是采用GitHub这个链接🔗将基础知识过一遍,等把基础知识学习结束,会在进行调整。博主必须保证有效学习,马上要找工作。大家一起讨论!!
一、Day 1至Day 2 认识Python
在这两章中其实并没有什么,就是纯纯的介绍Python 的起源以及安装。我在安装的时候也遇到了很多问题,安装好了发现有问题,又卸载重装,来来回回三四次。后来,我舍友给我推荐了http://哔哩哔哩的一位博主讲解,成功解决问题。他讲解的特别详细,需要的话可以联系我哦!!
二、 Python 中的变量以及运算符
1、变量
①变量的核心是:变量作为数据的载体!!!简单的说就是一块用来保存数据的内存空间,变量的值可以被读取和修改。
②变量的类型:
变量类型 | 作用 |
整数(int) | 可以处理任意大小的整数,支持各种进制数 |
浮点数(float) | 浮点数也就是小数 |
字符串型(str) | 以单引号或双引号包裹起来的任意文本 |
布尔型(bool) | 只有True 、False 两种值 |
变量类型使用例子
a = 100
b = 123.45
c = '123'
d = '100'
e = '123.45'
f = 'hello, world'
g = True
print(float(a)) # int类型的100转成float,输出100.0
print(int(b)) # float类型的123.45转成int,输出123
print(int(c)) # str类型的'123'转成int,输出123
print(int(c, base=16)) # str类型的'123'按十六进制转成int,输出291
print(int(d, base=2)) # str类型的'100'按二进制转成int,输出4
print(float(e)) # str类型的'123.45'转成float,输出123.45
print(bool(f)) # str类型的'hello, world'转成bool,输出True
2、运算符
Python 语言支持很多种运算符,下面的表格按照运算符的优先级从高到低,对 Python 中的运算符进行了罗列。
运算符 | 描述 |
[] 、[:] | 索引、切片 |
** | 幂 |
~ 、+ 、- | 按位取反、正号、负号 |
* 、/ 、% 、// | 乘、除、模、整除 |
+ 、- | 加、减 |
>> 、<< | 右移、左移 |
& | 按位与 |
<= 、< 、> 、>= | 小于等于、小于、大于、大于等于 |
== 、!= | 等于、不等于 |
is 、is not | 身份运算符 |
in 、not in | 成员运算符 |
not 、or 、and | 逻辑运算符 |
= 、+= 、-= 、*= 、/= 、%= 、//= 、**= 、&= 、|= 、^= 、>>= 、<<= | 赋值运算符 |
在这些运算符中,最重要的是%
、//这两个运算符。
下面这张图片详细地解释了这两符号的作用。
尤其是用与提取一个数的个、十、百、千位。
重点(后面会用到):一个数位数提取公式:
百位 = num // 100
十位 = num // 10 % 10
个位 = num % 10
三、分支结构与循环结构
1、分支结构
分支结构又很多,常用的就是if-else结构。构造分支结构最常用的是if
、elif
和else
三个关键字。分支结构的核心思想就是将可能出现的情况都陈列出来。例如我们要写一个身体质量指数(BMI)的计算器。身体质量质数也叫体质指数,是国际上常用的衡量人体胖瘦程度以及是否健康的一个指标,计算公式如下所示。通常认为 18.5≤BMI<24 是正常范围, BMI<18.5 说明体重过轻, BMI≥24 说明体重过重, BMI≥27 就属于肥胖的范畴了。
上面公式中的体重以千克(kg)为单位,身高以米(m)为单位。
height = float(input('身高(cm):'))
weight = float(input('体重(kg):'))
bmi = weight / (height / 100) ** 2
print(f'{bmi = :.1f}')
if bmi < 18.5:
print('你的体重过轻!')
elif bmi < 24:
print('你的身材很棒!')
elif bmi < 27:
print('你的体重过重!')
elif bmi < 30:
print('你已轻度肥胖!')
elif bmi < 35:
print('你已中度肥胖!')
else:
print('你已重度肥胖!')
2、循环结构
for-in 循环
所谓循环结构,就是程序中控制某条或某些指令重复执行的结构。如果明确知道循环执行的次数,我们推荐使用for-in
循环。假设我们用for-in
循环实现从 1 到 100 的偶数求和。
total = 0 # 定义一个变量,作为求和的载体。
for i in range(2, 101,2): # 定义一个循环变量i,range的取值为[2,101),步长为2
total += i # 它相当于total = total + i,这句话实现了累加的操作
print(total)
while循环
如果要构造循环结构但是又不能确定循环重复的次数,我们推荐使用while
循环。while
循环通过布尔值或能产生布尔值的表达式来控制循环,当布尔值或表达式的值为True
时,循环体(while
语句下方保持相同缩进的代码块)中的语句就会被重复执行,当表达式的值为False
时,结束循环。假设我们用for-in
循环实现从 2 到 100 的偶数求和。
total = 0 # 定义一个变量,存储求和的数值
i = 2 # 定义循环变量i,实现求和数的累加,i设为2,可以得到偶数
while i <= 100: # 这里不像for-in循环那样设置循环范围,而是直接i的条件
total += i # 实现偶数的求和
i += 2 # 得出下一个偶数
print(total)
break和continue
如果把while
循环的条件设置为True
,这时,条件属于恒成立无法结束循环。那么如何让使用while
构造循环结构,计算 1 到 100 的偶数和呢?
当我们用break来实现求和,
total = 0
i = 2 # 这两行代码和之前解释的一样
while True: # while True构造了一个条件恒成立的循环,也就意味着如果不做特殊处理会陷入死循环
total += i #
i += 2 # 代码到这一行就已经陷入死循环
if i > 100: # 为了走出死循环,利用if语句,当在i的值超过 100 后让循环停下来,我们使用了break
break
print(total)
当我们用continue来实现求和,
total = 0 # 定义变量,存储数值
for i in range(1, 101): # 定义变量,列出1-100的偶数
if i % 2 != 0: # 这里和break不同,break是直接得出偶数进行求和直至结束,
continue # 而continue是排除掉奇数在继续求和直到到达i的最大值
total += i
print(total)
四、分支和循环结构实战
通过前面的学习,大家对 Python 中的分支结构和循环结构已经有了初步的认知。分支结构和循环结构是构造程序逻辑的基础。目前,我对分支结构和循环结构的语法是能够理解的,但是遇到实际问题的时候又无法下手;看懂别人的代码很容易,但是要自己写出类似的代码却又很难。我想,这时应该坚持住多练习,马上就可以突破瓶颈期。我的练习量还没有达到让你可以随心所欲写出代码的程度,只要加强编程练习,通过量的积累来产生质的变化,这个问题迟早都会解决的。我把我认为比较难的、系统的代码都背下来。所以我现在的目标就是只要想起来,就在脑子里回想一边,怎么编码。下面是我认为比较常见而且以后可以用的逻辑表达。
实战一:100以内的素数
这个例子是每种语言都会用到的例子,所以特别重要!!!
找出素数之前,首先我们都知道什么是素数?素数指的是只能被 1 和自身整除的正整数(不包括 1)。从这句话,可以得出两个信息:①只能被 1 和自身整除的正整数;②1不是素数
要找出素数首先得把2-100的数列出来(1不是素数所以从2开始)-----> 所以会利用for循环
①只能被 1 和自身整除的正整数---->所以我们需要引入一个循环变量i来满足条件①。在满足条件①时,第一步先得将i的数列出来,那么怎么找到i的范围就是关键!!!
说实话到这还是一脸懵逼!所以我搜了百度,素数的验证,我看到一条信息,我就懂了。
这个信息就是:素数验证,排除法:原理:用2到根号n之间的整数依次试除,若存在能乘除的数,则n不是素数。其次我们肯定是利用什么样的条件判断是不是素数----->所以这点会用到if语句、之前提到布尔型变量类型。
# 经过上述分析,我们试试写一下代码
for num in range(2,100)
is_prime = True
for i in range(2,int(num **0.5)+1):
if num % i == 0:
is_prime = False
break
if is_prime:
print(num)
实战二:斐波那契数列
斐波那契数列的特点是数列的前两个数都是 1,从第三个数开始,每个数都是它前面两个数的和。按照这个规律,斐波那契数列的前 10 个数是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55
。
我们来分析这段话,首先,每个数都是前面两个数的和------->需要引入两个变量,如a,b。
我们可以观察出第三位数以及后面的数可以显而易见的看出来,而第一、二位数是怎么得出来的?因为我们定义了两个变量,第二位可以是0+1。所以我可以让a,b的初始值为0,1。同时把b 直接赋给第一位数。
# 因此根据上述的分析,可以编码
a , b = 0 , 1
for _ in range(20):
a , b = b , a + b # 上面循环中的a, b = b, a + b表示将变量b的值赋给a,把a + b的值赋给b。
# 通过这个递推公式,我们可以依次获得斐波那契数列中的数。
print(a)
实战三:找出 100 到 999 范围内的所有水仙花数
在数论中,水仙花数(narcissistic number)也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个 N 位非负整数,其各位数字的 N 次方和刚好等于该数本身。例如,所以 407也是一个水仙花数。
在编写代码时,关键在于怎么将它拆分为个位、十位、百位,然后再利用if语句判断是否符合水仙花数。前面已经见过怎么提取一个数的位数啦!!!!
for num in range(100,1000):
baiwei = num // 100
geiwei = num // 10 % 10
gewei = num % 10
if num == num == baiwei ** 3 + shiwei ** 3 + gewei ** 3:
print(f'{num}={baiwei}^3 + {shiwei}^3 + {gewei}^3')
实战四:CRAPS赌博游戏
CRAPS又称花旗骰。规则是:
玩家第一次摇骰子如果摇出了 7 点或 11 点,玩家胜;
玩家第一次如果摇出 2 点、3 点或 12 点,庄家胜;
玩家如果摇出其他点数则游戏继续,玩家重新摇骰子,如果玩家摇出了 7 点,庄家胜;
如果玩家摇出了第一次摇的点数,玩家胜;
其他点数玩家继续摇骰子,直到分出胜负。
为了增加代码的趣味性,我们设定游戏开始时玩家有 1000 元的赌注,每局游戏开始之前,玩家先下注,如果玩家获胜就可以获得对应下注金额的奖励,如果庄家获胜,玩家就会输掉自己下注的金额。游戏结束的条件是玩家破产(输光所有的赌注)。
我们对这个游戏进行分析:从游戏步骤来说分为两部分(一部分是下注钱;另一个是摇的两个骰子数之和)------>需要引入变量;从游戏的玩法步骤来说也分为两步(一部分是之间分胜负,另一部分是还需要进行下一步摇骰子)----->这个需要有一个嵌套的循环。同时,游戏规定玩家需要把1000元赌注全部输掉游戏才能结束。我们并不知道循环什么时候结束,所以需要用到while true语句。
import random
money = 1000
while money > 0:
print(f'你的总资产为: {money}元')
# 下注金额必须大于0且小于等于玩家的总资产
while True:
debt = int(input('请下注: '))
if 0 < debt <= money:
break
# 用两个1到6均匀分布的随机数相加模拟摇两颗色子得到的点数
first_point = random.randrange(1, 7) + random.randrange(1, 7)
print(f'\n玩家摇出了{first_point}点')
if first_point == 7 or first_point == 11:
print('玩家胜!\n')
money += debt
elif first_point == 2 or first_point == 3 or first_point == 12:
print('庄家胜!\n')
money -= debt
else:
# 如果第一次摇色子没有分出胜负,玩家需要重新摇色子
while True:
current_point = random.randrange(1, 7) + random.randrange(1, 7)
print(f'玩家摇出了{current_point}点')
if current_point == 7:
print('庄家胜!\n')
money -= debt
break
elif current_point == first_point:
print('玩家胜!\n')
money += debt
break
print('你破产了, 游戏结束!')
我将代码的思路写成一个思维框图,有助于大家理解。
以上就是对变量、运算符、分支循环结构的总结。