【python基础知识】7.实操 您所在的位置:网站首页 python文字游戏藏宝洞 【python基础知识】7.实操

【python基础知识】7.实操

2024-07-16 14:01| 来源: 网络整理| 查看: 265

用 Python实现“文字PK”小游戏 前言明确项目目标分析过程,拆解项目逐步执行,代码实现版本1.0:自定属性,人工PK版本2.0:随机属性,自动PK版本3.0:打印战果,三局两胜

前言

我想先和你谈谈一个项目一般是怎么完成的。更具体的说,程序员是如何思考和解决问题的呢?

我认为其中一个很重要的能力是【问题拆解】。问题拆解,指的是在做一件事或面对一个问题的时候,将其拆解成多个步骤或多个层次,逐步执行和解决问题,直至达到最终效果。 我会将完成一个项目的流程总结为以下三步: 在这里插入图片描述 明确项目目标,是指我们希望程序达成什么目的,实现什么功能,从而帮我们将项目拆解成不同的单元;而一个妥当的拆解方案,难度适度递增,能帮我们逐步顺利执行,最终完成项目。这三个步骤可以说是环环相扣的。

那么接下来,我们就正式进入项目实操,在这个过程中,需要你多动动脑,动动手。

明确项目目标

我们此次要实现的需求是:人机PK小游戏。具体效果请参照下面的示意图。 在这里插入图片描述 简单来说,这个游戏中,会随机生成玩家和敌人的属性,同时互相攻击,直至一方血量小于零。

另外,这样的战斗会持续三局,采取三局两胜制,最后输出战斗结果,公布获胜方。 在这里插入图片描述 明确了项目要实现什么效果后,就可以对项目进行拆解了。

分析过程,拆解项目

编写代码,我们无须苛求一步到位。尤其对于刚接触编程的学习者来说,层层递进、逐渐提升难度才能达到更好的练习效果。

为了让你暖暖身,同时照顾大部分同学的学习节奏,我从“功能叠加、难度递增”这个角度考虑,将我们要实现的小游戏拆分成了三个版本。 在这里插入图片描述 版本1.0,主要是帮我们理清战斗逻辑。而版本2.0和3.0,会涉及到一些新的知识点,到时遇到了再和大家介绍。

当项目被清晰地拆解后,剩下的就是去逐步执行,也就是重复“执行→遇到问题→解决问题→继续执行”这个循环的过程。

下面,开始正式写代码咯,让我们一个一个版本来攻克吧!

逐步执行,代码实现

首先,我们来看看版本1.0该怎么实现。

版本1.0:自定属性,人工PK

在这里插入图片描述 第一阶段的代码,我们的主要任务是理清战斗的逻辑,再用print()函数将战斗过程打印在终端。

我们先来思考一下,一个人机PK游戏最基础的元素是什么,我们可以拿最经典的拳皇游戏来脑补一下。

在这里插入图片描述 根据这一版本的设定,我们要做的主要有三步:1.规定并显示出玩家和敌人的属性 2.双方同时互相攻击,血量根据对方的攻击力扣除 3.若有一方血量小于等于0,游戏结束。

为了让我们的思路保持清晰,画成流程图就是这样子的: 在这里插入图片描述 别说你平时不玩游戏,不知道该怎么动手。这个版本的所有步骤,都还很不“智能”,只用到了唯一一个函数Print()。也就是说,我们只要把步骤一个一个打印上去,就算成功啦。

好,我们从第1步开始:设定【玩家】和【敌人】的属性,即【血量】和【攻击】。

print('【玩家】血量:100 攻击:50') # 自定义玩家角色的血量和攻击 print('【敌人】血量:100 攻击:30') # 自定义敌人角色的血量和攻击

第2步:手动计算攻击一次,双方各自所剩的血量。

print('你发起了攻击,【敌人】剩余血量50') # 人工计算敌人血量:100-50=50 print('敌人向你发起了攻击,【玩家】剩余血量70') # 人工计算玩家血量:100-30=70

第3步:继续做人工计算:算一算,玩家攻击2次敌人,敌人的血量就等于0了,这时候可以结束战斗,打印游戏结果。

print('你发起了攻击,【敌人】剩余血量0') # 双方同时攻击,若血量出现小于等于0,游戏结束 print('敌人向你发起了攻击,【玩家】剩余血量40') print('敌人死翘翘了,你赢了!') # 打印结果

