python导学

初识python

岗位 用途
it 自动化脚本(运维、测试开发)
大数据 大数据开发(spark、flink)
后端 数据计算(生物、化学、物理)
科学家 web应用程序
机器学习 开发ai程序

编程语言

自然语言→代码→【解释器(编译器)】→二进制→计算机

python安装

解释器

安装python环境实质上是安装解释器程序,cmd是调用.exe

开发环境

ctrl alt S 打开设置

ctrl D 复制当前行

shift alt ↑↓ 将当前行上下移动

shift F6 重命名

ctrl F 搜索

基础语法

字面量

含义:被写下来的固定的值

类型 描述 说明
数字number 支持四种,和现实写法一致 整数int、浮点数float、复数complex、布尔bool
字符串string 中文英文各类符号和数字组成 任意数量的字符组成,字符串要用双引号包围
列表list 有序可变 有序记录可变
元组tuple 有序不可变 有序记录不可变的数据集合
集合set 无序不重复 无序记录不重复的集合
字典dictionary 无序key-value 无序记录key-value型的集合
注释

单行# 空格 +内容

多行以一对三个双引号包裹,支持换行

变量

程序运行时能存储计算结果 或 能表示值的抽象概念(即 记录数据)

变量名称=变量值,支持加减乘除

money = 50
print("Now you have:", money)
money = money - 10
print("After buying ice-cream,you remain:",money,"dollar")
数据类型

type() 语句查看 字面量 数据类型

print(type(666)) 会输出 < class 'str' >

也可以查看 变量 中的数据类型

name="这是示例文字";name_type=type(name);print(name_type)

“变量无类型而数据有类型”:一个盒子装篮球或足球并不会变成某种球,他依然是个盒子,我们说“字符串变量”,是指“这个变量存贮的是字符串”。

数据类型转换

str、int和float之间:

特定场景下可以互换,当需求是“从文件中读取数字”时,默认是字符串,我们就要转换成数字类型;当需求是“input”语句时,他的默认结果也是字符串,我们要按需转换

int(x)、float(x)、str(x)都是带有结果(即 返回值)的,就是说可以用print直接输出或用变量存储结果值

num_STR = str(11)
# 现将numSTR的类型查看,为验证未破坏原结构则再输出一份原数据
print(type(num_STR) , num_STR)

运行结果:<class 'str'> 11

原则:万物皆可转字符串(通过添加双引号),但将字符串转数字则要确保字符串内容都是数字才可以

注意:浮点数转整数会丢失小数部分的精度

标识符

