精华内容
下载资源
问答
  • #include<iostream> #include<fstream> #include<cstdlib> using namespace std; const int size = 50; int main() { char filename[50]; cin.getline(filename, ... //这个最好是写0.0....}
  • 当我们想要写一个循环体,期望执行10次的时候,我们会使用以下方式:for (int i=0; i<10; i++){}可以看到,为了...从0开始更优雅在《为什么程序员喜欢使用0 ≤ i < 10这种左闭右开的形式写for循环?》一文中...

    0ef0c0b70b95d081a76a63562918f9ff.png

    43e1116a0e1a9eb69a56ebb9357c85c7.png

    1a01c05b27f0d99e8ebf50cf8eb8b97b.png

    af735a2325289f7586a18e25027a1e05.png

    6f46e37f451d930fb0e74a3fe32a3e71.png

    3f3683c4a56784f315057eb6c995a167.png

    当我们想要写一个循环体,期望执行10次的时候,我们会使用以下方式:
    for (int i=0; i<10; i++){
    }
    可以看到,为了保证循环10次,我们定义了一个整数变量从0开始。还有,当我们定义数组的时候,在常见的C语言、Java、Python等语言中,都是使用下标0来表示第一个元素的。

    10a786de36ddd15838ae9eb218309411.png

    f1b1eb0ac5043e7447af1e7134eddff9.png

    0eff7cfee41a28ede612a80dbbdb20a3.png

    f041e7d0897521e75a89b9297f27187b.png

    90e865432d5728e4c704c9d68f0bb7dd.png

    从0开始更优雅
    在《为什么程序员喜欢使用0 ≤ i < 10这种左闭右开的形式写for循环?》一文中我们分析过,Dijkstra通过分析,得出在进行范围表达的时候,使用左闭右开的方式更加合理。但是,Dijkstra在分析出2 ≤ i < 13这种形式更加合理之后,他有陷入了另外一个思考,那就是:当处理长度为 N 的序列时,到底第一个元素的下标使用0还是1更加合适?关于这个分析,他的出发点很简单,那就是哪种方式更加漂亮,更加优雅。他认为,使用左闭右开的表达方式,当下标从 1 开始时,下标范围为 1 <= i < N+1;当下标从 0 开始时则是 0 <= i < N;而显然后面这种表达式更加漂亮、优雅一些。所以,他建议我们使用0作为第一个下标。

    944aed9c70d18efc7136eb540c47cad1.png

    5e4bf2c44441ff53e86c7329cc8c3069.png

    eba79719fef21f7b4c13528f59b7f958.png

    a5f4978bf6c983b4b70a991c48e671dd.png

    9b9fed06fab223c752d50720e0523ccc.png

    计数表示偏移量
    很多人学习编程都是从C语言开始的,那么,C语言就是一个典型的0-base语言(以0作为计数的开始),其实,这一约定早在BCPL时代就是这样的了。在C语言还不叫C语言,还叫BCPL的时候,他的作者马丁·理察德就设计了数组从0开始的索引方式。当我们在BCPL(C语言)中定义数组int arr[8]的时候,编辑器会在内存中开辟一块空间(这个空间中可能包含多个内存单元)供该数组使用。为了能让数组找到编译器为自己开辟的空间,会把这块内存空间中第一个内存单元的地址(0X0000001)赋值给这个数组,当我们使用&arr的时候,就可以拿到这块地址。

    578f2e9b6f973489035ef0e29b5b205c.png

    BCPL最初是用IBM 7094机器编译的;它在编译时会优化这些数组索引提供的指针反参考运算(indirection),即可以通过指针取出地址中存储的值,这个特性也一直延续到今天。有了指针之后,我们可以使用int *pr = arr的方式初始化一个指针,那么,这时候,指针pr也会指向数组的内存空间的第一个内存单元的地址。

    1cffb0c1c05690d62b2d19602b3eff5a.png

    那有了数组和指针,想要使用这块内存第一个内存单元存储一个变量的时候,就需要想办法表示这第一个空间。那么,BCPL的作者采用了0作为数组第一个元素的下标,因为他认为,数组的下标应该和指针的偏移量是相对应的。这样在使用第一个内存单元的时候,直接使用arr[0]或者*(p+0)就可以了。

    31a5174d6a50605e9a58e204110298f4.png

    955f68f236501bb1d451c151d3f41c8b.png

    1dd4a1c8aad95df3ffb6f615d6b11505.png

    因为指针 *(p+0) 这种表达形式中的0表示的是偏移量,所以,无论数组的下标从几开始, *(p+0) 都是用于存取内存中的 p+0位址的值,也就是0X0000001这块内存单元的值。试想一下,如果使用1作为数组的起始下标,那么arr1就应该指向0X0000001这块内存,但是 *(p+1) 按照偏移量的计算方式,需要指向0X0000005这块内存。这种情况下,如果想要让 *(p+1)和arr[1] 指向同一块内存,就需要额外做一次减法指令。因为几乎所有计算机结构,都借由位址和偏移量来表示直接引用内存,所以,像C语言这种使用0做为数组的第一个下标使得语言的实现上更加容易。但是值得一提的是,在C语言流行起来之前,还是有很多1-base的编程语言的,如FORTRAN、BASIC等编程语言的数组下标都是从1开始的。随着C语言的发扬光大,很多语言都参考了C语言的做法。

    938b7ffe73feb0083b5594e65d30407f.png

    d34d2888b94b84771ef970cb83cf51e3.png

    8c35888dcec7f73818b4ddfee34ee812.png

    513fb270ea75635aa7a0f9f90480ee49.png

    Python作者的解释
    关于这个问题,之前也有网友在Twitter上询问过Python之父——Guido van Rossum,他给出过正面回答,我把回答内容的翻译版贴在下面:我记得自己就这个问题思考过很久;Python的祖先之一ABC语言,使用的索引是从1开始的(1-based indexing),而对Python语言有巨大影响的另一门语言,C语言的索引则是从0开始的。我最早学习的几种编程语言(Algol, Fortran, Pascal)中的索引方式,有的是1-based的,有的是从定义的某个变量开始(variable-based indexing)。而我决定在Python中使用0-based索引方式的一个原因,就是切片语法(slice notation)。让我们来先看看切片的用法。可能最常见的用法,就是“取前n位元素”或“从第i位索引起,取后n位元素”(前一种用法,实际上是i==起始位的特殊用法)。如果这两种用法实现时可以不在表达式中出现难看的+1或-1,那将会非常的优雅。使用0-based的索引方式、半开区间切片和缺省匹配区间的话(Python最终采用这样的方式),上面两种情形的切片语法就变得非常漂亮:a[:n]和a[i:i+n],前者是a[0:n]的缩略写法。如果使用1-based的索引方式,那么,想让a[:n]表达“取前n个元素”的意思,你要么使用闭合区间切片语法,要么在切片语法中使用切片起始位和切片长度作为切片参数。半开区间切片语法如果和1-based的索引方式结合起来,则会变得不优雅。而使用闭合区间切片语法的话,为了从第i位索引开始取后n个元素,你就得把表达式写成a[i:i+n-1]。这样看来,1-based的索引方式,与切片起始位+长度的语法形式配合使用会不会更合适?这样你可以写成a[i:n]。事实上,ABC语言就是这样做的——它发明了一个独特的语法,你可以把表达式写成a@i|n。但是,index:length这种方式在其它情况下适用吗?说实话,这点我有些记不清了,但我想我是被半开区间语法的优雅迷住了。特别是当两个切片操作位置邻接时,第一个切片操作的终点索引值是第二个切片的起点索引值时,太漂亮了,无法舍弃。例如,你想将一个字符串以i,j两个位置切成三部分,这三部分的表达式将会是a[:i],a[i:j]和a[j:]。

    98006a21c334196b65016b0eabd5789e.png

    27fdc329d1b6eee854f465988307c5ad.png

    5aed36b2d979debb4a612d33b2e1b497.png

    4d05c8d193a2b535bafda8ce7e002086.png
    展开全文
  • range是python中的一个内置函数,用于生成一系列连续的整数,创建一个整数列表,一般用在 for 循环中。函数语法range(start, stop[, step])参数说明:start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价...

    range是python中的一个内置函数,用于生成一系列连续的整数,创建一个整数列表,一般用在 for 循环中。

    函数语法range(start, stop[, step])

    参数说明:

    start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

    实例>>>range(10) # 从 0 开始到 10

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    >>> range(1, 11) # 从 1 开始到 11

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    >>> range(0, 30, 5) # 步长为 5

    [0, 5, 10, 15, 20, 25]

    >>> range(0, 10, 3) # 步长为 3

    [0, 3, 6, 9]

    >>> range(0, -10, -1) # 负数

    [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

    >>> range(0)

    []

    >>> range(1, 0)

    []

    以下是 range 在 for 中的使用,循环出runoob 的每个字母:>>>x = 'runoob'

    >>> for i in range(len(x)) :

    ... print(x[i])

    ...

    r

    u

    n

    o

    o

    b

    >>>

    相关教程推荐:Python视频教程

    展开全文
  • python range() 函数可创建一个整数列表,一般用在 for 循环中。函数语法range(start,stop[,step])参数说明:start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,...

    python range() 函数可创建一个整数列表,一般用在 for 循环中。

    函数语法range(start, stop[, step])

    参数说明:

    start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);

    stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5

    step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

    实例>>>range(10)        # 从 0 开始到 10

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    >>> range(1, 11)     # 从 1 开始到 11

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    >>> range(0, 30, 5)  # 步长为 5

    [0, 5, 10, 15, 20, 25]

    >>> range(0, 10, 3)  # 步长为 3

    [0, 3, 6, 9]

    展开全文
  • python range() 函数可创建一个整数列表,一般用在 for 循环中。函数语法range(start, stop[, step])参数说明:start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束...

    python range() 函数可创建一个整数列表,一般用在 for 循环中。

    函数语法range(start, stop[, step])

    参数说明:

    start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);

    stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5

    step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

    实例

    >>>range(10) # 从 0 开始到 10

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    >>> range(1, 11) # 从 1 开始到 11

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    >>> range(0, 30, 5) # 步长为 5

    [0, 5, 10, 15, 20, 25]

    >>> range(0, 10, 3) # 步长为 3

    [0, 3, 6, 9]

    >>> range(0, -10, -1) # 负数

    [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

    >>> range(0)

    []

    >>> range(1, 0)

    []

    以下是 range 在 for 中的使用,循环出runoob 的每个字母:

    >>>x = 'runoob'

    >>> for i in range(len(x)) :

    ... print(x[i])

    ...

    r

    u

    n

    o

    o

    b

    >>>

    在tensorflow python 3.6的环境下,range函数中实参必须为int型,否则报错

    def load_dataset(data_dir, img_size):

    """img_files = os.listdir(data_dir)

    test_size = int(len(img_files)*0.2)

    test_indices = random.sample(range(len(img_files)),test_size)

    for i in range(len(img_files)):

    #img = scipy.misc.imread(data_dir+img_files[i])

    if i in test_indices:

    test_set.append(data_dir+"/"+img_files[i])

    else:

    train_set.append(data_dir+"/"+img_files[i])

    return"""

    global train_set

    global test_set

    imgs = []

    img_files = os.listdir(data_dir)

    for img in img_files:

    try:

    tmp= scipy.misc.imread(data_dir+"/"+img)

    x,y,z = tmp.shape

    coords_x = x // img_size

    coords_y = y // img_size

    #coords_y = y / img_size

    # coords_x = x / img_size

    #print (coords_x)

    coords = [ (q,r) for q in range(coords_x) for r in range(coords_y) ]

    for coord in coords:

    imgs.append((data_dir+"/"+img,coord))

    except:

    print ("oops")

    test_size = min(10,int( len(imgs)*0.2))

    random.shuffle(imgs)

    test_set = imgs[:test_size]

    train_set = imgs[test_size:][:200]

    return

    def get_batch(batch_size,original_size,shrunk_size):

    global batch_index

    """img_indices = random.sample(range(len(train_set)),batch_size)

    for i in range(len(img_indices)):

    index = img_indices[i]

    img = scipy.misc.imread(train_set[index])

    if img.shape:

    img = crop_center(img,original_size,original_size)

    x_img = scipy.misc.imresize(img,(shrunk_size,shrunk_size))

    x.append(x_img)

    y.append(img)"""

    max_counter = len(train_set)/batch_size

    counter = batch_index % max_counter

    #counter = tf.to_int32(batch_index % max_counter)

    window = [x for x in range(int(counter*batch_size),int((counter+1)*batch_size))]

    #window = [x for x in range(tf.to_int32(counter*batch_size),tf.to_int32((counter+1)*batch_size))]

    #window = [x for x in np.arange((counter*batch_size),((counter+1)*batch_size))]

    #a1=tf.cast(counter*batch_size,tf.int32)

    #a2=tf.cast((counter+1)*batch_size,tf.int32)

    #window = [x for x in range(a1,a2)]

    #window = [x for x in np.arange(a1,a2)]

    #win2 = tf.cast(window,tf.int32)

    #win2 = tf.to_int32(window)

    #win2 = tf.to_int64(window)

    imgs = [train_set[q] for q in window]

    x = [scipy.misc.imresize(get_image(q,original_size),(shrunk_size,shrunk_size)) for q in imgs]#scipy.misc.imread(q[0])[q[1][0]*original_size:(q[1][0]+1)*original_size,q[1][1]*original_size:(q[1][1]+1)*original_size].resize(shrunk_size,shrunk_size) for q in imgs]

    y = [get_image(q,original_size) for q in imgs]#scipy.misc.imread(q[0])[q[1][0]*original_size:(q[1][0]+1)*original_size,q[1][1]*original_size:(q[1][1]+1)*original_size] for q in imgs]

    batch_index = (batch_index+1)%max_counter

    相关推荐:《Python教程》

    展开全文
  • python range() 函数可创建一个整数列表,一般用在 for 循环中。函数语法range(start, stop[, step])参数说明:start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop ...
  • python range() 函数可创建一个整数列表,一般用在 for 循环中。函数语法range(start, stop[, step])参数说明:start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束...
  • 详细内容python range() 函数可创建一个整数列表,一般用在 for 循环中。函数语法range(start, stop[, step])参数说明:start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 ...
  • enumerate()是python的内置函数、适用于python2.x和python3.xenumerate在字典上是枚举、列举的意思enumerate参数为可遍历/可迭代的对象(如列表、字符串)enumerate多用于在for循环中得到计数,利用它可以同时获得索引...
  • 这是关于Python里比较难得一个函数,甚至于章节不多,但是讲的内容却很多很多,大家对部分内容...1.引用计数和对象销毁对于简单对象,当执行删除对象的操作时会调用__del__()方法。对于包含循环引用的复杂对象,引用...
  • python range() 函数可创建一个整数列表,一般用在 for 循环中。函数语法range(start, stop[, step])参数说明:start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束...
  • enumerate()是python的内置函数、适用于python2.x和python3.xenumerate在字典上是枚举、列举的意思enumerate参数为可遍历/可迭代的对象(如列表、字符串)enumerate多用于在for循环中得到计数,利用它可以同时获得索引...
  • python range() 函数可创建一个整数列表,一般用在 for 循环中。函数语法range(start, stop[, step])参数说明:start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束...
  • 2000) /* 两千次计数为 1S 2000×0.5ms=1s*/ {<!-- --> itime=0; /*定时 1s 时间到,软计数清零 */ clockplus(); /* 时间结构体变量秒数加 1 */ update_clockstr(); /* 更新...
  • 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路需要一个循环结构,不断对...当 无符号右移 操作执行到终点时候(输入数变成 0),终止循环,同时返回最终计数的变量。位运算基础知识计算机对...
  • 在 JavaScript 中,计数循环就是一种最简单的迭代: for (let i = 1; i <= 10; ++i) { console.log(i); } 循环是迭代机制的基础,这是因为它可以指定迭代的次数,以及每次迭代要执行什么操作。每次循环都会...
  • js迭代

    2021-01-08 11:15:04
    在 JavaScript 中,计数循环就是一种最简单的迭代: for (let i = 1; i <= 10; ++i) { console.log(i); } 循环是迭代机制的基础,这是因为它可以指定迭代的次数,以及每次迭代要执行什么操作。每次循环都会在下一...
  • PHP中变量底层分析

    2019-09-21 23:59:42
    写时拷贝和引用计数循环引用:会形成内存泄漏,需要PHP垃圾回收机制去回收 写时拷贝是什么意思? 就是当发生写的时候,会发生zval创建。 ①、对于普通的变量比如$a = 1这个时候会发生创建zval ②...
  • 最近一直整并发这块东西,顺便写点Java并发的例子,给大家做个分享,也强化下自己记忆,如果有什么错误或者不当的地方,欢迎大家斧正。...CyclicBarrier的介绍CyclicBarrier 的字面意思是可循环(Cyc...
  • JavaScript中的迭代器

    2021-01-09 15:35:31
    在 JavaScript 中,计数循环就是一种最简单的迭代: for (let i = 1; i <= 10; ++i) { console.log(i); } 循环是迭代机制的基础,这是因为它可以指定迭代的次数,以及每次迭代要执行什么操作.迭代会在一个有序...
  • 1、什么是GC? GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的 GC功能可以自动监测对象是否超过作用域从而...
  • 9.8.1 理解其他关键字的意思 9.8.2 理解列的类型 9.8.3 用SHOW和DESCRIBE来查看数据库 9.8.4 创建索引 9.9 理解MySQL的标识符 9.10 选择列数据类型 9.10.1 数字类型 9.10.2 日期和时间类型 9.10.3 字符串...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    UP测试,温度循环测试,高温贮存测试,湿度贮存测试等。 成测则是产品封装好后的测试,即PACKAGE测试。即是所有通过中测的产品封装后的测试,方法主要是机台自动测试,但测试项目仍与WAFER TEST相同。PACKAGE...
  • <div><p>学习 React 的过程中实现了一个个人主页,没有复杂的实现和操作,适合入门 ~ 这个项目其实功能很简单,就是常见的主页、博客、demo、关于我等功能。 页面样式都是自己写的,...
  • LINGO软件的学习

    2009-08-08 22:36:50
    集成员无论用何种字符标记,它的索引都是从1开始连续计数。在attribute_ list可以指定一个或多个集成员的属性,属性之间必须用逗号隔开。 可以把集、集成员和集属性同C语言中的结构体作个类比。如下图: 集 ←→ ...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

循环计数什么意思