很简单吧!现在我们要做的,就是把这三段代码拼起来,然后我会加一些修饰视觉的换行符和分割线,让运行结果看得更清楚一点。

print('【玩家】\n血量:100\n攻击:50') # 自定义玩家角色的血量和攻击,用换行符'\n'来优化视觉 print('------------------------') # 辅助功能,起到视觉分割的作用,让代码的运行结果更清晰 print('【敌人】\n血量:100\n攻击:30') print('------------------------') print('你发起了攻击,【敌人】剩余血量50') # 人工计算敌人血量:100-50=50 print('敌人向你发起了攻击,【玩家】剩余血量70') # 人工计算玩家血量:100-30=70 print('------------------------') print('你发起了攻击,【敌人】剩余血量0') # 双方同时攻击,若血量出现小于等于0,游戏结束 print('敌人向你发起了攻击,【玩家】剩余血量40') print('-----------------------') print('敌人死翘翘了,你赢了!') # 打印结果

你运行一下试试。 运行结果:

print('【玩家】\n血量:100\n攻击:50') # 自定义玩家角色的血量和攻击,用换行符'\n'来优化视觉 print('------------------------') # 辅助功能,起到视觉分割的作用,让代码的运行结果更清晰 print('【敌人】\n血量:100\n攻击:30') print('------------------------') print('你发起了攻击,【敌人】剩余血量50') # 人工计算敌人血量:100-50=50 print('敌人向你发起了攻击,【玩家】剩余血量70') # 人工计算玩家血量:100-30=70 print('------------------------') print('你发起了攻击,【敌人】剩余血量0') # 双方同时攻击,若血量出现小于等于0,游戏结束 print('敌人向你发起了攻击,【玩家】剩余血量40') print('-----------------------') print('敌人死翘翘了,你赢了!') # 打印结果

唔…虽然看起来还有点儿意思,但所有信息一下子都蹦跶出来,一点都没有体现游戏的进程感。

所以,为了让打印出的东西能有时间间隔地依次出现,我们需要设置一个类似“计时器”的东西。在Python里,我们需要用到两行代码来实现:(敲黑板,很简单的新知识)

import time #调用time模块 time.sleep(secs) #使用time模块下面的sleep()函数,括号里填的是间隔的秒数(seconds,简称secs) #time.sleep(1.5)就表示停留1.5秒再运行后续代码

这里有个新名词——模块,它是Python里一个重要的概念,我会在后续的文章给你详细介绍一番。

你可以把模块想象成是一个装着许多神奇函数的百宝箱,不过想要使用这个百宝箱里的函数,得先用 import 模块名 这样一句代码来打开它。

然后这里我们想使用time模块里的sleep()函数,也就是让代码运行结果不要一次性全部出现,而是分批分批的出现。就要写成time.sleep(secs)的形式。

如果我想设置成打印的信息间隔1.5秒出现,代码就可以这么写:

import time #通常import语句会写到代码的开头 print('【玩家】\n血量:100\n攻击:50') print('------------------------') time.sleep(1.5) #暂停1.5秒,再继续运行后面的代码 print('【敌人】\n血量:100\n攻击:30') print('------------------------') time.sleep(1.5) #同上 print('你发起了攻击,【敌人】剩余血量50') print('敌人向你发起了攻击,【玩家】剩余血量70') print('------------------------') time.sleep(1.5) print('你发起了攻击,【敌人】剩余血量0') print('敌人向你发起了攻击,【玩家】剩余血量40') print('-----------------------') time.sleep(1.5) print('敌人死翘翘了,你赢了!')

好,看懂了代码,我们来直接运行下看下效果。

呼~总算完成了版本1.0,不过我想你一定在心里默默吐槽,一句句用print()写也太蠢太弱鸡了吧。

没错,不过代码嘛,总得一步步实现。就先当作是小小的热身。

而且,这个版本的代码还有两个明显的缺陷:一是玩家和敌人的属性(血量&攻击)是我自己说了算,那胜负早已没有悬念;二是战斗过程中血量的变化要自己手动算,那要计算机有何用?

你放心,这些都是我们会在版本2.0解决的问题。

版本2.0:随机属性,自动PK

