Python基础语法(2)

目录

一、顺序语句

二、条件语句

2.1 什么是条件语句

2.2 语法格式

2.1.1 if

2.2.2 if - else

2.2.3 if - elif - else

2.2.4 缩进和代码块

2.2.5 练习

1) 输入一个整数,判定是否是奇数

2) 输入一个整数, 判定是正数还是负数

3) 判定年份是否是闰年

三、空语句 pass

四、循环语句

4.1 while循环

4.1.1 打印 1-10 的整数

4.1.2 计算 1-100 的和

4.1.3 计算 5 的阶乘

4.1.4 求 1! + 2! + 3! + 4! + 5!

4.2 for循环

4.2.1 打印 1-10

4.2.2 打印 2, 4, 6, 8, 10

4.2.3 打印 10-1

4.2.4 求 1 - 100 的和

4.3 continue

模拟吃包子。吃第 3 个包子的时候吃出了一只虫。

4.4 break

4.4.1 模拟吃包子。吃第 3 个包子的时候吃出了半只虫。

4.4.2 输入若干个数字,求平均值。使用 "分号" 作为结尾。

五、综合案例:实现 "人生重开模拟器"

5.1 设置初始属性

5.2 设置性别

5.3 设置出生点

5.4 针对每一岁, 生成人生经历


一、顺序语句

        默认情况下,Python 的代码执行顺序是按照从上到下的顺序,依次执行的。

print("1")
print("2")
print("3")

        执行结果一定为 "123",而不会出现 "321" 或者 "132" 等,这种按照顺序执行的代码,我们称为顺序语句

        这个顺序是很关键的,编程是一件明确无歧义的事情,安排好任务的顺序计算机才能够正确的进行执行。就好像人生的顺序,是上学,工作,结婚,生子。一旦这里的顺序乱了,就很麻烦。

二、条件语句

2.1 什么是条件语句

条件语句能够表达 "如果 ... 否则 ..." 这样的语义,这构成了计算机中基础的逻辑判定

条件语句也叫做分支语句,表示了接下来的逻辑可能有几种走向。

一个典型的例子:

如果丘处机没有路过牛家村,

  1. 那么金兵不会死在郭,杨两家手上
  2. 郭,杨两家就不会流亡北方
  3. 郭夫人就不会去到大漠,完颜洪烈就不会遇到包惜弱
  4. 郭靖就不会和江南七怪救了铁木真
  5. 蒙古就不会统一
  6. 蒙古铁骑就不会西征
  7. 欧洲就不会出现火药,也就不会出现文艺复兴,大航海。
  8. 大炮就不会从欧洲传到日本,日本得不到统一
  9. 完颜洪烈就不会全力战,金国内乱
  10. 宋朝不会灭亡,并诞生出资本主义,中国成为最发达的国家。

如果  我认真敲代码  

        我就很容易找到工作

否则  

        我就容易毕业就失业

        其中 "我认真敲代码" 称为 条件,如果条件成立(条件为真),则会出现 "我就很容易找到工作" 这个情况。如果条件不成立(条件为假),则会出现 "我就容易毕业就失业"。

当然,同样的逻辑,还可以反着表达。

如果 我选择躺平摆烂  

        我就容易毕业就失业

否则  

        我就很容易找到工作

虽然结构变了,但是整体表达的语义是等价的。

2.2 语法格式

Python 中使用 if else 关键字表示条件语句。

2.1.1 if

if expression:do_something1do_something2
next_something

如果expression值为True,则执行 do_something1,do_something2,next_something

如果expression值为False,则只执行 next_something,不执行 do_something1,do_something2

2.2.2 if - else

if expression:do_something1
else:do_something2

如果 expression 值为 True,则执行 do_something1

如果 expression 值为 False, 则执行 do_something2

2.2.3 if - elif - else

如果 expression1 值为 True,则执行 do_something1

如果 expression1 值为 False,并且 expression2 为 True 则执行 do_something2

如果 expression1 值为 False,并且 expression2 为 False 则执行 do_something3

注意:Python中的条件语句写法,和很多编程语言不太一样。

  • if 后面的条件表达式,没有 ( ),使用:作为结尾。
  • if / else 命中条件后要执行的 "语句块",使用缩进 (通常是 4 个空格或者 1 个 tab)来表示,而不是 { }
  • 对于多条件分支,不是写作 else if,而是 elif (合体了)。

