Python学习(二)—— 基础语法(上)

目录

一,表达式和常量和变量

[1.1 表达式](#1.1 表达式)

[1.2 变量](#1.2 变量)

[1.3 动态类型特性](#1.3 动态类型特性)

[1.4 输入](#1.4 输入)

二,运算符

[2.1 算术运算符](#2.1 算术运算符)

[2.2 关系运算符](#2.2 关系运算符)

[2.3 逻辑运算符](#2.3 逻辑运算符)

[2.4 赋值运算符](#2.4 赋值运算符)

[2.5 练习](#2.5 练习)

三,语句

[3.1 条件语句](#3.1 条件语句)

[3.2 while循环](#3.2 while循环)

[3.3 for循环](#3.3 for循环)

四,实践

[4.1 设置初始属性](#4.1 设置初始属性)

[4.2 设置性别](#4.2 设置性别)

[4.3 设置出生点](#4.3 设置出生点)

[4.4 生成人生经历](#4.4 生成人生经历)

[4.5 完整代码](#4.5 完整代码)


注:本系列是建立在已经完成C/C++ 的语法基础学习上的,所以只快速展示 Python 基本语法,基本看一遍就懂

一,表达式和常量和变量

1.1 表达式

我们可以把 Python 当场一个计算器来进行一些算术运算:

python 复制代码
print(1 + 2 - 3)
print(1 + 2 * 3)
print(1 + 2 / 3)
  • 形如 1 + 2 - 3 这样的算式,在编程语言中称为表达式 ;算式的运算结果称为表达式的返回值
  • 其中 1,2,3 这种称为 字面值常量,+ - * / 这种称为 运算符 或者 操作符
  • 第三个打印结果最后是665,为什么不是667呢?第三个结果我们称为浮点数,规则为 IEEE754 标准,在这套规则下,在内存中表示浮点数的时候, 可能会存在微小的误差

示例:给定四个分数, 67.5, 89.0, 12.9, 32.2 , 编写代码, 求这四个分数的平均数

python 复制代码
print( (67.5 + 89.0 + 12.9 + 32.2) / 4 )

1.2 变量

Python 的变量在定义时,前面不带类型,直接就是:

python 复制代码
a = 10

类似与C++定义变量时前面自带了auto,然后又把auto隐藏掉了;Python 的变量也遵守变量定义的基本规则

可以直接用print打印变量的值,也可以打印变量的类型:

python 复制代码
a = 10
b = 0.5
c = 'hello'
print(a)
print(b)
print(c)
print(type(a))
print(type(b))
print(type(c))

除了上述类型之外,Python 中还有 bool,list,tuple,dict,自定义类型等等,我们后续再介绍

1.3 动态类型特性

在 Python 中,一个变量是什么类型,是可以在 "程序运行" 过程中发生变化的,这个特性称为 "动态类型" ,如下代码:

python 复制代码
a = 10
print(f'a = {a}, type(a) = {type(a)}')
# 直接在代码中对a进行跨类型赋值
a = 'hello'
print(f'a = {a}, type(a) = {type(a)}')
  • C++/Java 这样的语言则不允许这样的操作,一个变量定义后类型就是固定的了,这种特性则称为 "静态类型"
  • 所以"动态特性"是Python 特有的

1.4 输入

C有scanf读取用户从键盘输入的值,C++有cin等,那么Python也有读取键盘输入数据的方法如下图:

python 复制代码
a = input('请输入第一个数:')
b = input('请输入第二个数:')
print(f'a = {a}, type(a) = {type(a)}')
print(f'a = {b}, type(a) = {type(b)}')

#注意,在Python中,读取到的键盘输入的值是字符串类型,要对数字进行计算需要转化下类型
a = int(a)
b = int(b)
print(f'a + b = {a + b}')

二,运算符

2.1 算术运算符

①首先是最基础的加减乘除取模:

python 复制代码
print(10 + 20) #加法
print(10 - 20) #减法
print(10 * 20) #乘法
print(10 / 20) #除法
print(10 % 20) #取模

② 求乘方

在 C/C++中,求乘方操作一般由库函数来完成,但是Python针对求乘方设计了专门的运算符:

cpp 复制代码
print(4 ** 2) #求4的2次方
print(4 ** 0.5) #也可以算小数次方

③取整除法

整数除以整数,但是舍弃掉小数部分并向下取整,注意,是舍弃小数,不是四舍五入:

cpp 复制代码
print(7 // 2) #结果为3.5,舍弃小数,结果为3
print(-7 // 2) #结果为-3.5,舍弃小数并向下取整,结果为-4

2.2 关系运算符

这个就是和 C/C++一样了,如下代码:

python 复制代码
a = 10
b = 20
print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)

在 Python 中还可以对两个字符串进行大小比较,比较规则是"字典序"

2.3 逻辑运算符

这个也基本和 C/C++ 一样,就是"逻辑或","逻辑与","逻辑取反",如下代码:

python 复制代码
a = True
b = False
print(a and b) #逻辑与,有一个假,结果为假
print(a or b) #逻辑或,有一个真,结果为真
print(not a) #逻辑取反
print(not b) 

和其他编程语言类似,Python 也存在短路求值的规则:

  • 对于 and,如果左侧表达式为 False,则整体一定为 False,右侧表达式不再执行
  • 对于 or,如果左侧表达式为 True,则整体一定为 True,右侧表达式不再执行

2.4 赋值运算符

这个也是 C/C++ 一样的,如下代码:

python 复制代码
a = b = 10 #链式赋值
a, b = 10, 20 #多元赋值

a = 10
b = 20
a, b = b, a #也是多元赋值

a += 10 #等价于 a = a + 1,其它复合赋值运算符也是同理
a -= 10 
a *= 10 
a /= 10     
a %= 10

注意:

  • 像 C++ / Java 中,存在 ++ -- 这样的 自增/自减 运算符;但Python 中则不支持这种运算,如果需要使用,直接使用 += 1 或者 -= 1
  • 除了上述之外,Python 中还有一些运算符,比如 身份运算符 (is,is not),成员运算符 (in,not in),位运算符 ( & | ~ ^ >) 等。

2.5 练习

(1) [多选] 以下关于变量之间加法运算的说法, 正确的是:

A. Python 中的字符串之间够能相加.

B. Python 中的字符串可以和整数相加.

C. Python 中的整数可以和浮点数相加.

D. Python 中的整数可以和布尔值相加.

解答:答案是A C D。如果把布尔类型和整数进行运算,就会把 True 当作1,把 False 当作0
(2) [单选] 以下关于类型的说法, 正确的是:

A. Python 中既有字符串类型, 也有字符类型.

B. Python 中既有 float, 也有 double.

C. Python 中既有 int, 也有 long

D. Python 中的整数表示范围无上限.

解答:答案是 D。Python 只有字符串类型没有字符类型;只有 float 没有 double;只有 int 没有 long
(3) [单选] 以下 Python 代码, 合法的是

A. int a = 10

B. a = 10;

C. a = true

D. a = 'aaa' + 10

解答:答案为 B。Python创建变量时不需要指定类型,如果要指定类型,要这样"a:int = 10"; 在 Python 中,分号是可有可无的; true 需要首字母大写;Python 中字符串和整数不能运算

三,语句

3.1 条件语句

  • if 后面的条件表达式, 没有 ( ), 使用 : 作为结尾.
  • if / else 命中条件后要执行的 "语句块", 使用 缩进 (通常是 4 个空格或者 1 个 tab)来表示, 而不是 { }
  • 对于多条件分支, 不是写作 else if, 而是 elif (合体了).
python 复制代码
a = int(input("输入一个数:"))
if a > 0:
    print('输入的数是正数')
elif a < 0:
    print('输入的数是负数')
else:
    pass #pass表示空语句

3.2 while循环

计算 1 - 100 所有数的和:

python 复制代码
sum = 0
num = 1
while num <= 100:
    sum += num
    num += 1
print(sum)

计算5的阶乘:

python 复制代码
result = 1
n = 1
while n <= 5:
    result *= n
    n += 1
print(result)

其余规则和 C/C++ 一直,while里面也可以嵌套 while

3.3 for循环

对于for循环,Python 的使用方法和 C/C++ 很不相同,基本语法格式为:

python 复制代码
for 循环变量 in 可迭代对象:
    循环体

所谓的 "可迭代对象",指的是 "内部包含多个元素,能一个一个把元素取出来的特殊变量",下面我们通过多个示例来熟悉 Python 的 for 循环的使用:

打印 1-10

python 复制代码
#使用 range 函数,生成一个可迭代对象,范围是[1, 11),也就是[1, 10]
for i in range(1, 11):
    print(i)

这个有点类似 C++11 中的范围for

打印 2,4,6,8,10

python 复制代码
#range 的第三个参数可以指定迭代时候的 "步长". 也就是一次让循环变量加几.
for i in range(2, 12, 2):
    print(i)

从10开始打印到1

cpp 复制代码
# 步长也可以设置为负数
for i in range(10, 0, -1):
    print(i)

计算1-100 所有数字的和

python 复制代码
sum = 0
for i in range(1, 101):
    sum += i
print(sum)

循环语句的 continue 和break用法和C/C++是一模一样的,这里不再赘述

四,实践

下面我们来搞一个"人生重开模拟器"

4.1 设置初始属性

在游戏中我们设定四个属性:颜值 (face) 体质 (strong) 智力 (iq) 家境 (home)

我们约定每个属性的范围为 [1, 10], 并且总和不能超过 20;如果玩家输入的初始属性不合理, 就提示输入有误, 重新输入:

python 复制代码
print("+---------------------------------------------------------------------+")
print("|                                                                     |")
print("|                   花有重开日, 人无再少年                               |")
print("|                                                                     |")
print("|                   欢迎来到, 人生重开模拟器                             |")
print("|                                                                     |")
print("+---------------------------------------------------------------------+")
# 设置初始属性
while True:
    print("请设定初始属性(可用总点数 20)")
    face = int(input("设定 颜值(1-10):"))
    strong = int(input("设定 体质(1-10):"))
    iq = int(input("设定 智力(1-10):"))
    home = int(input("设定 家境(1-10):"))
    if face < 1 or face > 10:
        print("颜值设置有误!")
        continue
    if strong < 1 or strong > 10:
        print("体质设置有误!")
        continue
    if iq < 1 or iq > 10:
        print("智力设置有误!")
        continue
    if home < 1 or home > 10:
        print("家境设置有误!")
        continue
    if face + strong + iq + home > 20:
        print("总点数超过了 20!")
        continue
    print("初始属性设定完成!")
    break

4.2 设置性别

  • 通过 random.randint(1, 6) 生成一个 [1, 6] 的随机整数, 类似于掷色子.
  • 如果是单数, 则性别设为男孩
  • 如果是双数, 则性别设为女孩.
  • 男孩和女孩会遇到不同的事件.
python 复制代码
#设置性别
point = random.randint(1, 6) # 掷色子
if point % 2 == 1:
    gender = 'boy'
    print("你是个男孩")
else:
    gender = 'girl'
    print("你是个女孩")

4.3 设置出生点

首先按照家境(home), 分成四个档位.:

  • 10 是第一档. 加成最高
  • [7, 9] 是第二档. 也有一些加成
  • [4, 6] 是第三档. 加成较少
  • [1, 3] 是第四档. 会扣掉属性.

再扔一次色子, 生成 [1, 3] 的随机数, 用来表示每一种细分情况

python 复制代码
#设置出生点
point = random.randint(1, 3) # 掷色子
if home == 10:
    print('你出生在帝都, 你的父母是高官政要')
    home += 1
    iq += 1
    face += 1
elif 7 <= home <= 9:
    if point == 1:
        print('你出生在大城市, 你的父母是公务员')
        face += 2
    elif point == 2:
        print('你出生在大城市, 你的父母是大企业高管')
        home += 2
    else:
        print('你出生在大城市, 你的父母是大学教授')
        iq += 2
elif 4 <= home <= 6:
    if point == 1:
        print('你出生在三线城市, 你的父母是教师')
        iq += 1
    elif point == 2:
        print('你出生在镇上, 你的父母是医生')
        strong += 1
    else:
        print("你出生在镇上, 你的父母是个体户")
        home += 1
else:
    if 1 <= point <= 2:
        print('你出生在村里, 你的父母是辛苦劳作的农民')
        strong += 1
        face -= 2
    elif 3 <= point <= 4:
        print('你出生在穷乡僻壤, 你的父母是无业游民')
        home -= 1
    else:
        print('你出生在镇上, 你父母感情不和')
        strong -= 1

4.4 生成人生经历

按照年龄, 把人生经历分成四个阶段:

  • 幼年阶段 [1, 10]
  • 青年阶段 [11, 20]
  • 壮年阶段 [20, 50]
  • 老年阶段 50 岁以上.

每个阶段都会有不同的精力和事件发生:

  • 幼年阶段可塑性强, 体质, 颜值, 智力都会有较快变化
  • 青年阶段主要是求学, 同时父母一辈会有明显变化, 智力和家境会有明显变化
  • 壮年阶段相对平稳, 属性变化不大, 主要是一些随机事件影响到属性
  • 老年阶段体质, 颜值, 智力都会显著退化, 并且随着年龄的上升, 疾病/死亡的风险逐渐升高

此处我们以幼年为例, 简单实现一下这里的处理逻辑:

  • 使用 for 循环, 按照年龄循环起来.
  • 针对每一年, 先掷一次 [1, 3] 的色子, 根据不同的随机数值, 来触发不同的事件.
  • 根据性别, 年龄, 各种属性, 来触发不同的事件,这里都使用 if - else 的方式来组织.
  • 不同的事件可能会对属性有正面/负面的影响. 在每一年的最后, 打印这一年遇到的事情.
  • 如果夭折, 则直接 sys.exit(0) 退出程序.
  • 使用 time.sleep(1) 使程序暂停执行 1s, 方便观察程序结果.
python 复制代码
#生成人生经历,这里以幼年为例
for age in range(1, 11):
    info = f'你今年 {age} 岁, '
    point = random.randint(1, 3)
    # 性别触发事件
    if gender == 'girl' and home <= 3 and point == 1:
        info += '你家里人重男轻女思想非常严重, 你被遗弃了!'
        print(info)
        print("游戏结束!")
        sys.exit(0)
    # 体质触发的事件
    elif strong < 6 and point != 3:
        info += '你生了一场病, '
        if home >= 5:
            info += '在父母的精心照料下恢复了健康'
            strong += 1
            home -= 1
        else:
            info += '你的父母没精力管你, 你的身体状况更糟糕了'
            strong -= 1
    # 颜值触发的事件
    elif face < 4 and age >= 7:
        info += '你因为长的太丑, 别的小朋友不喜欢你, '
        if iq > 5:
            info += '你决定用学习填充自己'
            iq += 1
        else:
            if gender == 'boy':
                info += '你和别的小朋友经常打架'
                iq -= 1
                strong += 1
            else:
                info += '你经常被别的小朋友欺负'
                strong -= 1
    # 智商触发的事件
    elif iq < 5:
        info += '你看起来傻傻的, '
        if home >= 8 and age >= 6:
            info += '你的父母给你送到更好的学校学习'
        elif 4 <= home <= 7:
            if gender == 'boy':
                info += '你的父母鼓励你多运动, 加强身体素质'
                strong += 1
            else:
                info += '你的父母鼓励你多打扮自己'
                face += 1
        else:
            info += '你的父母为此经常吵架'
            if point == 1:
                strong -= 1
            elif point == 2:
                iq -= 1
    # 健康成长
    else:
        info += '你健康成长, '
        if point == 1:
            info += '看起来更聪明了'
            iq += 1
        elif point == 2:
            info += '看起来更好看了'
            face += 1
        else:
            info += '看起来更结实了'
            strong += 1
        print('-------------------------------------------')
        print(info)
        print(f'strong={strong}, face={face}, iq={iq}, home={home}')
        time.sleep(1)

4.5 完整代码

python 复制代码
import random
import sys
import time
print("+---------------------------------------------------------------------+")
print("|                                                                     |")
print("|                   花有重开日, 人无再少年                               |")
print("|                                                                     |")
print("|                   欢迎来到, 人生重开模拟器                             |")
print("|                                                                     |")
print("+---------------------------------------------------------------------+")
# 设置初始属性
while True:
    print("请设定初始属性(可用总点数 20)")
    face = int(input("设定 颜值(1-10):"))
    strong = int(input("设定 体质(1-10):"))
    iq = int(input("设定 智力(1-10):"))
    home = int(input("设定 家境(1-10):"))
    if face < 1 or face > 10:
        print("颜值设置有误!")
        continue
    if strong < 1 or strong > 10:
        print("体质设置有误!")
        continue
    if iq < 1 or iq > 10:
        print("智力设置有误!")
        continue
    if home < 1 or home > 10:
        print("家境设置有误!")
        continue
    if face + strong + iq + home > 20:
        print("总点数超过了 20!")
        continue
    print("初始属性设定完成!")
    break
#设置性别
point = random.randint(1, 6) # 掷色子
if point % 2 == 1:
    gender = 'boy'
    print("你是个男孩")
else:
    gender = 'girl'
    print("你是个女孩")
#设置出生点
point = random.randint(1, 3) # 掷色子
if home == 10:
    print('你出生在帝都, 你的父母是高官政要')
    home += 1
    iq += 1
    face += 1
elif 7 <= home <= 9:
    if point == 1:
        print('你出生在大城市, 你的父母是公务员')
        face += 2
    elif point == 2:
        print('你出生在大城市, 你的父母是大企业高管')
        home += 2
    else:
        print('你出生在大城市, 你的父母是大学教授')
        iq += 2
elif 4 <= home <= 6:
    if point == 1:
        print('你出生在三线城市, 你的父母是教师')
        iq += 1
    elif point == 2:
        print('你出生在镇上, 你的父母是医生')
        strong += 1
    else:
        print("你出生在镇上, 你的父母是个体户")
        home += 1
else:
    if 1 <= point <= 2:
        print('你出生在村里, 你的父母是辛苦劳作的农民')
        strong += 1
        face -= 2
    elif 3 <= point <= 4:
        print('你出生在穷乡僻壤, 你的父母是无业游民')
        home -= 1
    else:
        print('你出生在镇上, 你父母感情不和')
        strong -= 1

#生成人生经历,这里以幼年为例
for age in range(1, 11):
    info = f'你今年 {age} 岁, '
    point = random.randint(1, 3)
    # 性别触发事件
    if gender == 'girl' and home <= 3 and point == 1:
        info += '你家里人重男轻女思想非常严重, 你被遗弃了!'
        print(info)
        print("游戏结束!")
        sys.exit(0)
    # 体质触发的事件
    elif strong < 6 and point != 3:
        info += '你生了一场病, '
        if home >= 5:
            info += '在父母的精心照料下恢复了健康'
            strong += 1
            home -= 1
        else:
            info += '你的父母没精力管你, 你的身体状况更糟糕了'
            strong -= 1
    # 颜值触发的事件
    elif face < 4 and age >= 7:
        info += '你因为长的太丑, 别的小朋友不喜欢你, '
        if iq > 5:
            info += '你决定用学习填充自己'
            iq += 1
        else:
            if gender == 'boy':
                info += '你和别的小朋友经常打架'
                iq -= 1
                strong += 1
            else:
                info += '你经常被别的小朋友欺负'
                strong -= 1
    # 智商触发的事件
    elif iq < 5:
        info += '你看起来傻傻的, '
        if home >= 8 and age >= 6:
            info += '你的父母给你送到更好的学校学习'
        elif 4 <= home <= 7:
            if gender == 'boy':
                info += '你的父母鼓励你多运动, 加强身体素质'
                strong += 1
            else:
                info += '你的父母鼓励你多打扮自己'
                face += 1
        else:
            info += '你的父母为此经常吵架'
            if point == 1:
                strong -= 1
            elif point == 2:
                iq -= 1
    # 健康成长
    else:
        info += '你健康成长, '
        if point == 1:
            info += '看起来更聪明了'
            iq += 1
        elif point == 2:
            info += '看起来更好看了'
            face += 1
        else:
            info += '看起来更结实了'
            strong += 1
        print('-------------------------------------------')
        print(info)
        print(f'strong={strong}, face={face}, iq={iq}, home={home}')
        time.sleep(1)
相关推荐
fegxg几秒前
AirSim 使用Pygame鼠标键盘控制无人机
python·无人机·pygame
Bruce_Liuxiaowei3 分钟前
如何使用Python将TS文件转换为MP4
开发语言·python·ffmpeg·ts·mp4
独自破碎E16 分钟前
Java 面经之 Kafka
java·开发语言·kafka
麻瓜老宋26 分钟前
C语言之波兰表达式的交互运行
c语言·开发语言·数据结构·算法
强里秋千墙外道34 分钟前
【Qt】Qt+Visual Studio 2022环境开发
开发语言·qt·visual studio
SchrodingerSDOG44 分钟前
算法刷题Day18: BM41 输出二叉树的右视图
数据结构·python·算法
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇03】变量和常量
开发语言·vscode·unity·c#·游戏引擎
B站计算机毕业设计超人1 小时前
计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设
大数据·爬虫·python·机器学习·课程设计·数据可视化·推荐算法
Aix9591 小时前
Dijkstra算法最短路径可视化(新)
python·opencv·算法