在这里插入图片描述 如前所述,这个阶段,我们主要新增【随机属性】和【自动战斗】两个功能,画成流程图是这样子的: 在这里插入图片描述 想一想:自己来定义双方角色的属性,那简直是黑箱操作,胜负早已注定。所以,为了游戏公平,我们要让属性由自己说了算变成随机生成。

现在问题来了,要随机生成属性(数字),这文章里又没教。怎么办?

自己去查下,网上会有的。 这也是我最建议的做法,自己能独立解决问题的话,会超有满足感。 你现在已经掌握了一定的代码阅读能力,遇到卡点后上网搜索,其实就能解决目前你绝大多数的问题。“不懂就查”也是程序员的工作习惯之一。

经过上网查询发现,有这样一个效果: 在这里插入图片描述 我们看这段文字可以发现,要随机生成整数,就要用到random模块里的randint()函数,括号里放的是两个整数,划定随机生成整数的范围。 示例代码:

import random #调用random模块,与 a = random.randint(1,100) # 随机生成1-100范围内(含1和100)的一个整数,并赋值给变量a print(a)

运行结果:

73

掌握了random,现在来做个小练习实践一下:

请听题:1.定义两个变量,来存储玩家血量和玩家攻击力的数值 2.血量是100-150的随机数,攻击力是30-50的随机数 3.将两个变量打印出来。

示例代码:

import random player_life = random.randint(100,150) #表示玩家血量 player_attack = random.randint(30,50) #表示玩家攻击 print(player_life) print(player_attack)

运行结果:

玩家的血量是:115 玩家的攻击力是:32

好,我们已经知道如何生成随机属性,下面我们就要将属性展示打印出来,请阅读下列代码,弄懂每一行的含义:

import time import random #也可合并写成一行:import time,random # 生成随机属性 player_life = random.randint(100,150) # “player_life” 代表玩家血量 player_attack = random.randint(30,50) # “player_attack” 代表玩家攻击 enemy_life = random.randint(100,150) # “enemy_life” 代表敌人血量 enemy_attack = random.randint(30,50) # “enemy_attack” 代表敌人攻击 # 展示双方角色的属性 print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack)) #player_life和player_attack的数据类型都是整数,所以拼接时需要先用str()转换 print('------------------------') time.sleep(1) #暂停一秒再执行后续代码 print('【敌人】\n'+'血量:'+str(enemy_life)+'\n攻击:'+str(enemy_attack)) print('------------------------')

那截至目前,我们已经完成了随机生成属性和展示属性,接下来我们就来实现"自动战斗"。 在这里插入图片描述 要怎么实现自动战斗呢?如果一头雾水的话,可以先尝试从版本1.0的人为战斗来寻找规律:

print('【玩家】 血量:130 攻击:50') print('【敌人】 血量:150 攻击:40') print('你发起了攻击,【敌人】剩余血量100') print('敌人向你发起了攻击,【玩家】剩余血量90') print('------------------------') print('你发起了攻击,【敌人】剩余血量50') print('敌人向你发起了攻击,【玩家】剩余血量70') print('-----------------------') print('你发起了攻击,【敌人】剩余血量0') print('敌人向你发起了攻击,【玩家】剩余血量40') print('-----------------------') print('敌人死翘翘了,你赢了!')

我们可以发现,4-6行这3行是重复出现的结构,除了数字是灵活变动之外,其余是一毛一样的。

这时,根据我们已学知识,我们应该用什么来解决重复劳动?

循环语句。

说到循环,我们就要思考是要使用for循环还是while循环了。 因为现在双方的血量和攻击是随机生成,不是固定的。所以我们不知道具体要战斗多少回合才能分出胜负,也就是循环次数不明确,那自然要用while循环。

我们进一步思考:while后面要接什么条件呢,也就是说什么条件下,战斗过程会一直持续呢?

如果双方血量都大于0,战斗会一直持续。

所以我们现在确定了让循环执行需要满足的条件就是——双方血量均大于零,也就是不死不休。

在这里插入图片描述 可见while后面要同时满足两个条件,即这两个条件要同时为真,所以我们要用and来连接,用代码来表示就是:

while (player_life >= 0) and (enemy_life >= 0): #and两边的条件分别用括号括起,是一种习惯,方便阅读