示例:输入 1 表示愿意认真学习,输入 2 表示躺平摆烂。

choice = input("输入 1 表示认真学习, 输入 2 表示躺平摆烂: ")if choice == "1":print("你会找到好工作!")
elif choice == "2":print("你可能毕业就失业了!")
else:print("你的输入有误!")

2.2.4 缩进和代码块

代码块指的是一组放在一起执行的代码。

在 Python 中使用缩进表示代码块。不同级别的缩进,程序的执行效果是不同的。

# 代码1
a = input("请输入一个整数: ")
if a == "1":print("hello")print("world")# 代码2
a = input("请输入一个整数: ")
if a == "1":print("hello")
print("world")

注意上述代码的区别。

        在代码1 中,print("world") 有一级缩进,这个语句属于 if 内的代码块,意味着条件成立,才执行, 条件不成立,则不执行。

        在代码2 中,print("world") 没有缩进,这个语句是 if 外部的代码,不属于 if 内部的代码块,意味着条件无论是否成立,都会执行。

另外,代码块内部还可以嵌套代码块。

a = input("请输入第一个整数: ")
b = input("请输入第二个整数: ")
if a == "1":if b == "2":print("hello")print("world")
print("python")

在这个代码中,

  • print("hello") 具有两级缩进,属于 if b == "2" 条件成立的代码块。
  • print("world") 具有一级缩进,属于 if a == "1" 条件成立的代码块。
  • print("python") 没有缩进,无论上述两个条件是否成立,该语句都会执行。

        基于缩进的方式表示代码块。带来的好处就是强制要求程序猿要写明确的缩进,来明确代码之间的相对关系。如果缩进书写的不对,则直接报错。

        像 C++ / Java 这些语言,即使完全不写缩进,语法也不会报错。代码可读性就比较差。

        同时,带来的坏处就是,如果缩进层次比较多,就容易分不清楚某个语句属于哪个层级。

if a == 1:if b == 2:if c == 3:if d == 4:if e == 5:if f == 6:if g == 7:print("hello")print("1")print("2")

2.2.5 练习

1) 输入一个整数,判定是否是奇数
a = int(intput("请输入一个整数: "))
if a % 2 == 0:print("偶数")
else:print("奇数")  
2) 输入一个整数, 判定是正数还是负数
a = int(input("请输入一个整数: "))
if a > 0:print("正数")
elif a < 0:print("负数")
else:print("为 0") 
3) 判定年份是否是闰年
year = int(input("请输入年份: "))
if year % 100 == 0:# 判定世纪闰年if year % 400 == 0:print("闰年")else:print("平年")
else:# 判定普通闰年if year % 4 == 0:print("闰年")else:print("平年")
year = int(input("请输入年份: "))if (year % 100 != 0 and year % 4 == 0) or year % 400:print("闰年")
else:print("平年")

三、空语句 pass

代码示例:输入一个数字,如果数字为 1,则打印 hello。

a = int(input("请输入一个整数:"))
if a == 1:print("hello")

这个代码也可以等价写成:

a = int(input("请输入一个整数:"))
if a != 1:pass
else:print("hello")

        其中 pass 表示 空语句,并不会对程序的执行有任何影响,只是占个位置,保持 Python 语法格式符合要求。

#如果代码写作:
a = int(input("请输入一个整数:"))
if a != 1:
else:
print("hello")
#程序是不符合 Python 语法的, 会直接报错

四、循环语句

有些操作是需要反复执行的,这种就需要使用循环。

4.1 while循环

基本语法格式:

while 条件:循环体

条件为真,则执行循环体代码。条件为假,则结束循环。

代码示例:

4.1.1 打印 1-10 的整数

num = 1
while num <= 10:print(num)num += 1

4.1.2 计算 1-100 的和

sum = 0
num = 1
while num <= 100:sum += numnum += 1
print(sum)

4.1.3 计算 5 的阶乘

result = 1
n = 1
while n <= 5:result *= nn += 1
print(result)

4.1.4 求 1! + 2! + 3! + 4! + 5!

num = 1
sum = 0
while num <= 5:factorResult = 1i = 1while i <= num:factorResult *= ii += 1sum += factorResultnum += 1
print(sum)

