鱼C论坛

 找回密码
 立即注册
查看: 1379|回复: 16

Python第4讲课后习题不太明白,求解

[复制链接]
发表于 2018-4-22 14:37:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

代码

代码

报错形式

报错形式

先上两张图,图一是小甲鱼代码,试了一下,出现第二张的报错形式。问题在哪里呢
根据代码这张图,有以下不明白之处,希望有大佬讲解:
1.times是个变量,把它赋值成数字3,但是下面times=times-1,都用的一个times感觉挺乱的,分不清了。等号左边的times是本次的次数,等号右边的times是上次试过后的次数,这两个times根本不是同一个意思啊,代号都不变的吗
2.关于guess的两点疑惑:(1)guess=0为什么有必要写最前面,有人说因为要让guess≠secret,但是我想说就算有人一来就猜中guess=secret然后游戏结束了,也没关系啊。相当于这个游戏可以让你玩儿3次,有人玩儿一次就猜中结束,这是OK的啊不违背题意。猜中secret本来就是概率性的问题,猜中了那一次结束,每中再进入下步;(2)guess=0已经赋值,下面guess=int(temp)又赋值,一个程序里对同一个变量赋两个不一样的东西,冲突吗。相当于说一个变量a=医生,又说a=苹果,没得意义啊

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-22 19:17:58 | 显示全部楼层
还想问下下面那个print里面一个逗号后面end=“  ”是什么意思呢?意思以某个数字结束吗,引号里面可以是1-10任意填写一个数吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-22 19:39:35 | 显示全部楼层
是分隔符,默认是回车

>>> print('hello',end='我是分隔符')
hello我是分隔符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-23 16:38:25 | 显示全部楼层
thexiosi 发表于 2018-4-22 19:39
是分隔符,默认是回车

>>> print('hello',end='我是分隔符')

那相当于是字符串的拼接啊,不如直接写成print('hello'+'我是分隔符'),为什么要用end来拼接被
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-23 16:46:34 | 显示全部楼层
leftjay 发表于 2018-4-23 16:38
那相当于是字符串的拼接啊,不如直接写成print('hello'+'我是分隔符'),为什么要用end来拼接被

不一样的(我只是举个不太恰当的栗子),你可以试试下面的代码,看看输出:

for i in range(5):
    print(i)

for i in range(5):
    print(i, end = ' ')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-23 20:56:22 | 显示全部楼层
thexiosi 发表于 2018-4-23 16:46
不一样的(我只是举个不太恰当的栗子),你可以试试下面的代码,看看输出:

for i in range(5):

试了一下,一个是纵向生成01234,一个是横向。关于end这个用法,小甲鱼视频里完全没提。不知道后面有没有专门的讲解呢。这个改进游戏里end=‘’是为了达到什么目的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-23 21:31:17 | 显示全部楼层
本帖最后由 thexiosi 于 2018-4-23 21:32 编辑
leftjay 发表于 2018-4-23 20:56
试了一下,一个是纵向生成01234,一个是横向。关于end这个用法,小甲鱼视频里完全没提。不知道后面有没有 ...


小甲鱼老师的视频里面会穿插讲解一些print()函数的基础用法的

另外,我记得:老师的代码中,应该不是'5',应该是'',也就是手工去掉分隔符 print("txt",end='5')  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-23 23:16:41 | 显示全部楼层
报错提示,应该是缩进问题,你把代码重新格式化下看看。
1. 不然呢?或者写time -= 1怎么样;
2. guess=0,guess=1,都是声明,通常根本不要在意右边的值,这里注意下range(1, 10) != 0,所以也防止了不能进入循环的错误(Python没有do..while循环,不然guess的值就完全无所谓了)
3. 你显然是没弄懂『声明』和『赋值』的区别。变量的基本准则:先声明,后使用(包括赋值)。
Python的编译器用C写的,标准C99的变量是这样用的:int a;之后才能a=xx;在Java、C++下简化写成int a = xxx;Python是动态类
型语言,类型动态检查,你写个全局的guess,这是声明,guess=0,这是赋值:
不妨写个函数简单验证下:

def f():
    a = 1

Disassembly of f:
  2           0 LOAD_CONST               1 (1)
              2 STORE_FAST               0 (a)
              4 LOAD_CONST               0 (None)
              6 RETURN_VALUE

认识英文的都能看懂:加载f,先加载常量对象1,然后把这个常量存储到变量中——具体细节不要追究,你至少知道了在Python里面也是分两步,即声明、赋值的两个不同的步骤了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-24 13:07:17 | 显示全部楼层
thexiosi 发表于 2018-4-23 21:31
小甲鱼老师的视频里面会穿插讲解一些print()函数的基础用法的

另外,我记得:老师的代码中,应该不 ...

更晕了,print('再试一次:',end='')这个end='',引号里到底写什么?还是什么都不写??什么都不写的话引入end做什么呢。。。。我以为他想表达以哪个数字结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-24 13:10:43 | 显示全部楼层
ABC23 发表于 2018-4-23 23:16
报错提示,应该是缩进问题,你把代码重新格式化下看看。
1. 不然呢?或者写time -= 1怎么样;
2. guess=0 ...

表示初学了4节课,视频里还没提到过声明这个词。我意思为什么非要写guess=0呢,如果第一次猜对那就不进入循环,直接退出来不就行了。次数是小于3的,没问题啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 13:13:35 | 显示全部楼层
leftjay 发表于 2018-4-24 13:10
表示初学了4节课,视频里还没提到过声明这个词。我意思为什么非要写guess=0呢,如果第一次猜对那就不进入 ...

如果guess=secret,input会少一次。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-24 13:16:08 | 显示全部楼层
ABC23 发表于 2018-4-24 13:13
如果guess=secret,input会少一次。

secret=random.randint(1,10),secret是变量,右边random.randint是个什么格式啊,一个函数吗表达随机。是函数吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 14:21:56 | 显示全部楼层
leftjay 发表于 2018-4-24 13:16
secret=random.randint(1,10),secret是变量,右边random.randint是个什么格式啊,一个函数吗表达随机。 ...

>>> type(random.randint(1,11))
<class 'int'>
>>> type(random.randint)
<class 'method'>
=======================
本身是一个方法,返回一个介于第一个参数和第二个参数-1范围的int类型整数 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 15:29:55 | 显示全部楼层
就是回车的意思,但是不换行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 17:43:31 | 显示全部楼层
本人认为guess=0 是先给予一个初始值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 17:58:11 | 显示全部楼层
leftjay 发表于 2018-4-24 13:10
表示初学了4节课,视频里还没提到过声明这个词。我意思为什么非要写guess=0呢,如果第一次猜对那就不进入 ...

guess=0是为了进入循环,如果不进入循环玩家是没办法猜数字的,而且guess如果不给初值是无法判定guess是否等于secret的,你疑惑的这种情况并不存在。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 23:21:12 | 显示全部楼层
试了一下,好像有end 时两者没有空格,没有end 时两个分开的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表