在python中我们给 变量、方法、类 等很多东西起名字,这些名字称之为标识符;

  • 内容限定

    中英数字下划线四类元素(不推荐中文、数字不可以开头

  • 大小写敏感

    字母的大小写是完全能够区分的

    Andy = "111"
    andy = "000"
    print(Andy)
    print(andy)
    
  • 不可使用关键字

    不可占用false、true/if、and/... ,同时注意,关键字也是大小写敏感

运算符
//,取整除 返回商的部分(9//2结果是4,9.0//2.0结果是4.0)
%,取余 返回除法的余数(20%10的结果是0)
**,指数 即“次方”(10**2结果是100)

print("1 + 2 - 3 * 4 =",1 + 2 - 3 * 4)

赋值运算符(把等号右边结果赋给左边变量)

复合赋值运算符

c ± =a等效c=c±a,同理,c * =a等效于c=c*a

字符串扩展
三种定义

单引号、双引号、三引号(此处三引,若用变量接收,则不成为注释)

如果想定义的字符串本身包含单双引号?

①单引号来定义 自身带双引号的内容 ,反之同理,用双引号来定义自身含单引号的内容;

②转移字符“\”右斜杠,来解除引号的效用

name="\"这是自带引号的内容"\"

拼接

一般用于字面量和字面量或变量和变量之间拼接

name = "这是将要被拼接的示例文字"

print("我是:" + name + ",很高兴认识你")

格式化

为什么引入占位?因为上述方法①变量过多时拼接起来太麻烦;②字符串无法和数字或其他类型拼接

message = "我的名字是 %s" % name

其中,百分号表示此处发生占位,s则表示将变量变成字符串放入占位的位置

多个变量占位时,变量要括起来,且要按顺序填入

class_num = 114514
avg_salary = 19198.10
message = "第%s期的数值是%s" % (class_num , avg_salary)
print(message)
格式化精度控制

上式代码块会将19198.10输出为19198.100000;

所以通过辅助符号“m.n”控制数据的宽度和精度;m很少使用,m小于自身时不生效;n控制小数点,会四舍五入

  • %5d:以11为例,会显示:

    【空格】【空格】【空格】11,即被空格补足了宽度 ;

  • %7.2f:以11.354为例:
    【】【】11.35 ;

格式化方式二

更优雅的解决方式:快速格式化的语法 f"内容{变量}" , 不控制精度而原样输出

name = "传智"
setupyear = 2006
stockprice = 19.99
print(f"我是{name},我成立于{setupyear},我今天的股价是{stockprice}")
对表达式格式化

什么是表达式?

一条具有明确执行结果代码语句 , 不存储数据时可以直接格式化:

print("1*1的结果是:%d" % (1*1))
print(f"1*1的结果是:{1*1}")
print(f"字符串的类型是:{type('字符串')}")
数据输入

input函数

image-20230714144015034

上图 print("请告诉我你是谁") 是多余的,可以直接 name = input("请告诉我你是谁") 实现;

注意:input默认接收的都是字符串,想得到其他类型需要自行转换

判断语句

布尔和比较运算符

布尔:表示真假
比较运算符:计算真假

==、!=、>、<、>=、<=

num1 = 10
num2 = 10
print(f"10 >= 10:{num1 >= num2}")
print(f"10 <= 10:{num1 <= num2}")

if基本

if age >= 18 :

​ print ("成年,请缴费")

if else

else :

​ print("未成年,可以免费游玩")

if elif else语句

某些场景下判断条件不止一个:(以猜数字游戏为例)

import random
# 生成随机数
secret_number = random.randint(1, 10)
# 限定猜测次数
guesses_taken = 0
max_guesses = 3
while guesses_taken < max_guesses:
    # 调用input来获取输入者的猜想数字
    guess = int(input("猜一个1到10之间的数字: "))
    # 猜测次数加一
    guesses_taken += 1
    # 比较猜测的与既定的随机数字
    if guess == secret_number:
        print("芜湖!猜对了!")
        break
    else:
        print("朋友,这是一场豪赌,再来一次")
# 次数达到上限仍未猜对
if guesses_taken == max_guesses:
    print("それは残念です,你没有猜对。数字是: ", secret_number)

判断的嵌套

场景:不仅条件并列,还会有满足前置才会二次判断的多层判断需求;

关键点在于空格缩进,python据此判断层次关系

if、elif、else可以自由组合,满足缩进即可;

案例

import random
secret_number = random.randint(1, 10)
guess_num = int(input("你想蒙几:"))
# 以上是构建了一个随机的数字变量,下面开始用if
if guess_num == secret_number:
    print("恭喜第一次就猜对了")
else:
    if guess_num > secret_number:
        print("你猜大了")
    else:
        print("你猜小了")
# 第二次机会:
    guess_num = int(input("第二次机会,再蒙一次:"))
    if guess_num == secret_number:
        print("还不错,第二次猜中也不赖了")
    else:
        if guess_num > secret_number:
            print("你猜大了")
        else:
            print("你猜小了")
# 第三次,最后一次机会:
            guess_num = int(input("最后一次机会咯:"))
            if guess_num == secret_number:
                print("勉勉强强,千钧一发")
            else:
                print("怎么回事?不大行啊你这,机会没了")

循环语句

循环广泛存在,图片或音乐轮播、动态壁纸、批量修图等

while基础语法

i = 0

while i <= 100 :

​ print ...

​ i += 1

案例和嵌套应用
# 无限机会直到猜中、每次猜错提示大小、猜完显示已使用的次数
import random
secret_number = random.randint(1, 100)

# 通过count来计数:
count = 0
# 通过Bool来做是否继续循环的标记
flag = True
while flag:
    guess = int(input("来了哟~:"))
    count += 1
    if guess == secret_number:
        print("什么欧皇,猜中了???")
        flag = False
        # 这里是终止条件
    else:
        if guess > secret_number:
            print("猜大了哟~( ̄︶ ̄)")
        else:
            print("小了,嘿嘿(●'◡'●)")
print(f"猜了{count}次,你也真够闲的(笑)")

while循环也是基于空格缩进的

  • 默认print语句是自动换行的,在句尾加上 end='' ,即可输出不换行
  • 符号 \t 相当于tab键,可让多行字符串对齐(制表符)

下面打印乘法表:分别用两个循环控制行(i≤9)和每一行的内容(j≤i)、每行都在进行 j*i、注意换行和对齐关系;

image-20230714164205057

image-20230714165705291

执行流程如上示;

for语法和应用
区别
  • for 临时变量 in 待处理数据集 :

    ​ 此循环条件满足时执行的代码

    for x in name : print ( x )

    从运行结果(竖排列出name里的每个字母)看,是将字符串依次取出,因此for也叫 遍历循环

    注意:无法定义循环条件,只能从被处理的数据集中依次取出内容;

    理论上python无法无限处理(无限循环数据集),处理多少次完全取决于数据;

练习:计数一串句子里有多少个“a”

sentence = "Now let's count how many E there are in this sentence."
# 定义一个变量,以调用它来统计E的个数
count = 0
#开始统计
for x in sentence:
    if x == "e":
        count += 1

print(f"被统计的句子中有{count}个字母e")
range

待处理数据集严格叫 “序列类型” ,其指,内容可以一个个依次取出的,包括

  • 字符串

  • 列表

  • 元组等

    语法①为 range(num) ,是获取一个从0开始到num结束的数字序列,比如range(5)取得的是 [0,1,2,3,4]

    range(5,10)

    [5,6,7,8,9]

    range(5,10,2) ,step默认1,是步长/步进

    [5,7,9]

变量作用域

for后面跟的临时变量在规范中,作用范围只在循环内部,不应该在外部被访问到(但实际上是可行的),如果确实需要访问,则需要在循环开始前就定义好 i = 0

循环中断break和continue

特殊情况:暂时跳过某次循环直接进行下一次 或 提前退出循环

    • 用于终止本次,直接进入下一次,在for和while效果一致
    • 只作用自己所在的循环,对其他循环不生效
    • 直接结束循环,for和while一致

    • 遇到break就去运行外面的语句

      for i in range(1,6):
          print("这是第①条语句,会被显示")
          for j in range(1,6):
              print("这是第②条语句,会被显示")
              break
              print("这是第③条语句,因为被break阻断所以不会显示")
      print("这是第④条语句,会被显示")
      # 综上,四句话应该按①②④的排列出现五次
      
综合

工资案例,需求如下:

  1. 公司余额10000给20名员工,员工编号1~20依次领取,每人可领1000

  2. 判断绩效分:1到10随机生成,低于5则不发工资,轮到下一位

  3. 余额发完则结束

    要求:

    • 使用循环

    • continue用于跳过员工,break直接停止全程

    • 随机数用random生成

      image-20230714181402984
      money = 10000
      for i in range(1,21):
          import random
          score = random.randint(1,10)
      
          if score < 5:
              print(f"社畜{i}号的绩效分是{score},不及格,来下一位~")
              continue
      
      # 先判断 公司的余额 还够不够发所有人工资的
          if money >= 1000:
              money -= 1000
              print(f"社畜{i}号,来拿钱吧,你拿完之后公司就剩 :{money} 了")
          else:
              print(f"别抢了 , 地主家余粮就剩 :{money} 了, 谁都甭想要啦!")
              break
      
posted on 2023-07-14 18:29  言行一  阅读(24)  评论(0编辑  收藏  举报