现在我们确定了执行while循环的条件,接下来就是要填充循环内部的内容。

根据刚才的分析,我们希望循环的内容是双方互相攻击,掉血的过程。

print('你发起了攻击,【敌人】剩余血量xxx') print('敌人向你发起了攻击,【玩家】剩余血量xxx') print('------------------------')

其中【敌人】剩余血量=敌人当前血量-玩家攻击,【玩家】剩余血量=玩家当前血量-敌人攻击。

事实上我们之前已经定义好了这四个变量,每一次互相伤害后,player_life(玩家血量)和enemy_life(敌人血量)都会被重新赋值,所以转换为代码逻辑就是:

player_life = player_life - enemy_attack enemy_life = enemy_life - player_attack #赋值语句的执行顺序是先计算等号右边,再赋值给左边的变量

好,自动攻击的基础逻辑也已经理清楚了。我们先合并一下这之前写过的代码。

import time,random # 生成随机属性 player_life = random.randint(100,150) player_attack = random.randint(30,50) enemy_life = random.randint(100,150) enemy_attack = random.randint(30,50) # 展示双方角色的属性 print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack)) #player_life和player_attack都是整数类型,所以拼接时需要先用str()转换 print('------------------------') time.sleep(1) print('【敌人】\n'+'血量:'+str(enemy_life)+'\n攻击:'+str(enemy_attack)) print('------------------------') time.sleep(1) while (player_life >0) and (enemy_life > 0): player_life = player_life - enemy_attack enemy_life = enemy_life - player_attack

接下来,我们只需要补充完成while循环语句,让双方自动战斗、扣血的过程循环起来。 示例代码:

import time,random player_life = random.randint(100,150) player_attack = random.randint(30,50) enemy_life = random.randint(100,150) enemy_attack = random.randint(30,50) print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack)) print('------------------------') time.sleep(1) print('【敌人】\n'+'血量:'+str(enemy_life)+'\n攻击:'+str(enemy_attack)) print('------------------------') time.sleep(1) while (player_life >0) and (enemy_life > 0): player_life = player_life - enemy_attack enemy_life = enemy_life - player_attack print('你发起了攻击,【敌人】剩余血量'+str(enemy_life)) #player_life是整数,所以拼接时要先用str()转换 print('敌人向你发起了攻击,【玩家】剩余血量'+str(player_life)) print('------------------------') time.sleep(1.5) # 为了体现出战斗回合,这里停顿1.5秒

我们直接运行一下,看看结果。

你应该能感受到,版本2.0总算像模像样了,慢慢逼近我们的项目目标。

不过它还没有实现:打印出每局结果,三局两胜,并打印最终战果的功能。这就是我们在版本3.0要增加的功能。

一鼓作气,让我们顺势攻克最后一座山头。

版本3.0:打印战果,三局两胜

在这里插入图片描述 对比版本2.0,在版本3.0中,我们想要增加的功能是:1.打印战果:每局战斗后,根据胜负平的结果打印出不同的提示;2.三局两胜:双方战斗三局,胜率高的为最终赢家。

在这里插入图片描述 我反复解释新增功能,是因为这样不断地明确项目的阶段性目标,可以让自己持续专注地推进项目。

现在就请你根据代码区的提示,为游戏增加“打印战果”(单局)的功能。

就像我给的提示一样,结果是有三种可能性的,对应的条件如下图所示:

在这里插入图片描述 示例代码:

import time,random # 生成双方角色,并生成随机属性。 player_life = random.randint(100,150) player_attack = random.randint(30,50) enemy_life = random.randint(100,150) enemy_attack = random.randint(30,50) # 展示双方角色的属性 print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack)) print('------------------------') time.sleep(1) print('【敌人】\n'+'血量:'+str(enemy_life)+'\n攻击:'+str(enemy_attack)) print('------------------------') time.sleep(1) # 双方PK while player_life > 0 and enemy_life > 0: player_life = player_life - enemy_attack enemy_life = enemy_life - player_attack print('你发起了攻击,【敌人】剩余血量'+str(enemy_life)) print('敌人向你发起了攻击,【玩家】剩余血量'+str(player_life)) print('-----------------------') time.sleep(1.5) # 打印战果 if player_life > 0 and enemy_life 0 and enemy_life > 0: player_life = player_life - enemy_attack enemy_life = enemy_life - player_attack print('你发起了攻击,【敌人】剩余血量'+str(enemy_life)) print('敌人向你发起了攻击,【玩家】剩余血量'+str(player_life)) print('-----------------------') time.sleep(1.5) # 打印战果 if player_life > 0 and enemy_life 0 and enemy_life 0 and enemy_life 0 and enemy_life 0 and enemy_life > 0: player_life = player_life - enemy_attack enemy_life = enemy_life - player_attack print('你发起了攻击,【敌人】剩余血量'+str(enemy_life)) print('敌人向你发起了攻击,【玩家】剩余血量'+str(player_life)) print('-----------------------') time.sleep(1.5) #打印最终战果 if player_life > 0 and enemy_life enemy_victory : time.sleep(1) print('【最终结果:你赢了!】') elif enemy_victory > player_victory: print('【最终结果:你输了!】') else: print('【最终结果:平局!】')

我们可算把最后代码写出来了!如果你是从头学起的新手,这四十几行的代码可能你目前打过最长的代码了吧?别客气,为你自己鼓鼓掌!

不过,这还没完呢。作为一个程序员,代码是我们的名片,我们会追求更加优雅的,方便他人阅读的代码,所以上述代码还有一些优化空间。

所以,以下是彩蛋时间,我会教大家一个新的知识点——【格式化字符串】,作为这一关的收尾。

什么意思呢,上面有这么两行代码,是用来展示双方角色的属性的:

print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack)) print('【敌人】\n'+'血量:'+str(enemy_life)+'\n攻击:'+str(enemy_attack))

我们在用+拼接字符串和变量的时候,常常需要考虑变量是什么类型的数据,如果不是字符串类型,还先需要str()函数转换。

并且一句话常常要拼接成好几个部分,然后我们要考虑每一对引号’ '的起始位置,好麻烦,相信你多少会有点体会。

所以,为了更方便地实现不同数据类型的拼接,用【格式符%】是更常用更便利的一种方式。

我们可以把%想象成:图书馆里用来占位的一本书。先占一个位置,之后再填上实际的变量。举个例子:下面这两种写法是相同的,请你着重研究下第二行的语法。

print('血量:'+str(player_life)+' 攻击:'+str(player_attack)) print('血量:%s 攻击:%s' % (player_life,player_attack))

我们看到格式符%后面有一个字母s,这是一个类型码,用来控制数据显示的类型。%s就表示先占一个字符串类型的位置。

还有其他常见的类型码如下图所示:

在这里插入图片描述 占完位置之后,我们要以%的形式在后面补上要填充的内容,如此一来我们就免去了转换类型的烦恼。如果是多个数据,就要把它们放进括号,按顺序填充,用逗号隔开。

举个例子,你可以运行一下,对比下列输出的结果:

lucky = 8 print('我的幸运数字是%d' % lucky) print('我的幸运数字是%d' % 8) print('我的幸运数字是%s' % '小龙女的生日816') print('我的幸运数字是%d和%d' % (8,16))

运行结果:

我的幸运数字是8 我的幸运数字是8 我的幸运数字是小龙女的生日816 我的幸运数字是8和16

一个小小的提示:%后面的类型码用什么,取决于你希望这个%占住的这个位置的数据以什么类型展示出来,如果你希望它以字符串形式展示,那就写%s,如果你希望它以整数形式展示,那就写%d。

这就出现了一些容易混淆的地方,比如,请运行以下的代码:

print('我的幸运数字是%d' % 8) #8以整数展示 print('我的幸运数字是%s' % 8) #8以字符串展示 print(8) #整数8与字符串'8'打印出来的结果是一样的 print('8')

运行结果:

我的幸运数字是8 我的幸运数字是8 8 8

选用了不同的类型码,打印出的结果却是一样,原因也已经在代码注释中写清楚了:因为整数8与字符串’8’的打印结果是一样的,所以选两种类型码都OK。但这种“都OK”的情况仅限于整数,对文字是行不通的,会报错。

现在你应该更懂这个格式化字符串该怎么用了。

那就看回我们之前的代码,如果把一开始用+拼接的字符串都替换成%格式符表示,我们先替换一部分试试。

