[Python no es Python] Programación estructurada | Estructura de rama (si, etc.)

Ⅰ Programación estructurada

0x00 Si solo puedes usar goto ahora

En las décadas de 1950 y 1960, los lenguajes de alto nivel aún no eran populares. Mucha gente usaba ensamblador para escribir programas. El código ensamblador se ejecutaba eficientemente, pero tenía un defecto fatal: era difícil de entender y de mantener.

La programación es algo que hacen algunas personas inteligentes. Tienen una inteligencia superior y no siguen ninguna regla al escribir código. Pueden usar el flexible y poderoso Goto a voluntad para escribir código que solo ellos pueden entender.

Este código no sólo es extremadamente ilegible, sino también extremadamente ineficiente.

Si volviera a esa época, me temo que no sobreviviría ni siquiera a un episodio.

0x01 Dios viene al rescate

En 1968 se celebró la "Conferencia de Ingeniería de Software de la OTAN" en la pintoresca ciudad alemana de Garmisch. El Comité de Ciencia y Tecnología de la OTAN convocó a casi 50 destacados programadores, informáticos y gigantes industriales para discutir y formular contramedidas para deshacerse de la "crisis del software".

Siempre que llega una crisis, siempre alguien vendrá al rescate, y esta vez es Dijkstra. Creo que debes estar familiarizado con él.

 Después de una investigación, este gran hombre publicó un artículo que conmocionó al mundo: "Teoría de la declaración dañina de ir a". Instó firmemente a abandonar la declaración goto.

Este artículo inmediatamente causó revuelo en el mundo de la programación. Dijkstra estaba bien preparado esta vez e introdujo una teoría famosa, que también es una tecnología de programación moderna:

No importa cuál sea el programa, no importa cuán complejo sea, se puede expresar usando tres estructuras básicas: secuencia, rama y bucle.

 

0x02 Programación estructurada 

Dijkstra también acuñó un término: programación estructurada.

La programación estructurada incluye los siguientes elementos:

Estructuras de control: secuencia, ramificación, bucle

Subrutina: una serie de funciones encapsuladas.

Estos son los elementos básicos de los lenguajes de programación modernos.

El debate sobre Go to nunca ha cesado, incluidos grandes maestros como Bernard Kernard, quien también se involucró y publicó un artículo "Programación estructurada con declaraciones go to", en el que analizó muchas tareas de programación comunes y descubrió que el uso de Go to resultará en algunas de las ellos La estructura más ideal. Por ejemplo: saltar de un bucle anidado, saltar de varias ramas, etc. Por lo tanto, muchos lenguajes de programación aún conservan la palabra clave goto (como el eterno lenguaje C).

Pero goto ha sido eliminado de Python.

Ⅱ.Estructura de sucursal

0x00 ¿Qué es una estructura de sucursal?

Bien, corrí un poco lejos. Volvamos al punto.

Hasta ahora, el código Python que hemos escrito se ejecuta secuencialmente, una declaración a la vez. Esta estructura de código generalmente se denomina estructura secuencial. Pero solo la estructura secuencial no puede resolver todos los problemas. ¡En este momento, necesitamos la estructura de rama en la programación estructurada!

¿Cuáles son los escenarios de aplicación de la estructura de sucursales? Diseñar un juego, verificar si el volumen de sangre del jugador todavía está allí y generar GameOver si no, iniciar sesión en el sistema y determinar si la contraseña ingresada por el usuario es verdadera o no. ..

Después de encontrar la estructura de la sucursal, solo puedo decir una cosa:

0x01 estructura de rama única 

Para usar la palabra clave if en una estructura de rama única en Python

El formato básico es el siguiente:

if 判断条件:
    代码块 # 代码为真就执行
# 否则就直接跳过

Primero analicemos este código.

¿Lo que es verdad? Estimados estudiantes, pueden volver al artículo anterior para revisar la comparativa. Hay muchos operadores de comparación en Python. Si los dos números del operador de comparación coinciden con el operador de comparación, entonces es verdadero, por ejemplo:

"a" == 1 # 输出:False
1 == 1 # 输出: True
1 > 1 # 输出:False
2 > 0.5 # 输出:True
not True # 输出:False

 Está muy claro si esta condición es cierta.

De hecho:

if 判断条件:
    代码块

Equivalente a

if bool(判断条件):
    代码块

Podemos ver la parte del bloque de código y encontraremos que hay una sangría adicional delante del bloque de código.

¿Qué es la sangría?

La sangría de código estricta es una característica importante de la sintaxis de Python, al igual que las llaves en la familia de lenguajes C (C, C++, Java, etc.), también es muy necesaria en la mayoría de las situaciones. En muchas especificaciones de código, también existen requisitos para que la escritura del código se ajuste de líneas y se sangra el código de acuerdo con ciertas reglas, pero estos requisitos son puramente para la conveniencia de las personas (programadores) de leer, usar o modificar. Para compiladores o intérpretes, haciendo la vista gorda por completo.

Pero para el intérprete de Python, la sangría antes de cada línea de código tiene un significado gramatical y lógico. Esta característica de Python a menudo causa controversia entre los usuarios de Python y los que no lo son.

De hecho, la sangría forzada del código de Python es como un arma de doble filo, con ventajas y desventajas. Obviamente, la ventaja es que bajo los estrictos requisitos de sangría del código, el código es muy limpio y estandarizado, agradable a la vista, lo que mejora en cierta medida la legibilidad y la mantenibilidad.

Sin embargo, Python tiene una sangría de código estricta. Para las personas que se han transferido de otros lenguajes, dado que el primer lenguaje para computadoras y especialidades relacionadas es generalmente C/C++ o Java, sus estilos de sintaxis son básicamente los mismos, por lo que puede llevar un tiempo. adaptar. La sangría del código Python es muy estricta: si el código no se escribe de acuerdo con sus reglas, pueden ocurrir errores de sintaxis, como sangrías inesperadas y, a veces, errores lógicos.

                                —— Citado de Zhihu (el autor lo olvidó, si algún lector lo sabe, dímelo para poder marcarlo)

En pocas palabras, el bloque de código ejecutado por if se identifica mediante sangría. Esto significa que el siguiente código también es posible

if 判断条件:
    语句A
    
    语句B # 这段代码也属于if为真要执行的语句

Nota: En Python, puede usar 4 espacios o una tabulación para representar una sangría, pero de lo contrario no puede mezclarlos. . .

 

Probemos esta estructura de una sola rama:

s = input()

if s == "666": #判断是否输入了666
    print('输入了666')

 De hecho, el if interior se puede reducir a este código.

s = input()

if s == "666": print('输入了666')

Esto también es posible.

0x02 Declaración de dos ramas

Depender únicamente de una única declaración de rama no puede resolver todos los problemas, por ejemplo: necesitamos determinar si el desempeño de un estudiante está calificado.

Si solo usamos una única declaración de rama, tenemos que lucir así:

if grade >= 60:
    print('及格')
if grade < 60:
    print('不及格,请家长!!!')

¡Esto es demasiado engorroso!

Para resolver este problema, el maestro de programación inventó una declaración legendaria: ¡la declaración de dos ramas!

Hay una palabra clave else en la segunda declaración de rama.

La sintaxis básica es la siguiente.

if 判断条件:
    代码块1
else: # 如果上面的if判断为假就执行
    代码快2

Por lo tanto, la frase con la que empezamos se puede simplificar a esto:

if grade >= 60:
    print('及格')
else:
    print('请家长!!!')



0x03 estructura de múltiples ramas

Todavía usamos el ejemplo de estructura de dos ramas de la última vez.

¿Y si queremos dividirlo en trozos más pequeños?

if grade == 100:
    print('满分')
if 100 < grade >= 90:
    print('优秀')
if 90 < grade >= 80:
    print('良好')
if 80 > grade >= 60:
    print('及格')
if grade < 60:
    print('不及格') 

¡Este código es malo y su legibilidad y escritura son demasiado pobres!

