Python的控制结构之For、While、If循环问题

传统Python语言的主要控制结构是for循环。然而,需要注意的是for循环在Pandas中不常用,因此Python中for循环的有效执行并不适用于Pandas模式。一些常见控制结构如下。

  • for循环
  • while循环
  • if/else语句
  • try/except语句
  • 生成器表达式
  • 列表推导式
  • 模式匹配

所有的程序最终都需要一种控制执行流的方式。本节介绍一些控制执行流的技术。

01 for循环

for循环是Python的一种最基本的控制结构。使用for循环的一种常见模式是使用range函数生成数值范围,然后对其进行迭代。

res = range(3)
print(list(res)) 

#输出:[0, 1, 2] 

for i in range(3):
print(i) 

'''输出:
0
1
2
''' 

for循环列表

使用for循环的另一种常见模式是对列表进行迭代。

martial_arts = ["Sambo","Muay Thai","BJJ"]
for martial_art in martial_arts:
 print(f"{ martial_art} has influenced\
  modern mixed martial arts") 

'''输出:
Sambo has influenced modern mixed martial arts
Muay Thai has influenced modern mixed martial arts
BJJ has influenced modern mixed martial arts
''' 

02 while循环

while循环是一种条件有效就会重复执行的循环方式。while循环的常见用途是创建无限循环。在本示例中,while循环用于过滤函数,该函数返回两种攻击类型中的一种。

def attacks():
 list_of_attacks = ["lower_body", "lower_body",
  "upper_body"]
 print("There are a total of {lenlist_of_attacks)}\
  attacks coming!")
 for attack in list_of_ attacks:
 yield attack
attack = attacks()
count = 0
while next(attack) == "lower_body":
 count +=1
 print(f"crossing legs to prevent attack #{count}")
else:
 count += 1
 print(f"This is not lower body attack, \
I will cross my arms for# count}") 

'''输出:
There are a total of 3 attacks coming!
crossing legs to prevent attack #1
crossing legs to prevent attack #2
This is not a lower body attack, I will cross my arms for #3
''' 

03 if/else语句

if/else语句是一条在判断之间进行分支的常见语句。在本示例中,if/elif用于匹配分支。如果没有匹配项,则执行最后一条else语句。

def recommended_attack(position):
 """Recommends an attack based on the position"""
 if position == "full_guard":
 print(f"Try an armbar attack")
 elif position == "half_guard":
 print(f"Try a kimura attack")
 elif position == "fu1l_mount":
 print(f"Try an arm triangle")
 else:
 print(f"You're on your own, \
  there is no suggestion for an attack")
recommended_attack("full_guard")#输出:Try an armbar attack
recommended_attack("z_guard") 

#输出:You're on your own, there is no suggestion for an attack 

04 生成器表达式

生成器表达式建立在yield语句的概念上,它允许对序列进行惰性求值。生成器表达式的益处是,在实际求值计算前不会对任何内容进行求值或将其放入内存。这就是下面的示例可以在生成的无限随机攻击序列中执行的原因。

在生成器管道中,诸如 “arm_triangle”的小写攻击被转换为“ARM_TRIANGLE”,接下来删除其中的下划线,得到“ARM TRIANGLE”。

def lazy_return_random_attacks():
 """Yield attacks each time"""
 import random
 attacks = {"kimura": "upper_body",
  "straight_ankle_lock": "lower_body",
  "arm_triangle": "upper_body",
  "keylock": "upper_body",
  "knee_bar": "lower_body"}
 while True:
  random_attack random.choices(list(attacks.keys()))
  yield random attack 

#Make all attacks appear as Upper Case
upper_case_attacks = \
  (attack.pop().upper() for attack in \
  lazy_return_random_attacks())
next(upper-case_attacks) 

#输出:ARM-TRIANGLE
## Generator Pipeline: One expression chains into the next
#Make all attacks appear as Upper Case
upper-case_attacks =\
 (attack. pop().upper() for attack in\
 lazy_return_random_attacks())
#remove the underscore
remove underscore =\
 (attack.split("_")for attack in\
 upper-case_attacks)
#create a new phrase
new_attack_phrase =\
 (" ".join(phrase) for phrase in\
 remove_underscore)
next(new_attack_phrase) 

#输出:'STRAIGHT ANKLE LOCK'
for number in range(10):
 print(next(new_attack_phrase)) 

'''输出:
KIMURA
KEYLOCK
STRAIGHT ANKLE LOCK
''' 

05 列表推导式

语法上列表推导式与生成器表达式类似,然而直接对比它们,会发现列表推导式是在内存中求值。此外,列表推导式是优化的C代码,可以认为这是对传统for循环的重大改进。

martial_arts = ["Sambo", "Muay Thai", "BJJ"]
new_phrases [f"mixed Martial Arts is influenced by \
 (martial_art)" for martial_art in martial_arts]
print(new_phrases)
['Mixed Martial Arts is influenced by Sambo', \
'Mixed Martial Arts is influenced by Muay Thai', \
'Mixed Martial Arts is influenced by BJJ'] 

