【0基础学习python】顺序结构+条件语句+循环结构(文章后面有人生重开模拟器的相关逻辑和简单实现)

news2025/1/12 1:45:47

1.顺序语句

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

print('1')
print('2')
print('3')

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

这个顺序是很关键的,编程是一件明确无歧义的事情,安排好任务的顺序,计算机才能够正确的进行执行。

就好像人生的顺序,是上学,工作,结婚,生子;一旦这里的顺序乱了,就会很麻烦。

2.条件语句

什么是条件语句

条件语句能够表达“如果……否则……”这样的语义,这构成了计算机中基础的逻辑判定,条件语句也叫分支语句,表示接下来的逻辑可能有几种走向。

一个典型的例子:

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

  1. 那么金兵不会死在郭, 杨两家手上

  2. 郭, 杨两家就不会流亡北方

  3. 郭夫人就不会去到大漠, 完颜洪烈就不会遇到包惜弱

  4. 郭靖就不会和江南七怪救了铁木真

  5. 蒙古就不会统一

  6. 蒙古铁骑就不会西征

  7. 欧洲就不会出现火药, 也就不会出现文艺复兴, 大航海.

  8. 大炮就不会从欧洲传到日本, 日本得不到统一

  9. 完颜洪烈就不会全力战, 金国内乱

  10. 宋朝不会灭亡, 并诞生出资本主义. 中国成为最发达的国家.

如果 我认真敲代码
	我就很容易找到工作
否则
	我就容易毕业即失业

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

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

如果 我选择躺平摆烂
   我就容易毕业就失业
否则
   我就很容易找到工作

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

语法格式

python中使用if else关键字表示条件语句;

(1) if

if expression:
	do_something1
    do_something2
next_something

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

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

(2) if - else

if expression:
    do_something1
else:
    do_something2

如果 expression 值为 True, 则执行 do_something1

如果 expression 值为 False, 则执行 do_something2

(3) if -elif -else

if expression1:
    do_something1
elif expression2:
    do_something2
else:
    do_something3

如果 expression1 值为 True, 则执行 do_something1

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

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

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

  • if后面的条件表达式,没有( ),使用 : 作为结尾
  • if/else 命中条件后要执行的“语句块”,使用缩进(空格) 来表示,而不是{ }
  • 对于多条件分支,不是写作else if,而是elif

示例: 输入1表示愿意认真学习,输入2表示躺平摆烂,否则显示输入有误

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

缩进和代码块

代码块指的是一组放在一起执行的代码,在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")

请问, 上述代码中的 print(“1”) 和 print(“2”) 属于哪一级缩进?

因此,就有了“写python需要自带游标卡尺“这个梗

练习

(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 == 0:
    print("闰年")
else:
    print("平年")

空语句

代码实例:输入一个数字,如果数字为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语法的,会直接报错

3.循环语句

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

while循环

基本语法格式

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

代码示例: 打印1-10的整数

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

代码示例:计算1-100的和

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

代码示例:计算5的阶乘

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

代码示例: 求1!+2!+3!+4!+5!

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

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

for循环

基本语法格式

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

注意:

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

代码示例:打印1-10

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

代码示例: 打印2, 4,6,8

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

代码示例:打印10-1

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

代码示例:求1-100的和

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

break

break表示结束整个循环

代码示例: 模拟吃包子,吃第3个包子的时候吃出了半只虫

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

码示例: 输入若干个数字,求平均值,使用“分号”作为结尾

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

continue

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

代码示例:模拟吃三个包子,吃第3个包子的时候吃出了一只虫

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

4.综合案例

实现”人生重开模拟器“

这是一款之前很火的文字类小游戏,玩家输入角色的初始属性之后,就可以开启不同的人生经历,可以在网上搜索“人生重开模拟器”,就可以玩到这个游戏的各种版本。

完整的程序代码较多,在此处我们只实现其中的一部分逻辑;

1.设置初始属性

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

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

我们约定每个属性的范围为[1, 10],并且总和不能超过20

如果玩家输入的初始属性不合理,就提示输入有误,重新进行输入。

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

2.设置性别

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

  • 如果是单数,设置性别为男
  • 如果是双数,设置性别为女

男孩和女孩会遇到不同的时间;

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

3.设置出生点

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

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

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

这里的代码主要就是各种if else构成

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.针对每一岁,生成人生经历

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

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

每个阶段都会有不同的经历和发生的事件

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

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

  • 使用 for 循环, 按照年龄循环起来.
  • 针对每一年, 先掷一次 [1, 3] 的色子, 根据不同的随机数值, 来触发不同的事件.
  • 根据性别, 年龄, 各种属性, 来触发不同的事件. 这里都使用 if - else 的方式来组织.
  • 不同的事件可能会对属性有正面/负面的影响.
  • 在每一年的最后, 打印这一年遇到的事情.
  • 如果夭折, 则直接 sys.exit(0) 退出程序.
  • 使用 time.sleep(1) 使程序暂停执行 1s, 方便观察程序结果.
age = 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}')

