notas Go estudio para el desarrollo de núcleo (X) - control de bucle

control de bucle

  1. Mientras que la ausencia y hacer ... mientras que el lenguaje Golang, no sólo para, por puede reemplazar el formato bucle while, o continuar a través de la adición de descanso fuera del circuito.

  2. para el formato básico:

    for \<循环变量初始化>;<循环条件>;<循环变量迭代> {
     			\<循环体>
     		}
    

    Ejemplo 1:

    for i := 1 ; i < = 10 ; i++ {
    	\<循环体>
    }
    

    Ejemplo 2:

    var i int = 1
    for i ;  i < = 10 ; i++ {
    	\<循环体>
    }
    

    Ejemplo 3:

    for {                  //实际上等同于 for ; ; {...},也就是 for <空值>;<空值>;<空值> {...}
    	var i int = 1
    	if i <= 10 {
    		\<执行语句>
    	} else {
    		break
    	}
    	i++
    }                      //等同于实现了while功能。
    
  3. Tenga en cuenta que si la variable de bucle i define independientemente el uno del otro, entonces sólo apenas dentro del bucle, el archivo de código contiene una pluralidad de los ámbitos para i ...
    Ejemplo 1:

    for i := 1 ; i <= 10 ; i++ {     
    	\<循环体>
    }
    fmt.Println("i的值为: ",i)        //这个编译会报错,因为i只处于循环体作用域,下面全局变量的"i"根本不存在
    

    Ejemplo 2:

    i := 1
    for ; i <= 10 ; i++ {     
    	\<循环体>
    }
    fmt.Println("i的值为: ",i)        //这个编译就没有问题了,因为变量在循环体外,作用域是main函数体。
    
  4. Atravesando cadena, cada cadena de caracteres extraída, utilizando el recorrido de bytes por defecto pasar a través de, por lo que para la codificación de caracteres utf8 tres bytes después de la división ilegible
    Python similares, caracteres de la cadena se pueden usar string [i ] de la forma sujeto a extraer, a través de los tres ejemplos siguientes muestran puntos:
    ejemplo 1:

    var str string = "Oh!shit!"           //标准英文字符串
    for i := 0 ; i <= len(str) ; i++ {
    	fmt.Printf("%c",str[i]) 
    }                                     //因为循环是按照byte遍历,所以标准ascii编码的都没有问题,但是如果存在汉字,那么就出现乱码
    

    Ejemplo 2:

    var dest string = "oh!shit!踩到狗屎了"     //包含中文了
    str := []rune(dest)
    for i := 0; i <= len(str) ; i++ {
    	fmt.Printf("%v\n",str[i])
    }  
    //使用切片后,按照字符遍历了。使用切片方式结果正确,但是报错 
    //panic: runtime error: index out of range待解决
    

    Ejemplo 3: Utilización de la gama, es más recomendable este método

    var str1 string = "oh!shit!又踩到狗屎了"
     //一般会有一个index和value配合使用,在此直接用下划线_忽略,index为索引
     for _ , value := range str1 {             
     	fmt.Printf("%c\n",value)
     }
    
  5. Caso: todo de impresión entre 1 y 100 es un múltiplo entero de 9, y estos enteros y

    package main
    
    import "fmt"
    
    func main() {
    	var i int = 1
    	var sum int
    	for ; i <= 100 ; i++ {
    		if i % 9 == 0 {
    			fmt.Printf("%v\t",i)
    			sum += i
    		}
    	}
    	fmt.Println()
    	fmt.Printf("这些数的总和为:%v",sum)
    }
    
  6. Caso: Imprima el siguiente formato + 6 = 0 61 + 5 = 6 + 0 = 6 ... 6 son salto de línea

    package main
    
    import "fmt"
    
    func main() {
    	for i := 0 ; i <= 6 ; i++ {
    		fmt.Printf("%d + %d = 6\n",i,6-i)
    	}
    }
    
  7. bucle anidado: recomendaciones contener hasta dos anidada lógica, o demasiado complejo, si el bucle de n veces, el bucle de m veces exteriores, n veces de modo que realiza m veces *
    caso: dota2 los cuatro equipos de Ti: og, por ejemplo, valor de la capacidad LGD, alas, cinco jugadores de cada equipo, cada entrada (0 a 99), cada equipo a encontrar valores promedio y el valor de la capacidad de la capacidad promedio de cuatro clanes

    package main
    
    import "fmt"
    
    func main() {
    	/*
    	需求:Ti中4个dota2战队:og,eg,lgd,wings,每个战队五名队员,输入每个人的能力值(0~99)。
    	求每个战队的平均能力值以及四个战队的平均能力值。
    
    	需求分析:
    		目前尚不知道Golang列表循环咋整,因为按照教程没学到!做映射吧也不知道咋做,干脆战队1234吧
    		只要求出每个战队平均能力值,相加之后除以便是四个战队总平均能力值
    		两层嵌套已经很费劲了,稍微不注意就会出错,代码如下
    	 */
    	var totalSum float64
    	for j := 1 ; j <= 4 ; j++ {
    		var memAbil float64
    		var teamSum float64
    		var teamAvg float64
    
    		for i := 1; i <= 5; i++ {
    			fmt.Printf("请输入战队%d的第%d名成员的能力值: \n",j,i)
    			fmt.Scanf("%v",&memAbil)
    			teamSum += memAbil
    			teamAvg = teamSum / 5
    		}
    		fmt.Printf("战队%d的平均能力值为:%f\n",j,teamAvg)
    		totalSum += teamAvg
    	}
    	fmt.Printf("四支战队总的平均能力值为:%f",totalSum / 4)
    }
    
  8. Caso: 99 tablas de multiplicar de impresión (clásico problema)

    package main
    
    import "fmt"
    
    func main() {
    	/*
    	需求:99乘法表
    	1 * 1 = 1
    	1 * 2 = 2	2 * 2 = 4
    	1 * 3 = 3   2 * 3 = 6	3 * 3 = 9
    
    	需求分析:
    	两层循环,分别用变量i,j表示
    	打印肯定是 fmt.Printf("%d * %d = %d") 具体分析三个%d应该对应哪些变量
    	变量定义在main()中,不要直接定义在for循环作用域中
    	 */
    	var j int
    	var i int
    	var num int
    
    	fmt.Println("请输入乘数的最大值:")
    	fmt.Scanf("%d",&num)
    	fmt.Println("乘法表结果如下: ")
    	for j = 1 ; j <= num ; j++ {
    		for i = 1; i <= j; i++ {
    			fmt.Printf("%d * %d = %d\t", i,j,i*j )
    		}
    		fmt.Println()
    	}
    }
    
Publicado 50 artículos originales · alabanza ganado 18 · vistas 4019

Supongo que te gusta

Origin blog.csdn.net/weixin_41047549/article/details/89638566
Recomendado
Clasificación