06 中级主题

有了这些基础知识后,重要的是不仅要了解如何创建代码,还要了解如何创建可维护的代码。创建可维护代码的一种方法是创建一个库,另一种方法是使用已经安装的第三方库编写的代码。其总体思想是最小化和分解复杂性。

使用Python编写库

使用Python编写库非常重要,之后将该库导入项目无须很长时间。下面这些示例是编写库的基础知识:在存储库中有一个名为funclib的文件夹,其中有一个_init_ .py文件。要创建库,在该目录中需要有一个包含函数的模块。

首先创建一个文件。

touch funclib/funcmod.py

然后在该文件中创建一个函数。

"""This is a simple module"""
def list_of_belts_in_bjj():
 """Returns a list of the belts in Brazilian jiu-jitsu"""
 belts= ["white", "blue", "purple", "brown", "black"]
 return belts
import sys;sys.path.append("..")
from funclib import funcmod
funcmod.list_of_belts_in-bjj() 

#输出:['white', 'blue', 'purple', 'brown', 'black'] 

导入库

如果库是上面的目录,则可以用Jupyter添加sys.path.append方法来将库导入。接下来,使用前面创建的文件夹/文件名/函数名的命名空间导入模块。

安装第三方库

可使用pip install命令安装第三方库。请注意,conda命令(

https://conda.io/docs/user-guide/tasks/manage-pkgs.html)是pip命令的可选替代命令。如果使用conda命令,那么pip命令也会工作得很好,因为pip是virtualenv虚拟环境的替代品,但它也能直接安装软件包。

安装pandas包。

pip install pandas

另外,还可使用requirements.txt文件安装包。

> ca requirements.txt
pylint
pytest
pytest-cov
click
jupyter
nbval 

> pip install -r requirements.txt 

下面是在Jupyter Notebook中使用小型库的示例。值得指出的是,在Jupyter Notebook中创建程序代码组成的巨型蜘蛛网很容易,而且非常简单的解决方法就是创建一些库,然后测试并导入这些库。

"""This is a simple module""" 

import pandas as pd 

def list_of_belts_in_bjj():
 """Returns a list of the belts in Brazilian jiu-jitsu""" 

 belts = ["white", "blue", "purple", "brown", "black"]
 return belts 

def count_belts():
 """Uses Pandas to count number of belts""" 

 belts = list_of_belts_in_bjj()
 df = pd.Dataframe(belts)
 res = df.count()
 count = res.values.tolist()[0]
 return count
from funclib.funcmod import count_belts
print(count_belts()) 

#输出:5 

可在Jupyter Notebook中重复使用类并与类进行交互。最简单的类类型就是一个名称,类的定义形式如下。

class Competitor: pass

该类可实例化为多个对象。

class Competitor: pass
conor = Competitor()
conor.name = "Conor McGregor"
conor.age = 29
conor.weight = 155
nate = Competitor()
nate.name = "Nate Diaz"
nate.age = 30
nate.weight = 170
def print_competitor _age(object):
 """Print out age statistics about a competitor""" 

 print(f"{object.name} is {object.age} years old")
print_competitor_age(nate) 

#输出:Nate Diaz is 30 years old
print_competitor_age(conor) 

#输出:Conor McGregor is 29 years old 

类和函数的区别

类和函数的主要区别包括:

  • 函数更容易解释。
  • 函数(典型情况下)只在函数内部具有状态,而类在函数外部保持不变的状态。
  • 类能以复杂性为代价提供更高级别的抽象。

总结

到此这篇关于Python的控制结构:For、While、If…的文章就介绍到这了,更多相关Python控制结构 If、While、For内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 对python中for、if、while的区别与比较方法

    如下所示: if应用举例: #if 若条件成立,只执行一次 #if 条件:如果条件成立,执行条件后的代码块内容,不成立,直接跳过代码块 #判断如果年龄age小于18,输出未成年 #=一个等号表示赋值的意思 ==双等号判断等号两边的值是否相等 if age==18: print('未成年') #两种情况的判断 #如果age小于18 输出未成年,否则输出成年人 #如果条件成立,执行条件后的代码块内容,条件不成立,执行else后的代码块内容,有且只会执行其中某一个代码块 if age<18: prin

  • python入门之语句(if语句、while语句、for语句)

    python入门之语句,包括if语句.while语句.for语句,供python初学者参考. //if语句例子 name = 'peirong'; if name == 'peirong': print 'this is peirong'; elif name== 'maojun': print 'this is maojun'; else: print 'others'; //while语句 i = 0; a = range(10); while i < a.__len__(): print

  • Python基础教程之if判断,while循环,循环嵌套

    if判断 判断的定义 如果条件满足,就做一件事:条件不满足,就做另一件事:  判断语句又被称为分支语句,有判断,才有分支: if判断语句基本语法 if语句格式: if 判断的条件:     条件成立后做的事     ... ... 代码缩进为一个tab键,或者四个空格,官方建议使用空格:但应注意,在python开发中,tab和空格不能混用! 判断年龄示例: # 判断是否成年,成年则可以进网吧 age = 19 if age>=18: print("你满了18岁,可以进网吧") i

  • 详解python基础之while循环及if判断

    wlile循环 while True表示永远为真,不管是什么条件都会向下执行,下面是写的一个例子. #!/usr/bin/env python age = 24 #给age赋一个值 while True: #进入循环 inputting = int (input("The input number is:")) #保存用户输出到变量inputting if inputting == age: #然后依次比较 print("Guessed it!!!") break

  • Python的控制结构之For、While、If循环问题

    传统Python语言的主要控制结构是for循环.然而,需要注意的是for循环在Pandas中不常用,因此Python中for循环的有效执行并不适用于Pandas模式.一些常见控制结构如下. for循环 while循环 if/else语句 try/except语句 生成器表达式 列表推导式 模式匹配 所有的程序最终都需要一种控制执行流的方式.本节介绍一些控制执行流的技术. 01 for循环 for循环是Python的一种最基本的控制结构.使用for循环的一种常见模式是使用range函数生成数值范围

  • Python创建一个空的dataframe,并循环赋值的方法

    如下所示: # 创建一个空的 DataFrame df_empty = pd.DataFrame() #或者 df_empty = pd.DataFrame(columns=['A', 'B', 'C', 'D']) #添加数据 a为一个新的dataframe df_empty = df_empty.append(a) 以上这篇Python创建一个空的dataframe,并循环赋值的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Python matplotlib读取excel数据并用for循环画多个子图subplot操作

    读取excel数据需要用到xlrd模块,在命令行运行下面命令进行安装 pip install xlrd 表格内容大致如下,有若干sheet,每个sheet记录了同一所学校的所有学生成绩,分为语文.数学.英语.综合.总分 考号 姓名 班级 学校 语文 数学 英语 综合 总分 ... ... ... ... 136 136 100 57 429 ... ... ... ... 128 106 70 54 358 ... ... ... ... 110.5 62 92 44 308.5 画多张子图需要

  • Python中的条件判断语句与循环语句用法小结

    if语句 >>通用格式 if语句一般形式如下: if <test1>: <statements1> elif <test2>: <statements2> else: <statements3> 另外需要注意的是,Python中是没有switch/case语句的 while循环 while语句是Python语言中最通用的迭代结构,简而言之,只要顶端测试一直计算到真值,就会重复执行一个语句块. >>一般格式 while &l

  • Python 如何用一行代码实现for循环初始化数组

    我就废话不多说了,大家还是直接看代码吧~ # 用一行代码实现for循环初始化数组 o = 10 b = [ o + u for u in range( 10 ) ] print( b ) # 结果是 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] x = 2 y = 3 c = [ i * y + x for i in range( 10 ) ] print( c ) # 结果是 [2, 5, 8, 11, 14, 17, 20, 23, 26, 29] 补充:

  • python语法之语言元素和分支循环结构详解

    目录 一.语言元素 1.变量及其类型 (1)变量 (2)变量类型 2.变量命名规则 3.变量的使用 4.运算符 二.分支循环结构 1.if 2.for-in 3.while 总结 python中严格控制缩进,一个tab键或者4个空格 一.语言元素 1.变量及其类型 (1)变量 所谓变量,就是可以改变的量. 首次使用变量会在内存中划分空间,并初始化值: 再次使用变量不再划分空间,修改原空间的. (2)变量类型 ①数值类型 int float bool:True.False ②字符串类型 字符串运算

  • Python通过两个dataframe用for循环求笛卡尔积

    合并两个没有共同列的dataframe,相当于按行号求笛卡尔积. 最终效果如下 以下代码是参考别人的代码修改的: def cartesian_df(A,B): new_df = pd.DataFrame(columns=list(A).extend(list(B))) for _,A_row in A.iterrows(): for _,B_row in B.iterrows(): row = A_row.append(B_row) new_df = new_df.append(row,igno

  • Python基础教程之控制结构详解

    目录 0. 学习目标 1. 代码块与缩进 2. 条件语句 2.1 if 语句 2.2 if 语句的嵌套 2.3 断言 3. 循环 3.1 while 循环 3.2 for 循环 3.3 中断循环 4. 控制语句综合嵌套 5. 列表解析式 注意: 总结 0. 学习目标 Python 是简洁.易学.面向对象的编程语言.它不仅拥有强大的原生数据类型,也提供了简单易用的控制语句.在<Python基础教程>的系列博文中,我们已经介绍了 Python 中的内置原生数据类型,并且也了解了程序如何利用输入.输

  • 关于Python如何避免循环导入问题详解

    前言 Python 中使用package时,出现循环导入问题十分常见,我们创建如下package来说明这个问题: pkg ├── __init__.py ├── module_a.py └── module_b.py 其中, __init__.py 将pkg指定为一个Python package module_a.py中定义了一个action_a()函数,该函数引用了module_b.py中的一个attribute,如一个函数或变量 module_b.py中定义了一个action_b()函数,该

随机推荐