¿Cómo podría el maestro seguir leyendo y crear una declaración de múltiples ramas con unos pocos clics?

La sintaxis básica de una declaración de múltiples ramas es la siguiente

if 判断条件1:
    代码块1
elif 判断条件2: # 如果上面所有的都未执行且该条件为真就执行
    代码块2
elif ... # elif的数量可以是无数多
else:
    代码块n

¡Esto es lo mejor!

De esta manera, nuestro código anterior se convierte en

if grade == 100:
    print('满分')
elif 100 < grade >= 90:
    print('优秀')
elif 90 < grade >= 80:
    print('良好')
elif 80 > grade >= 60:
    print('及格')
else:
    print('不及格') 

¡Esto es tan guapo!

operador lógico 0x04

Hablamos de operadores lógicos en la lección anterior, son los siguientes

Operadores logicos Función
y Y operación
o O operación
no NO operación

1. y operador

Función del operador and: suponga que xey son dos expresiones. xey significa que cuando ambas expresiones de xey son verdaderas, el resultado de la operación es verdadero y puede entenderse intuitivamente como el significado de y .

① Cuando ambos lados son expresiones:

ejemplo:

print(30>20 and 40>30)#运行结果为TRUE

print(30>20 and 4>30)#运行结果为FALSE

Cuando ambos lados de y son expresiones, esto es fácil de entender.

② Cuando un lado es una variable y el otro lado es una expresión:

ejemplo:

print(20 and (c:=30)>20)#运行结果是TRUE

print(20 and (d:=20)>30)#运行结果为FALSE

③ Cuando ambos lados son variables:

ejemplo:

a=20,b=30#那么print(a and b) 运行结果为 30

a=20,b=30#那么print(b and a) 运行结果为 20

Esta situación es en realidad la más difícil de entender, siga el siguiente hilo de pensamiento.

En primer lugar, el lado izquierdo del operador y es a, que es una variable en lugar de una expresión, por lo que no es necesario juzgar que el lado izquierdo debe ser VERDADERO, y la situación en el lado derecho es la misma, entonces se supone que los resultados de ambos lados son VERDADEROS.

Esta situación está definida en Python. Cuando y va de izquierda a derecha, si todos los valores son verdaderos, se devuelve el siguiente valor. Mientras haya un valor falso, se devuelve el primer valor falso.

2. u operador

Función del operador or: Supongamos que x e y son dos expresiones. x e y significa que cuando una de las dos expresiones x e y es verdadera, el resultado de la operación es verdadero. Cuando ambas expresiones son falsas, la operación El resultado es FALSO. o puede entenderse intuitivamente como significado o .

① Cuando ambos lados son expresiones:

ejemplo:

print(30>20 or 40>30)#运行结果为TRUE

print(30>20 or 4>30)#运行结果为TRUE

print(3>20 or 4>30)#运行结果为FALSE

② Cuando un lado es una variable y el otro lado es una expresión:

ejemplo:

print(20 or (c:=30)>20)#运行结果是20

print(20 or (d:=20)>30)#运行结果为20

③ Cuando ambos lados son variables:

ejemplo:

print(20 or 30)#运行结果是20

print(30 or 20)#运行结果为30

3. no operador

La función del operador not: Supongamos que x es una expresión. Cuando x es verdadero, el resultado de la operación es falso. Cuando x es falso, el resultado de la operación es verdadero. No se puede entender intuitivamente el significado de no o incorrecto .

ejemplo:

print(not(20>10))#运行结果为FALSE

print(not(10>20))#运行结果为TRUE

0x04 Prioridad de operadores lógicos

Los operadores lógicos en Python tienen prioridades. La regla de prioridad no es>y>o . Cuando hay varios operadores lógicos en una declaración, la operación debe realizarse de acuerdo con esta prioridad.

ejemplo:

print(not(20 or 30) and 30>20)

El resultado de la operación es FALSO

 

Supongo que te gusta

Origin blog.csdn.net/m0_73552311/article/details/133042572
Recomendado
Clasificación