大家好,今天开始学习Python,我也是刚入门的新手,所以教程中有错误的话还请大家指教一下!
我学习的话都是按照黑马程序员顺序来开始学习的!相当于我的读书笔记吧!
今天是2024年10月28日,基础的Python入门教程就到这里结束了,教学内容是从打印到函数。接下来开新坑给大家更新比较进阶的内容。
一、打印输出
每种语言学习下来,第一个教程基本都是输出一个“Hello World”,接下来我将展示Python的Hello World:
print("Hello World")
是的 没有错 没有分号没有头文件,真的就这么简简单单。
二、变量
Python的变量也是比较简单的:
money = 50
print("钱包还有:", money)
首先的话我们直接定义了 money 这个变量的值为50,后通过打印输出来输出了钱包的价钱。不过有一个比较麻烦的地方就是在进行变量后面的输出的时候要多加一个引号:
print("钱包还有:", money, "元")
但是不影响Python的简单轻松。
三、数据类型
1、引用解释
学过其他语言的伙伴们可能都知道编程语言都有个数据类型:有浮点型啊,整数型啊,双浮点啊(以C为例子)。在Python也有这些数据类型。你可以通过以下内容来输出数据类型:
print(type("这是真境的博客"))
print(type(12345))
print(type(11.45))
输出的内容结果为下:
<class 'str'>
<class 'int'>
<class 'float'>
在Python中这些内容也和其他语言的数据类型差不多:
类型 | 描述 | 说明 |
str(全称string) | 字符串 | 需要用引号引起来 |
int | 整型 | 存放整数 包括负数 |
float | 浮点型 | 存放小数 |
2、type()解释
type() 是一个可以查看字面量的类型,也可以用作于查看变量内存储的数据类型:
site_name = "真境的博客"
print(type(site_name))
这样的话也可以输出 <class ‘str’> 的内容。
也可以用变量来储存 type的内容:
a = (type(site_name))
3、数据类型的转换
我们可以以以下的方式来进行数据类型的转换:
str = str(114514)
print(type(str),str)
在数据类型转换的过程中 他并不会破坏变量存储的内容 也就是说 str里面保存的114514他不会改变 只是变成了字符串。当然也可以从字符串转换成数字,但是要注意的是并不是所有的内容都可以进行转换,要是转换的内容是中文那肯定不行的。因此万物都可以从数字转成字符串,但是要从字符串转换成数字,其数据的内容必须是数字才可以
当把整数型内容转换成浮点数的时候 整数会自己加上小数:
float = float(114514)
print(type(float),float)
输出的内容如下:
<class 'float'> 114514.0
四、字符串
1、字符串的定义方式
大家都知道使用变量来表示字符串可以用引号,但是如果你想要输出的内容带引号要怎么做?下面是例子:
print("'真境的博客'")
print("\"真境的博客\"")
print("'真境的博客'")
输出的内容如下:
'真境的博客'
"真境的博客"
'真境的博客'
\ 作为一个转译字符,作用是接触引号的效用,另外两个就不多解释,相信大家都可以看明白的。
2、字符串的拼接
字符串要如何拼接大家可以看以下例子:
print("真境"+"的"+"博客")
当然输出的结果也就是 真境的博客,另外变量也可以参与在拼接的内容当中:
name = "真境"
print(name+"的"+"博客")
3、字符串的格式化
①介绍
字符串格式化大家可能听不懂是什么东西,其实这个东西的话就是通过一个占位符来使字符串和变量进行拼接,接下来是一个例子:
name1 = "真境"
print("大家好我是%s"%name)
其中 %s 就是一个占位符,他告诉系统这个位置是要给变量占领的,欸,如果说我们有当前变量比较多,而且我难道不能用字符型吗?当然可以:
data = 2024
month = 10
day = 20
print("今年是%s年%s月%s日"%(data,month,day))
欸…为什么是%s呢?是因为:
格式符号 | 转换 |
%s | 字符串 |
%d | 整数 |
%f | 浮点型 |
是不是有点似曾相识…这不就是C语言吗…你要说c语言确实可以这么说,没问题,哪里理解哪里来。具体展示的话相信大家也会,上面也有解释过内容到底是什么。希望大家可以举一反三!
②字符串格式化精度控制
大家在计算一个变量的时候,可能会出现许多的小数点,这时候需要我们来限制小数点后几位的内容,接下来看例子:
num = 114.514192180
print("限制五个数字宽度:%5d"%num)
print("限制五个数字精度:%.5f"%num)
print("限制限制五个数字宽度+五个数字精度:%5.5f"%num)
其中呢 我们可以把定义的内容拆分成 %m.n(f/d/…),其中呢 m是可以省略的,他是用作于定义变量的总宽度多少,.n是不能省略的,他定义了小数点后几位。而后面的 d f 这些其实就是我们常见的整数,浮点型这些内容,大家千万别忘记了。
③字符串格式化-更简单的方式
如果说前面你在print输出文本+变量的时候感觉比较麻烦,恭喜你,这里有更方便的形式来帮助你,来看例子:
name = "真境"
blog = "blog.mclzyun.com"
print(f"大家好我叫{name},我的博客地址是{blog}")
如示例所示,print的格式为 (f”{变量名}”) 这样的话就可以更方便更快捷的输出变量了!
④对表达式的格式化
其实这边的话其实都是让你如何写代码更加轻松。示例如下:
print("1 + 1 = %d" % (1+1))
print(f"1 + 1 = {1+1}")
print("1的字符串是:%s" % type(1))
输出的内容如下:
1 + 1 = 2
1 + 1 = 2
1的字符串是:<class 'int'>
当然的,格式化不仅仅用作于字符串和变量中,当然也可以运用于表达式中,这样的话可以大大提升我们变成的速度和效率!
五、数据输入
输入的话相信大家也熟悉这个东西,相当于 C语言 中的 scanf 函数。他用作于读取用户输入的数据来进行存储,存储到变量也可以。接下来我们可以查看一个例子:
print("来者是谁?")
name = input()
print(f"是{name}")
我们提问了个来者是谁 然后向用户请求输入后保存在name这个变量中。
六、布尔类型和比较运算符
布尔类型是什么?他是一种变化量,包含了 True(真) 和 False(假的)。他用于证明一个结果的真 假。那如何使用呢?接下来看例子。
result = 1 > 2
print(f"1 > 2的结果为{result},类型是 {type(result)}")
输出的结果为:
1 > 2的结果为False,类型是 <class 'bool'>
因为 1 肯定是小于2 所以说结果为 False,后面的话就是为大家展示它的类型是什么。接下来我们要讲解一下比较运算符,相信大家都明白:
运算符 | 解释 |
== | 等于号 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
七、if语句
1、if else 语句
if 语句的话就是一个判断条件的语句,他可以判断出一个变量是否为 真 假,如果条件符合将会进行运行程序,接下来看例子:
age = 30
if age >= 18:
print("我成年了!")
这个判断语句的话就是判断 age 是否大于等于 18,如果符合这个条件就是 True 将会运行“我成年了!”这一输出。那如果结果为假呢?程序确实是结束了,那如何实现结果相反的情况呢,接下来来看个例子:
age = int(input())
if age >= 18:
print("我成年了!")
else:
print("你还没成年!")
前面的 age 要求输入一个年龄,因为要作为数字的比较,所以我们用整数型来存储年龄数量,来进行判断,如果符合条件就是 True 执行我成年的这一个表达,如果不成立就是未成年这个输出。
1、if elif else 语句
①介绍
elif 是什么,这也是一个判断的语句,用作于多个判断:(借用 B 站 黑马程序员的解释)
也就是说他可以一次性判断出许多条件,如果符合其中一个条件的话就是运行条件中应该做的事情,接下来给大家一个例子:
score = int(input())
if score>90:
print("你的成绩为优秀")
elif 80<score<90:
print("你的成绩为良好")
elif 70<score<80:
print("你的成绩为一般")
else:
print("你的成绩为不合格")
这是一个判断成绩的一个判断语句,我们利用了用户输入的结果来判断成绩的优良。
elif可以写多个 他是一个条件语句的一个多重判断。
②题目-猜数字基础版
来做一个猜数字游戏,定义一个变量 通过if函数来进行判断数字是否正确(非循环语句),回答的人一共有三次机会,如果三次机会中猜数字正确就结束程序,如果失败就提示失败了
答案:
a = 5
if int(input("你还有三次机会回答:")) == a:
print("恭喜你一次性就猜对了")
elif int(input('你还有两次机会回答:')) == a:
print("不错你答对了")
elif int(input("你就剩下最后一次机会回答了:")) == a:
print("很好,最后一次机会你答对了")
else:
print("不好意思,你答错了!")
2、if语句的嵌套
if语句的嵌套意为可以有两个判断的语句进行,当两个条件结果为真时,那么整个结果可以为真,接下来我们来看一个例子:
if int(input("请输入你的身高(CM)")) > 120:
print("你需要购买公交车票")
card = input("你是否有公交车卡?(Y/N)")
if card == 'Y':
print("滴!公交卡!")
else:
print("继续买票吧!")
else:
print("小朋友坐公交不收钱!")
在例子中我们通过判断身高来决定乘客是否需要买票,如果身高低于120的时候我们直接视为儿童票直接免费,但是如果乘客的身高高于120的时候我们就需要判断该乘客是否有公交卡了,有公交卡就可以直接刷公交卡上车,没有的话就只能老实交钱了…
当然if语句是可以无限套娃的,总体的思路都是一样的,小伙伴们自己折腾去吧!
①题目-猜数字进阶版
前面的猜数字有一个缺点,就是你猜的数字是由出题人定义的啊,这不就和你网上买的盲盒一样吗?——睁着眼睛放东西,接下来我们将进行一个优化:
import random
num = random.randint(1,10)
guess_num = int(input("请输入你猜想的数字"))
if guess_num == num:
print("一招致命!一次性就答对")
else:
if guess_num > num:
print("猜的数字太大了!")
else:
print("猜的数字太小了!")
guess_num = int(input("请输入你第二次猜想的数字"))
if guess_num == num:
print("答对")
else:
if guess_num > num:
print("猜的数字太大了!")
else:
print("猜的数字太小了!")
guess_num = int(input("请输入你猜想的第三个数字"))
if guess_num == num:
print("差点就白给了")
else:
print("你没机会了!")
print(f"最终答案是:{num}")
其中 import random 就是导入一个随机函数的方法,相当于C语言中的 #include <stdlib.h>,然后num = random.randint(1,10)是随机函数的用法,他从1-10中随机抽取一个数字直接赋值到 num 上。其他的代码不多阐述。
八、while语句
1、理解和认识
while是一个循环语句,意思就是如果说条件为False的时候就会一直循环,直到条件为True就会停止循环。再偷一下黑马程序员的解释图:
这是一个比较基础的while循环:
i = 0
while i < 100:
print("一百次")
i += 1
当 i 小于100的时候就是 True 就会开始循环,如果i大于等于100的话那就是 False 直接结束循环了。
2、题目
①1-100数字求和
用 while 语句完成 1 – 100 的求和,示例如下:
i = 1
sum = 0
while i<=100:
sum += i
i += 1
print(f"1-100的总和为{sum}")
②猜数字 – 无限猜测版
运用 random 函数随机生成一个数字,并应用 while 函数进行猜想数字,知道猜想结束。示例代码:
import random
num = random.randint(1,100)
while 1:
guess_num = int(input("请输入你猜想的数字"))
if num > guess_num:
print("小了!")
elif num < guess_num:
print("大了!")
elif num == guess_num:
print("恭喜你猜对了!")
break
3、while 的嵌套循环
while的嵌套循环是什么?套娃差不多( 接下来以一个题目为例子展开叙述,题目:小明要努力100天认真吃三餐,请做出循环,输出内容:
今天是好好吃饭的第1天
这是第1天的第1餐
这是第1天的第2餐
这是第1天的第3餐
今天是好好吃饭的第2天
这是第2天的第1餐
这是第2天的第2餐
这是第2天的第3餐
今天是好好吃饭的第3天
答案代码:
i = 1
#外层循环
while i<=100:
print(f"今天是好好吃饭的第{i}天")
j = 1
#内层循环
while j <= 3:
print(f"这是第{i}天的第{j}餐")
j += 1
i += 1
print(f"一共好好吃饭了{i -1}天")
这是一个嵌套的循环例子,主要以外层循环和内层循环组成。注意:Python比较注重行间缩进。因此在这个例子代码中 j+=1 在内层循环,i+=1在外层循环。
①题目 – 九九乘法表
用 while 语句输出 九九乘法表,示例代码:
i = 1
while i<=9:
j = 1
while j<=i:
print(f"{j} * {i} = {j*i}\t", end = '')
j += 1
i += 1
print()
输出内容:
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
博客的展示内容优先,所以你可能看着有点变扭。首先的话大家可以发现 1 * 1 这个部分 1作为 j 是一个不断自增的内容,而和后面的1是作为行数,在该行内不变动的内容。
顺便补充下两个内容: \t 是行间对齐的意思,可以使九九乘法表对其,end = ” 是不换行的意思(因为Python和C语言不一样,C语言需要你换行符才能换行,但是Python默认都是自动换行的。)
代码解释:
i 是控制行数的循环,从 1 到 9。
j 是控制列数的循环,从 1 到当前的 i,以确保只输出上三角形的乘法表。
每次计算 j * i 的结果并输出,最后在每一行结束后换行
其中的话 print() 就是输出空字符 就是换行。
九、for语句
1、解释
for语句也是一个循环的语句,接下来给大家一个例子:
name = "zhenjing"
for i in name:
print(i)
还是偷黑马程序员的解释内容,刚刚实力代码的输出是:
z
h
e
n
j
i
n
g
意思就是说我给name赋值了一个字符串 zhenjing,然后将字符串分解后进行依次赋值,比如说 z 赋值在第一个i h赋值在第二个i只不过是替换了下存储的内容。
2、题目
①数一数一共有几个a
示例代码:
name = "abcdaaa"
count = 0
for i in name:
if i == "a":
count += 1
print(f"a一共有:{count}")
我们name随便输入一个数字,这个就是我们要数有一个a的一个变量,接着设置一个计数器 count 来记录有一个a 通过for循环的一个赋值给临时变量i,然后遍历i来通过if语句来判断是否存在a 如果存在a将会自动给计数变量count+1.这个就是示例的原理。
3、range语句
这是黑马程序员的一个介绍,range的话可以理解成一个数列吧,比如说range(10),他就是从 0 开始排列到10的一个东西。示例代码:
for i in range(10):
print(i)
输出内容:
0
1
2
3
4
5
6
7
8
9
和刚刚那个图展示的一样 range可以分成三个部分,num1 和 num2 就是一个取值的范围,step就是步长。比如说步长为2就不是 1 2 3 4 这样下去 而是 2 4 6 8 10
4、for的嵌套循环
嵌套循环的话相信大家也能够理解,接下来看示例代码:
i = 0
for i in range(1,101):
print(f"今天是浇花的第{i}天")
for j in range(1,3):
print(f"这是今天浇花的第{j}次")
print(f"浇花第{i}天,开花了!")
我们现在有学两个循环 一个是while循环 一个是for循环 ,两个都是可以嵌套的。
①题目 九九乘法表 – for 循环版
示例代码:
for i in range(1,10):
for j in range(1,i+1):
print(f"{j} * {i} = {j*i}\t",end= '')
print()
5、continue和break语句
continue的语句就相当于跳过当前的内容重新循环的语句,因此在黑马程序员的例子中 “语句3” 并不会执行,示例代码:
for i in range(1,6):
print("1")
for j in range(1,6):
print("2")
continue
print("3")
相反的是 break 就是直接跳出循环 不会继续运行了。
①发工资问题
题目是这个,示例代码如下:
import random
money = 10000
for i in range(1,21):
score = random.randint(1,10)
if score < 5:
print("绩效分不足 不给你发工资!")
continue
if money <= 0:
print("公司真没钱了,下个月给你发钱,真的")
break
if money > 1000:
print(f"财务!给{i}号员工发1000元,公司还有{money}")
money -= 1000
continue
另一种方式:
import random
money = 10000
for i in range(1,21):
score = random.randint(1,10)
if score < 5:
print("绩效分不足 不给你发工资!")
continue
if money < 0:
print("公司真没钱了,下个月给你发钱,真的")
break
elif money > 1000:
print(f"财务!给{i}号员工发1000元,公司还有{money}")
money -= 1000
continue
十、函数
1、函数计数
函数计数 就是通过用户输入的一个字符串中,我们需要判断出一共有几个字符。可以用len()函数,示例如下:
name = "MyNameIsZhenJing"
print(len(name))
也可以利用for循环函数的特性来进行计算:
count = 0
for i in name:
count += 1
print(f"你一共输入了{count}个字符")
但是我们发现,当你要求出多个字符串的字符计数可能会比较麻烦,因此我们需要定义一个函数来优化代码:
def my_len(data):
count = 0
for j in data:
count += 1
print(f"你一共输入了{count}个字符")
my_len(name)
def 全名是 define 是一个定义函数的一个变量,我们先自定义了个变量 my_len 并且需要我们投喂数据 data,接着就是开始运行我们前面配置好的for循环计数,最后的 my_len(name) 就是将name用作data投喂数据进行运算。这是黑马程序员对它的一个定义和解释。
return并非刚需 我们后期会讲到。
2、传参函数
传参函数就是我们上一个内容所说的传入参数,大概内容也说过了,所以的话直接拿示例代码:
def add(x, y):
print(f"你输入的两个值的和为:{x+y}")
add(int(input("请输入第一个数字")), int(input("请输入第二个数字")))
其中呢 x y 就是一个传参函数,我们将用户输入的数字分别定义为 x y 两个变量来进行计算后输出结果。
①题目
温度检测是否正常,37.5°及以上异常,反之正常,示例代码:
def tem(num):
if num >=37.5:
print("您的温度异常")
elif num < 37.5:
print("你的温度正常")
tem(float(input("请输入你的温度:")))
3、返回值
①定义
定义还是偷黑马程序员的一个解释:
接下来看示例代码:
def add(x,y):
result = x + y
return result
r = add(int(input("请输入第一个数字:")),int(input("请输入第二个数字:")))
print(f"最终的数值为:{r}")
示例代码中的返回值就是将 result 这个变量赋值在了 r 上了,因此输出的 r 也就是计算完的 result。另外有一个重要的是 return 后面不要再写任何的代码,因为 return 的后面的代码不会运行。因此 return 要放在 def 的最后面!
②返回值 – None类型
你肯定会好奇说,如果我在自定义函数中没有写None类型,那它默认会返回什么?还是什么都没有?接下来看示例代码:
def hi():
print("你好我叫真境")
return None
print(f"返回值类型是{type(hi)}")
hi()
有无 return None 都是一样的结果 在type类型中显示的就是None。那他有什么用呢?我们看以下代码示例:
def age(num):
if num>=18:
return "Success"
else:
return None
result = age(int(input("请输入你的年龄:")))
if not result:
print("未成年人禁止入内")
示例代码中就是来判断是否成年的一个例子,如果年龄没有18周岁的话将会返回一个None的内容,接着一个if函数来判断是否有result的东西,没有就是未成年。None的话其实还有很多的应用场景,然后我又偷了黑马程序员给的内容:
3、函数的说明文档
什么是说明文档其实就是一个代码的注释,请看以下示例:
def age(num):
"""
:param num:用户输入的年龄进行判断
:return:返回值为判断是否成年
"""
if num>=18:
return "Success"
else:
return None
result = age(int(input("请输入你的年龄:")))
if not result:
print("未成年人禁止入内")
其中用三个引号包围起来的东西就是注释,用来标注代码的用途方便今后自己查看。如何快捷呼唤呢?就在PyCharm中连续键入 “”” 回车即可呼唤。
4、函数的嵌套
函数之间可以进行嵌套,请看以下示例:
def num():
print("1")
def num1():
print("2")
num()
num1()
这就是他的一个运行顺序。和前面的嵌套循环啊之类的都是同一个道理。
5、变量在函数中的作用域
①局部变量
请看以下代码示例:
def testA():
num = 100
print(num)
testA()
print(f"{num}")
但是没想到的是输出有错误:
print(f"{num}")
^^^
NameError: name 'num' is not defined. Did you mean: 'sum'?
100
诶 为什么printf无法输出num的值?因为def内的num只是一个局部变量因此运行完testA() 后变量都被销毁了,这就是为什么无法输出num值的原因。
②全局变量
那如果说我有两个函数都要用同一个变量呢?那就简单了,相信大家都会,请看以下示例代码:
num = 100
def testA():
print(num)
def testB():
print(num)
testA()
testB()
当然如果说你要修改里面的值,和上面的局部变量一样的道理。并不是数据被锁死了。
③global关键字
如果说你想在两个变量中来重新申明全局变量呢?请看以下代码:
num = 100
def testA():
print(num)
def testB():
global num
num = 200
print(num)
testA()
testB()
print(f"全局变量num的最终结果是:{num}")
在 testB() 函数中我们重新声明了下num的全局变量,在最终的全局变量输出中num的结果就是200。
④综合题目
题目直接用黑马程序员的题目:
示例代码:
def putmoney(putnum):
global money
money += putnum
def outmoney(outmoney):
global money
money -= outmoney
print("欢迎来到黑马ATM")
print("===============")
money = 5000000
name = input("请输入您的客户名字:")
while 1:
print("==========================================")
print(f"你好{name}欢迎来到黑马ATM,您的当前余额为{money},请作出你需要的操作:")
print("[1]存款")
print("[2]取款")
print("[0]退出")
op = input()
print("==========================================")
if op == "0":
print("欢迎下次来访本ATM!")
break
elif op == "1":
putmoney(int(input("请输入您的存款金额:")))
continue
elif op == "2":
outmoney(int(input("请输入您的取款金额:")))
continue