这个程序用到了两重循环,也就是在循环语句中也可以套循环。

4.2 for循环

基本语法格式:

for 循环变量 in 可迭代对象:循环体

注意

  • python 的 for 和其他语言不同,没有 "初始化语句","循环条件判定语句","循环变量更新语句",而是 更加简单
  • 所谓的 "可迭代对象",指的是 "内部包含多个元素,能一个一个把元素取出来的特殊变量"

代码示例:

4.2.1 打印 1-10

for i in range(1, 11):print(i)
  • 使用 range 函数,能够生成一个可迭代对象。生成的范围是 [1, 11),也就是 [1, 10] 

4.2.2 打印 2, 4, 6, 8, 10

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

4.2.3 打印 10-1

for i in range(10, 0, -1):print(i)
  •  range 的 步长 也可以设定成负数。

4.2.4 求 1 - 100 的和

sum = 0
for i in range(1, 101):sum += i
print(sum)

4.3 continue

continue 表示结束这次循环,进入下次循环。

代码示例:

模拟吃包子。吃第 3 个包子的时候吃出了一只虫。

for i in range(1, 6):if i == 3:continueprint(f"吃完第 {i} 个包子")

4.4 break

break 表示结束整个循环

代码示例:

4.4.1 模拟吃包子。吃第 3 个包子的时候吃出了半只虫。

for i in range(1, 6):if i == 3:breakprint(f"吃完第 {i} 个包子")

4.4.2 输入若干个数字,求平均值。使用 "分号" 作为结尾。

sum = 0
count = 0
while True:num = input("请输入数字:")if num == ';':breaknum = float(num)sum += numcount += 1
print(sum / count)

五、综合案例:实现 "人生重开模拟器"

        这是一款之前很火的文字类小游戏。玩家输入角色的初始属性之后,就可以开启不同的人生经历。 大家可以在网上搜索 "人生重开模拟器",就可以玩到这个游戏的各种版本。完整的程序代码较多,此处我们只实现其中的一部分逻辑。

5.1 设置初始属性

在游戏中我们设定四个属性:

  • 颜值 (face)
  • 体质 (strong)
  • 智力 (iq)
  • 家境 (home)

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

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("颜值设置有误!")continueif strong < 1 or strong > 10:print("体质设置有误!")continueif iq < 1 or iq > 10:print("智力设置有误!")continueif home < 1 or home > 10:print("家境设置有误!")continueif face + strong + iq + home > 20:print("总点数超过了 20!")continueprint("初始属性设定完成!")break

5.2 设置性别

通过 random.randint(1, 6) 生成一个 [1, 6] 的随机整数,类似于掷色子。

  • 如果是单数,则性别设为男孩;
  • 如果是双数,则性别设为女孩。

男孩和女孩会遇到不同的事件。

point = random.randint(1, 6) # 掷色子
if point % 2 == 1:gender = 'boy'print("你是个男孩")
else:gender = 'girl'print("你是个女孩")

5.3 设置出生点

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

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

        再扔一次色子,生成 [1, 3] 的随机数,用来表示每一种细分情况。这里的代码主要就是各种 if else 构成。

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

5.4 针对每一岁, 生成人生经历

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

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

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

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

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

使用 for 循环, 按照年龄循环起来.

  • 针对每一年,先掷一次 [1, 3] 的色子,根据不同的随机数值,来触发不同的事件。
  • 根据性别,年龄,各种属性,来触发不同的事件。这里都使用 if - else 的方式来组织。
  • 不同的事件可能会对属性有正面/负面的影响。
  • 在每一年的最后,打印这一年遇到的事情。
  • 如果夭折,则直接 sys.exit(0) 退出程序。
  • 使用 time.sleep(1) 使程序暂停执行 1s,方便观察程序结果。
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 += 1home -= 1else:info += '你的父母没精力管你, 你的身体状况更糟糕了'strong -= 1# 颜值触发的事件elif face < 4 and age >= 7:info += '你因为长的太丑, 别的小朋友不喜欢你, 'if iq > 5:info += '你决定用学习填充自己'iq += 1else:if gender == 'boy':info += '你和别的小朋友经常打架'iq -= 1strong += 1else:info += '你经常被别的小朋友欺负'strong -= 1# 智商触发的事件elif iq < 5:info += '你看起来傻傻的, 'if home >= 8 and age >= 6: info += '你的父母给你送到更好的学校学习'elif 4 <= home <= 7:if gender == 'boy':info += '你的父母鼓励你多运动, 加强身体素质'strong += 1else:info += '你的父母鼓励你多打扮自己'face += 1else:info += '你的父母为此经常吵架'if point == 1:strong -= 1elif point == 2:iq -= 1# 健康成长else:info += '你健康成长, 'if point == 1:info += '看起来更聪明了'iq += 1elif point == 2:info += '看起来更好看了'face += 1else:info += '看起来更结实了'strong += 1print('-------------------------------------------')print(info)print(f'strong={strong}, face={face}, iq={iq}, home={home}')time.sleep(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#餐饮收银系统

