区间range

本文详细介绍了Ruby语言中区间的三种特性:序列、条件和间隔。包括如何创建区间、使用区间进行值测试、获取区间最大最小值等操作。此外还讲解了条件特性在代码中的实际应用及间隔特性中值是否落入区间内的判断。
区间实现3种不同的特性:
序列sequences
条件conditionals
间隔intervals
----序列
ruby使用..和...来创建序列,..表示闭合区间,例如1..10表示的是[1,10]
...半闭半开区间例1...10表示[1,10)
(1..10).to_a       #用to_a方法把序列转换成数组
InBlock.gif(1..10).to_a ->[1,2,3,4,5,6,7,8,9,10]
InBlock.gif('bar'..'bat').to_a->["bar","bas","bat"]
使用区间的方法:
1.初始化               digits=0..9
2.测试区间包含值   digits.include?(5)     ->true
3.区间最大值         digits.max              ->9
4.区间最小值         digits.min              ->0
5.抛弃满足条件的区间    digits.reject {|i| i<5}     ->[5,6,7,8,9]
这里用reject方法对digits进行操作以后返回的是digits去处满足条件区间之后,区间对应的数组。另外这里不能使用reject!方法,rejcet!方法只能使用在数组中!

-----太空船spaceship操作符<=>,比较两个值,并根据第一个值是否小于,等于或大于第二个值,分别返回-1,0或+1
---------------------------------------
条件conditions
描述这种条件类似于一个双向开关,当区间的第一部分为true时,开关打开,区间第二部分为true时,开关关闭!
例:
InBlock.gifwhile line=gets
InBlock.gif  puts line if line=~/start/..line=~/end/
InBlock.gifend
代码解析:
在执行这段代码时,输入一行中如果不包含'start',开关没打开,不打印此行。
当这行中包含'start'时,开关打开,打印此行。
没遇到'end'之前,输入的没一行都打印。
遇到'end'时,这个end这行也会打印出来,同时,开关关闭,此后没行都不打印。
这里注意操作都是以行为单位进行。
---------------------------------------
间隔intervals
描述:一些值是否会落入区间表达式的间隔内。使用===即case equality操作符可以做到这点。
(1..10) === 5            ->true
(1..10) === 15          ->false
(1..10) === 3.14159 ->true
('a'..'j') ==='c'            ->true
('a'..'j') ==='z'            ->false




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/65649,如需转载请自行联系原作者
### Python 中 `range` 函数的区间规则 在 Python 中,`range()` 是一种用于生成一系列整数的对象。其基本语法为: ```python range(start, stop[, step]) ``` 其中: - **start** 表示起始值,默认为 0[^1]。 - **stop** 表示结束值,此参数是必填项,表示序列的上限(不包含该值)[^2]。 - **step** 表示步长,默认为 1。如果指定了负数,则可以生成递减的序列[^4]。 #### 关键特性 1. 当仅提供一个参数时,它被解释为 `stop` 值,而默认 `start=0` 和 `step=1`。 ```python list(range(5)) # 输出 [0, 1, 2, 3, 4] ``` 2. 如果提供了两个参数,则第一个参数作为起点 (`start`),第二个参数作为终点 (`stop`),仍然遵循左闭右开的原则。 ```python list(range(2, 8)) # 输出 [2, 3, 4, 5, 6, 7] ``` 3. 提供三个参数的情况下,第三个参数定义了步长 (`step`)。当步长为正数时,序列会从小到大依次增加;当步长为负数时,序列会从大到小依次减少。 ```python list(range(1, 10, 2)) # 步长为2,输出 [1, 3, 5, 7, 9] list(range(10, 0, -2)) # 负步长,输出 [10, 8, 6, 4, 2] ``` 4. 序列始终不会包含 `stop` 参数所指定的数值。这是由于 `range` 遵循“左闭右开”的原则[^5]。 ```python list(range(1, 5)) # 输出 [1, 2, 3, 4], 不含5 ``` 5. 尝试修改 `range` 对象中的单个元素会导致错误,因为它是不可变对象。 ```python r = range(1, 5) r[0] = 2 # 抛出 TypeError 错误 ``` #### 示例代码 以下是几个典型的例子来展示 `range` 的行为模式: ```python # 单参数情况 print(list(range(5))) # 输出 [0, 1, 2, 3, 4] # 双参数情况 print(list(range(2, 7))) # 输出 [2, 3, 4, 5, 6] # 三参数情况 (正步长) print(list(range(1, 10, 3))) # 输出 [1, 4, 7] # 三参数情况 (负步长) print(list(range(10, 0, -2))) # 输出 [10, 8, 6, 4, 2] ``` ### 总结 `range` 函数的核心在于它的区间规则——总是采用“左闭右开”,即包含起始值而不包含终止值。这种设计使得它可以无缝嵌入各种循环结构中,并与其他切片操作保持一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值