print(' \n——————现在是第'+str(i)+'局——————') #替换前 print(' \n——————现在是第 %s 局——————' % i) #替换后 print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack)) #替换前 print('【玩家】\n血量:%s\n攻击:%s' % (player_life,player_attack)) #替换后 print('敌人发起了攻击,【玩家】剩余血量'+str(player_life)) #替换前 print('敌人发起了攻击,【玩家】剩余血量%s' % player_life) #替换后

你也许想问我,这里的%s是不是都能换成%d,答案是“YES!”,因为这里的变量i,player_life,player_attack统统都是整数。

好,我们这次先选择使用%s,来看完整的代码:

import time import random player_victory = 0 enemy_victory = 0 for i in range(1,4): time.sleep(1.5) print(' \n——————现在是第 %s 局——————' % i) #对比之前:(' \n——————现在是第'+str(i)+'局——————') player_life = random.randint(100,150) player_attack = random.randint(30,50) enemy_life = random.randint(100,150) enemy_attack = random.randint(30,50) print('【玩家】\n血量:%s\n攻击:%s' % (player_life,player_attack)) print('------------------------') time.sleep(1) print('【敌人】\n血量:%s\n攻击:%s' % (enemy_life,enemy_attack)) print('-----------------------') time.sleep(1) while player_life > 0 and enemy_life > 0: player_life = player_life - enemy_attack enemy_life = enemy_life - player_attack print('你发起了攻击,【敌人】剩余血量%s' % enemy_life) print('敌人向你发起了攻击,【玩家】的血量剩余%s' % player_life) print('-----------------------') time.sleep(1.2) if player_life > 0 and enemy_life enemy_victory : time.sleep(1) print('\n【最终结果:你赢了!】') elif enemy_victory > player_victory: print('\n【最终结果:你输了!】') else: print('\n【最终结果:平局!】')

是不是看起来清爽了些?如果还不习惯这种表示方法没有关系,老师会在后续的课程里强化,多写几次就习惯啦。

现在我保证真是最后一步了,请你直接运行下面的代码,感受一下我们这一路走来的成果吧。

import time import random player_victory = 0 enemy_victory = 0 for i in range(1,4): time.sleep(1.5) print(' \n——————现在是第 %s 局——————' % i) player_life = random.randint(100,150) player_attack = random.randint(30,50) enemy_life = random.randint(100,150) enemy_attack = random.randint(30,50) print('【玩家】\n血量:%s\n攻击:%s' % (player_life,player_attack)) print('------------------------') time.sleep(1) print('【敌人】\n血量:%s\n攻击:%s' % (enemy_life,enemy_attack)) print('-----------------------') time.sleep(1) while player_life > 0 and enemy_life > 0: player_life = player_life - enemy_attack enemy_life = enemy_life - player_attack print('你发起了攻击,【敌人】剩余血量%s' % enemy_life) print('敌人向你发起了攻击,【玩家】的血量剩余%s' % player_life) print('-----------------------') time.sleep(1.2) if player_life > 0 and enemy_life enemy_victory : time.sleep(1) print('\n【最终结果:你赢了!】') elif enemy_victory > player_victory: print('\n【最终结果:你输了!】') else: print('\n【最终结果:平局!】')

以上就是我们的第一节项目实操课啦,主要用到的还是我们先前学的循环语句和条件判断语句,不知看到这里的你,是否觉得还算轻松愉快,也有一些成就感?

更为重要的,其实不是我们做出了什么项目,而是我们能否灵活运用知识,和掌握做项目的方法。希望现在的你,对学习编程有了与我同样的感受。

最后我们再来回顾一下做项目的三个步骤。

在这里插入图片描述

如果有同学对这个游戏还想有更加深入的研究,想追求完美,可以看用这篇文章: Python实现“文字PK”小游戏(二) 让我们好好再优化一下这个游戏,战个痛快!!!

下一关呢,我会尝试讲一讲“编程思维”,而不是这么快就继续讲一些新的知识。 我希望能够在学习的路上,一路陪伴你走向更远的地方,也带给你更宽阔的视野。

而在编程学习中,更宽阔的视野无疑来自编程技能背后的种种思维。

所以,下一关我会针对同学们在学习Python时会遇到的两大瓶颈,提出一些解决方案。我们下一关见!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有