一、引言 餐饮收银系统是一种用于管理餐馆、咖啡厅、快餐店等餐饮业务的计算机化工具。它旨在简化点餐、结账、库存管理等任务&#xff0c;提高运营效率&#xff0c;增强客户体验&#xff0c;同时提供准确的财务记录。C# 餐饮收银系统是一种使用C#编程语言开发的餐饮业务管理软…

Flink Data Source

Flink Data Source 一、内置 Data Source Flink Data Source 用于定义 Flink 程序的数据来源,Flink 官方提供了多种数据获取方法,用于帮助开发者简单快速地构建输入流,具体如下: 1.1 基于文件构建 1. readTextFile(path):按照 TextInputFormat 格式读取文本文件,并将…

pytorch_神经网络构建1

文章目录 pytorch简介神经网络基础分类问题分析:逻辑回归模型逻辑回归实现多层神经网络多层网络搭建保存模型 pytorch简介 为什么神经网络要自定义数据类型torch.tensor? tensor可以放在gpu上训练,支持自动求导,方便快速训练,同时支持numpy的运算,是加强版,numpy不支持这些 为…

【网络通信三要素】TCP与UDP快速入门

网络通信三要素 1.什么是网络编程&#xff1f; 可以让设备中的程序&#xff0c;与网络上其他设备中的程序进行数据交互&#xff0c;从而实现网络通信的手段&#xff0c;java.net.*包下提供了网络编程的解决方案 2.基本的通信架构 基本的通信架构有2种形式&#xff1a;CS架构…

抑郁了怎么办?改变抑郁情绪的几个建议

如今抑郁已经是个很常见的名词了&#xff0c;不论是校园还是职场&#xff0c;内卷无处不在&#xff0c;在这个抑郁高发的时代&#xff0c;需要我们正确的认识抑郁&#xff0c;找到适合自己的解决方法&#xff0c;将抑郁消灭在萌芽状态。 如果感觉自己有了抑郁情绪怎么办&#…

项目进展(五)-修复PCB电路板,学习32位ADC芯片ADS1285

一、前言 上个月29号放假了&#xff0c;和朋友一起去了南京(人是真滴多)&#xff0c;师兄晚放假几天&#xff0c;结果在测试时不小心把12V和GND碰触到一起了&#xff0c;导致12V短路&#xff0c;电路板几乎瘫痪了。 今天下午到学校之后就开始着手寻找问题和修复&#xff0c;最…

手机自动直播系统源码交付与代理加盟注意事项解析!

随着直播行业的不断发展&#xff0c;手机自动直播已经成为了人们生活中不可或缺的一部分。手机无人直播软件成了香饽饽&#xff0c;各类手机实景直播APP大批量涌现。因为创业和技术门槛低&#xff0c;市场需求高&#xff0c;所以成了最火热创业赛道。那么如果是不懂技术的人群&…

Matlab随机数的产生

目录 1、常见分布随机数的产生 1.1 二项分布 1.2 泊松分布 1.3 几何分布 1.4 均匀分布&#xff08;离散&#xff0c;等可能分布&#xff09; 1.5 均匀分布&#xff08;连续型等可能&#xff09; 1.6 指数分布&#xff08;描述“寿命”问题&#xff09; 1.7 正态分布 1.8…

SpringBoot结合Redisson实现分布式锁

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

