鱼C论坛

 找回密码
 立即注册
查看: 1990|回复: 6

[已解决]作业33课后作业

[复制链接]
发表于 2023-7-26 21:26:55 | 显示全部楼层 |阅读模式

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

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

x
这个程序是求给定的数中找出最大的奇数,其中划红线那里是不是应该是range(n-1,0,-1)从后往前查找,不应该是从最后一个n-1找到第0个嘛,为啥作业里面这个程序写的是range(n-1,-1,-1),运行了之后发现正常运行。
最佳答案
2023-7-26 21:27:10
对于这个问题,让我们来分析一下。

在给定的程序中,range(n-1,-1,-1) 用于从后往前遍历数列,其中 n 是指数列的长度。这个遍历会从索引 n-1 开始,一直到索引 0。而在每次循环中,程序会检查当前数字是否为奇数,并将其与当前最大奇数进行比较。

为什么使用 range(n-1,-1,-1) 而不是 range(n-1,0,-1)

这是因为在 Python 中,range(start, stop, step) 函数生成了一个包含了 [start, stop) 范围内的整数序列,步长为 step。其中,stop 是不包括在范围内的。

如果我们使用 range(n-1, 0, -1),那么我们将会遗漏掉最开始的索引 0。也就是说,我们的遍历将会从索引 n - 1 开始,一直到索引 1

相反地,使用 range(n-1, -1, -1) 我们将包含索引 0,以确保在循环中也能检查到第一个数字。

所以,通过在程序中使用 range(n-1, -1, -1) 可以确保我们正确地遍历整个数列,包括索引 0

希望这个解答对你有帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
7.26-2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-26 21:27:10 | 显示全部楼层    本楼为最佳答案   
对于这个问题,让我们来分析一下。

在给定的程序中,range(n-1,-1,-1) 用于从后往前遍历数列,其中 n 是指数列的长度。这个遍历会从索引 n-1 开始,一直到索引 0。而在每次循环中,程序会检查当前数字是否为奇数,并将其与当前最大奇数进行比较。

为什么使用 range(n-1,-1,-1) 而不是 range(n-1,0,-1)

这是因为在 Python 中,range(start, stop, step) 函数生成了一个包含了 [start, stop) 范围内的整数序列,步长为 step。其中,stop 是不包括在范围内的。

如果我们使用 range(n-1, 0, -1),那么我们将会遗漏掉最开始的索引 0。也就是说,我们的遍历将会从索引 n - 1 开始,一直到索引 1

相反地,使用 range(n-1, -1, -1) 我们将包含索引 0,以确保在循环中也能检查到第一个数字。

所以,通过在程序中使用 range(n-1, -1, -1) 可以确保我们正确地遍历整个数列,包括索引 0

希望这个解答对你有帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-26 21:27:15 | 显示全部楼层
s = "43383"
   
n = len(s)
for j in range(n-1, -1, -1):
    if int(s[j]) % 2 == 1:
        # 找到第一个值为奇数的字符,返回 s[0:j+1]
        print(s[:j+1])
        break
# 未找到值为奇数的字符,返回空字符串
else:
    print(0)

附上作业里面的程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-26 21:27:27 | 显示全部楼层
关于最大奇数查找的程序

在给定的程序中,使用 range(n-1, -1, -1) 来遍历给定的数从最后一个元素到第一个元素,判断并找出最大的奇数。正如你所说,这是从后往前查找。

你可能对此有些困惑,因为我们常用 range(start, stop, step) 来生成一个范围序列,其中 start 是起始点,stop 是终止点(不包括),step 是步长(每次增加或减少的值)。在这种情况下,我们从 n-1 开始,递减到 -1(不包括),步长为 -1,即从最后一个元素向前逐个遍历。

为什么要这样做呢?

这是因为列表、数组和字符串的索引是从 0 开始的,而不是从 1 开始的。所以当我们使用 range(n-1, -1, -1) 时,它会从最后一个元素的索引开始,一直遍历到索引为 0 的元素。因此,这个程序正确地从后往前查找并找到最大的奇数。

这样的写法是为了确保代码的正确性和一致性,并避免在索引上出现偏差。请放心使用这种写法,它是合理且常见的方式。

希望这个解释能够帮助你理解程序中的 range(n-1, -1, -1) 语句。如果你还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-26 21:29:28 | 显示全部楼层
在 Python 中, range()  函数的工作原理是,它会生成一个从开始值到结束值(但不包括结束值)的整数序列。 range()  函数的语法如下:
range(start, stop[, step])

其中:

·  start : 可选参数,序列的开始值。默认为0。
·  stop : 必选参数,序列的结束值(不包括)。
·  step : 可选参数,步长(即每次增加的值)。默认为1。

你提到的  range(n-1, -1, -1)  的意思是,生成一个从  n-1  开始,到  -1  结束(不包括  -1 ),步长为  -1  的整数序列。这样的话,就会从  n-1  开始,逐个往下减,直到0。

换句话说,这个  range()  函数会生成以下的序列: n-1, n-2, ..., 2, 1, 0 。

这是为什么你的程序能正常运行的原因。如果你写  range(n-1, 0, -1) ,那么生成的序列就是  n-1, n-2, ..., 2, 1 ,不包括0,可能就不符合你的需求了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-26 21:32:16 | 显示全部楼层
本帖最后由 hellomyprogram 于 2023-7-26 21:33 编辑

因为range函数是不包含最后一个项目的。range是包含开头而不包含结尾的,无论步长是多少。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-26 21:35:38 | 显示全部楼层
不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 21:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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