更多的逻辑, 此处就不再实现了. 大家可以按照类似的方式, 设计更多的事件, 完成 青年, 壮年, 老年的相关逻辑。

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

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

相关文章

C++第六讲

思维导图 顺序栈定义成模板类 /* ---------------------------------author&#xff1a;YoungZorncreated on 2023/7/22 16:23.--------------------------------- */ #include<iostream>using namespace std;template<typename T> class my_stack { private:T *p…

Unity进阶--声音管理器学习笔记

文章目录 声音管理器 using System.Collections; using System.Collections.Generic; using UnityEngine;public class AudioManager : MyrSingletonBase<AudioManager> {//环境音private AudioSource enPlayer;//音效private AudioSource sePlayer;//音乐private Audio…

IDEA使用AWS CodeWhisperer

IDEA使用AWS CodeWhisperer 首先在IDEA的插件市场中下载AWS Toolkit&#xff1a; 这里我使用的IDEA是2023.1&#xff0c;就是在ToolWindows里把AWS Toolkit面板调出来&#xff1a; 连接&#xff1a; 打开的网页中粘贴上面提过的代码。进入注册流程。 注册完成后返回IDEA&am…

自动驾驶感知系统-毫米波雷达

毫米波雷达就是电磁波&#xff0c;雷达通过发射无线电信号并接收反射信号来测定车辆与物体间的距离&#xff0c;其频率通常介于10~300GHz之间。与厘米波导引头相比&#xff0c;毫米波导引头体积小&#xff0c;质量轻&#xff0c;空间分辨率高&#xff1b;与红外、激光、电视等光…

Vue--插槽

一、插槽-默认插槽 1.作用 让组件内部的一些 结构 支持 自定义 2.需求 将需要多次显示的对话框,封装成一个组件 3.问题 组件的内容部分&#xff0c;不希望写死&#xff0c;希望能使用的时候自定义。怎么办 4.插槽的基本语法 组件内需要定制的结构部分&#xff0c;改用**…

STM32 HAL库定时器输入捕获+更新中断

STM32 HAL库定时器输入捕获更新中断 &#x1f4cd;相关参考&#xff1a;https://www.cnblogs.com/kevin-nancy/p/12569377.html#4621839&#x1f4cc;相关篇《STM32 HAL库定时器输入捕获SlaveMode脉宽测量》 ✨高级定时器的输入捕获功能在脉宽信号测量方面是非常方便的。尤其时…

代码随想录算法训练营第二十一天 | 读PDF复习环节1

读PDF复习环节1 本博客的内容只是做一个大概的记录&#xff0c;整个PDF看下来&#xff0c;内容上是不如代码随想录网站上的文章全面的&#xff0c;并且PDF中有些地方的描述&#xff0c;是很让我疑惑的&#xff0c;在困扰我很久后&#xff0c;无意间发现&#xff0c;其网站上的讲…

JavaEE——Spring中存取Bean的注解

目录 一、存储Bean对象 1、定义 2、存储方式 &#xff08;1&#xff09;、类注解 【1】、Controller&#xff08;控制器存储&#xff09; 【2】、Service&#xff08;服务存储&#xff09; 【3】、Repository&#xff08;仓库存储&#xff09; 【4】、Component&#xf…

创造型模式-原型模式(场景体验-》方案解决===代码图解)

创造型模式-原型模式 创建重复对象-场景体验解决方案&#xff08;原型模式&#xff09;原型模式定义 创建重复对象-场景体验 今天来一个大客户&#xff0c;他要求帮他下100个订单。每个订单除了用户ID&#xff0c;和用户名不同之外&#xff0c;其他个人信息完全相同。 订单类 …

DASCTF 2023 0X401七月暑期挑战赛RE题解

比赛期间没有什么时间&#xff0c;赛后做的题。 TCP 这题最难&#xff0c;耗时最久&#xff0c;好像做出来的人不多。 程序开始有个初始化随机数的过程&#xff0c;数据写入qword_5060开始的48个字节。 这里是主函数&#xff0c;连接到服务器以后&#xff0c;先接收32个字节…

c函数学习

函数的概念 函数是c语言的功能单位&#xff0c;实现一个功能可以封装一个函数来实现。定义函数的时候一切以功能为目的&#xff0c;根据功能去定义函数的参数和返回值 函数的分类 从定义角度分类&#xff1a;库函数&#xff08;c库实现的&#xff09;&#xff0c;自定义函数&…

springboot集成

maven配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency><groupId>org.apache.commons</groupId><artifactId>…

小程序中vant-weapp时间选择使用方法

一、选择单个时间点&#xff1a; wxml&#xff1a; <van-celltitle"选择预约时间"value"{{ time }}"bind:click"onDisplay"/><van-calendarshow"{{ show }}"bind:close"onClose"bind:confirm"onConfirm"…

数学建模学习(3):综合评价类问题整体解析及分析步骤

一、评价类算法的简介 对物体进行评价&#xff0c;用具体的分值评价它们的优劣 选这两人其中之一当男朋友&#xff0c;你会选谁&#xff1f; 不同维度的权重会产生不同的结果 所以找到每个维度的权重是最核心的问题 0.25 二、评价前的数据处理 供应商ID 可靠性 指标2 指…

Redis应用(2)——Redis的项目应用(一):验证码 ---> UUID到雪花ID JMeter高并发测试 下载安装使用

目录 引出Redis的项目应用&#xff08;一&#xff09;&#xff1a;验证码1.整体流程2.雪花ID1&#xff09;UUID&#xff08;Universally Unique Identifier&#xff0c;通用唯一识别码&#xff09;2&#xff09;Twitter 的雪花算法&#xff08;SnowFlake&#xff09; 雪花ID优缺…

Jenkins常用管理功能配置 - 插件管理

Jenkins插件介绍 Jenkins是一个流行的开源持续集成/持续交付(CI/CD)工具&#xff0c;它有大量的插件来扩展其功能。这些插件可以用于构建、测试、部署和监控软件项目。下面是一些常用的Jenkins插件及其简单介绍和使用方法&#xff1a; 1. Git插件&#xff1a;允许Jenkins从Gi…

网络概念,《TCP/IP五层网络模型》与《数据的网络传输---“封装”与“分用”过程》

文章目录 概念协议协议分层TCP/IP五层网络模型数据的网络传输---“封装”与“分用”“封装”与“分用” 的过程 接收过程 概念 局域网&#xff1a;把一些设备通过交换机/路由器连接起来。 广域网&#xff1a;把更多的局域网也相互连接称为广域网。 交换机&#xff1a;交换机是…

采用桥接模式使虚拟机\笔记本\linux台式机互通

目录 一、环境&#xff1a;二、连接模式1. 桥接模式2. 主机共享模式3. NAT模式 三、配置1. 笔记本WIFI网络配置2. VM配置3.虚拟机配置3.1. 先看网络信息&#xff0c;确定修改ens333.2. 修改ens333.3. 重启网络 四、测试五、错误解决5.1 现象5.2 解决办法5.3 结果 一、环境&…

Spring中Bean的作用域和Spring生命周期

从前面的文章中我们看出Spring是用来存储和读取Bean的&#xff0c;因此Spring中Bean是最核心的资源&#xff0c;所以我们将对Bean进行深入的理解。 Bean的作用域 现在有一个公共的Bean&#xff0c;提供给了两个用户去使用&#xff0c;但是在使用过程中&#xff0c;用户一修改…

Android Studio 修改AVD模拟器文件默认存储路径

AndroidStudio默认的模拟器文件路径为&#xff1a;C:\Users\用户名\.android\avd路径&#xff0c;通常windows系统上&#xff0c;C盘不是太大&#xff0c;而avd文件却不小&#xff0c;通常几个GB&#xff0c;所以有必要将avd路径换到一个非系统盘。 更换方法如下&#xff1a;H…