C#,数值计算——Ranq2的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Backup generator if Ranq1 has too short a period and Ran is too slow.The /// period is 8.5E37. Calling conventions same as Ran, above. /// </summary> …

基于Matlab求解高教社杯全国大学生数学建模竞赛(CUMCM2004A题)-奥运会临时超市网点设计(附上源码+数据)

文章目录 题目思路源码数据下载 题目 2008年北京奥运会的建设工作已经进入全面设计和实施阶段。奥运会期间&#xff0c;在比赛主场馆的周边地区需要建设由小型商亭构建的临时商业网点&#xff0c;称为迷你超市&#xff08;Mini Supermarket, 以下记做MS&#xff09;网&#xf…

提升您的工作效率:TechSmith Snagit for Mac:强大的屏幕截图软件

在当今数字化的时代&#xff0c;屏幕截图已成为我们日常生活和工作中必不可少的一部分。无论是为了保存重要的信息、分享有趣的内容&#xff0c;还是为了制作教程和演示文稿&#xff0c;一款优秀的屏幕截图软件都能极大地提升我们的效率。而在所有的屏幕截图软件中&#xff0c;…

JavaScript:从入门到进阶的旅程

JavaScript是一种广泛使用的编程语言&#xff0c;为网页和应用程序提供了交互性和动态性。从初学者到资深开发者&#xff0c;JavaScript都是一项值得掌握的技能。在本文中&#xff0c;我们将探讨JavaScript的基础知识&#xff0c;以及一些进阶的概念和技巧。 一、JavaScript简…

机器视觉工程师,努力方向错了,白费

努力方向错了&#xff0c;白费。 在这个知识经济&#xff0c;知识付费&#xff0c;知识大V横行的时代&#xff0c;知识似乎遍地都是。但你有没有想过&#xff0c;微博里的段子是不是知识&#xff1f;微信里的爆款文章是不是知识&#xff1f;得到App里的音频是不是知识&#xf…

博物馆藏品管理系统-美术馆藏品管理系统

一、项目背景 文物作为前史留存下来最为珍贵的遗物&#xff0c;具有非常高的科学价值和艺术价值&#xff0c;博物馆的存在便是为了保存这些珍贵的前史文化遗产&#xff0c;所以对博物馆的建造必定要重视品质问题。对博物馆的库存办理工作也必定要注意细节&#xff0c;不能出一…

CSS 常用样式-文本属性

一、水平对齐 text-align CSS中的text-align属性用于水平对齐文本。它可以应用于块级元素和表格单元格。 常见的属性值包括&#xff1a; left&#xff1a;左对齐&#xff0c;文本在容器的左侧。right&#xff1a;右对齐&#xff0c;文本在容器的右侧。center&#xff1a;居中…

大模型RLHF算法更新换代,DeepMind提出自训练离线强化学习框架ReST

文章链接&#xff1a; https://arxiv.org/abs/2308.08998 大模型&#xff08;LLMs&#xff09;爆火的背后&#xff0c;离不开多种不同基础算法技术的支撑&#xff0c;例如基础语言架构Transformer、自回归语言建模、提示学习和指示学习等等。这些技术造就了像GPT-3、PaLM等基座…

OpenGLES:绘制一个混色旋转的3D球体

一.概述 前面几篇博文讲解了如何使用OpenGLES实现不同的3D图形 本篇博文讲解怎样实现3D世界的代表图形&#xff1a;一个混色旋转的3D球体 二.球体解析 2.1 极限正多面体 如果有学习过我前几篇3D图形绘制的博文&#xff0c;就知道要想绘制一个3D图形&#xff0c;首先要做的…

【redis学习笔记】主从的docker-compose脚本

编排 redis 主从节点 version: 3.7 services:master:image: redis:5.0.9container_name: redis-masterrestart: alwayscommand: redis-server --appendonly yesports:- 6379:6379slave1:image: redis:5.0.9container_name: redis-slave1restart: alwayscommand: redis-server …

C++学习第二十八天----引用变量的特别之处

1.引用变量 应用变量和指针十分相似&#xff0c;但是要注意二者的区别&#xff1b;例如&#xff0c;引用变量在声明引用时也要初始化&#xff0c;而不能像指针那样先声明再赋值。引用更接近const 指针。 int rat&#xff1b; int & rats rat&#xff1b; //int & rat…