python学习2_基础编程

本文深入讲解Python中的循环结构,包括while循环和for循环的基本使用、条件控制、嵌套循环及结合else语句的使用技巧。同时,通过实例演示了如何利用循环进行数据处理和算法实现,如数字累加、回文数查找、排序算法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

while循环的基本使用

程序的执行顺序分为三种:•顺序 ——从上向下,顺序执行代码

​ •分支 ——根据条件判断,决定执行代码的分支

​ •循环 ——让 特定代码 重复 执行

while循环最常用的应用场景就是 让执行的代码 按照 指定的次数重复 执行

简单练习:

'''
需求:
计算 1 ~ 100 之间所有数字的累计求和结果
使用while和for两种方式
'''
i = 1
# 定义变量保存和
sum = 0
while i<101:
    sum = sum + i               #非常重要的一种处理方式。
    i += 1                      # 修改循环变量
print(sum)
# python没有自增自减
###########用for的方式
sum = 0
for ele in range(1,101):        #  range(1,101)左闭右开
    sum += ele
print(sum)

break和continue的使用

•break某一条件满足时,不再执行循环体中后续重复的代码,并退出循环

•continue某一条件满足时,不再执行本次循环体中后续重复的代码,但进入下一次循环判断,在整个循环中,只有某些条件,不需要执行循环代码,而其他条件都需要执行

例子:

'''
找出所有非3位回文数
'''
i=100
while i<1000:
    bai=i//100
    ge=i%10
    zhongjianzhi=i
    i+=1          #注意:使用 continue 时,条件处理部分的代码,需要特别注意,不小心会出现死循环
    if bai==ge:
        continue   #若此处用pass,则i+=1可以放到最后
    else:
        print(zhongjianzhi)
'''
找到第10个5位数回文数
'''
i=10000
count=0                          # 计数器,重要****,需要计数时会用到
while i<100000:
    wan=i//10000
    ge=i%10
    qian=i%10000//1000
    shi=i%100//10
    if (wan==ge) and (qian==shi):
        count+=1
        if count==10            # 第一次满足这个条件就是第一个回文数
        	print(i)
            break               # 需要到第10次才会执行break,执行后跳出循环
    i+=1

pass

一个空指令,什么都不执行。是为了保持程序结构的完整性

嵌套循环

在这里插入图片描述

例子:

# 打印从1到5  做3遍.********注意嵌套的例子最外面的一层表示做了几次,里面一层表示做什么
j = 1
while j < 4:
    i = 1
    while i < 6:
        print(i)
        i += 1
    j += 1
嵌套循环练习:九九乘法表
lie=1
while lie<10:
    hang=1
    while hang<lie+1:
        print('%d * %d = %d'%(lie,hang,lie*hang),end='\t') 
         # end=''表示不换行,\t 表示制表位,\n 表示换行, \r 表示回车   print指令如果不加后边end,默认换行
        hang+=1
    print()
    lie+=1

for循环

•作用:遍历数据(**容器)**中的元素,任何可迭代的数据都能通过for循环遍历。字符串属于容器
在这里插入图片描述

例子:

#打印hello world中的每一个元素
str = 'hello world'
for ele in str:
    print(ele)

in 和not in

Python in 操作符用于判断元素是否存在于容器中,如果在容器中,返回 true,否则返回 false

例子:

str =  'hello'
if 'h' in str:    #判断字母是否属于字符串里
    print('h' not in  str)
    #结果为False

for 循环中使用continue和braeak

•在for循环中也可以使用continue和break跳出循环,使用的方式和while循环一致,遍历字符串中的所有元素。

####用while的方式遍历字符串中的所有元素
str = 'hello world'
# 字符串长度
length = len(str)             # 容器长度len()求取
i = 0
while i<length:
    # 获取元素
    ele = str.__getitem__(i)   #或者用str[i]
    print(ele)
    # 修改变量
    i += 1

循环综合练习

""" 
打印字符串'hello world'中第三个'l'出现之前(不包含第三个'l')的所有元素 
"""
str = 'hello world'
# 计数
count = 0                          #注意计数的运用
for ele in str:
    if ele == 'l':
        count += 1
        if count == 3:
            break                  #break执行后立即跳出for循环结束程序
    print(ele)

区间

•range()可创建一个整数列表,一般用在 for 循环中。左闭右开

区间操作

•获取区间中某一个元素_getitem_(角标)

•遍历区间 for ele in rang(1,101)

•判断某一个数是否在区间里面 if ele in rang(1,101): 在区间内的话返回Rure

循环总结

while循环和for循环区别:

​ •while循环是python中的条件循环语句

​ •for循环是python中的循环遍历语句

循环结合else

•else中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while循环也一样

•如果for循环中执行了break 那么else中代码将不会执行

在这里插入图片描述

循环结合else练习

'''
需求:
判断登录密码'hhew2383dW_fkf&E@^'是否合法
要求:
1. 密码必须是数字、字母(大小写都可以)、和下划线,否则不合法
2. 如果密码合法,就输出'密码合法,可以登录'(登录操作)
'''

pwd = 'hhew2383dW_fkf&E@^'
# 定义容器
str = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'
# 计数器
count = 0
# 判断是否合法
for ele in pwd:
    if ele not in str:
        break
else:
    print('可以登录')
    
# 判断合法字符个数
# count+=1
# if count == len(pwd):
#     print('可以登录')
# else:
#     print('不可以登录')

高级变量类型

包括:•列表•元组•集合•字符串•字典•公共语法

所有非数字型变量 都支持以下特点:

​ •都是一个序列 sequence,也可以理解为容器

​ •取值

​ •遍历for in

​ •计算长度、最大/最小值、比较、删除

​ •链接+ 和 重复 *

​ 切片***

列表

专门用于存储一串 数据,存储的数据 称为 元素

列表增加,删除和修改元素,查询,排序和最值

增加

方法说明
append(数据)在末尾追加数据
insert(索引,数据)在指定位置插入数据(位置前有空元素会补位)
extend(Iterable)将可迭代对象中 的元素 追加到列表
l.extend(ll)      #在列表l后边加一个列表ll。或者理解为将列表11中的所有元素顺序添加到列表l的末尾

删除

方法说明
del 列表[索引]删除指定索引的数据
remove(数据)删除第一个出现的指定数据
pop()删除末尾数据,返回被删除的元素
pop(索引)删除指定索引数据
clear()清空列表
l=['李四','张三','李四']
l.remove('李四')     #删除第一个李四
a=l.pop(index)            #pop在删除指定元素后会有一个返回值,返回这个元素。

修改

方法说明
列表[索引] = 数据修改指定索引的数据,数据不存在会报错

查询

方法说明
列表[索引]根据索引取值,索引不存在会报错
index(数据)根据值查询索引,返回首次出现时的索引,没有查到会报错
count(数据)数据在列表中出现的次数
len(列表)列表长度
if 数据 in 列表:检查列表中是否包含某元素
a=l.index('李四')    #a=返回列表中‘李四’所在的索引号

排序

方法说明
sort()升序
sort(reverse=True)降序
reverse()逆序、反转
l = [6,3,2,8,1]
l.sort()        #升序
maxValue = max(l)    #最大值

最值

方法说明
max()最大值
min()最小值

列表练习:排序

冒泡排序

'''
有一个数字集合[9,8,7,6,5,4,3,2,1],请手动对这个集合正序排序(不要使用sort方法)
'''
l=[9,8,7,6,5,4,3,2,1]
i=0
while i<len(l)-1:
    j=0
    while j<len(l)-1-i:              # 比较
        a=l[j]                      ## 交换,核心算法是将里面的元素依次比较,并且对调次序
        l[j]=l[j+1]
        l[j+1]=a
        j+=1
    i+=1    
print(l)

选择排序

l = [9, 99, 7, 105, 5, 120, 3, 2, 1]
i=0
while i<len(l):
	minIndex=i                    # 假定最小值角标
    j=i+1
    while j<len(l):
        if l[j]<l[minIndex]        # 比较
        	minIndex=j             # 改变角标
        j+=1
     # 一轮循环结束  确定最小值角标
     # 交换设置的最小值和实际的最小值
     # 认为的最小值l[i]
     # 实际的最小值 l[minIndex]
	l[i],l[minIndex]=l[minIndex],l[i]
	i+=1
print(l)
	

列表嵌套

'''
一个学校,有3个办公室,现在有8位老师等待工位的分配,
请编写程序:
1. 完成随机的分配 
2. 获取办公室信息 (每个办公室中的人数,及分别是谁)
3. 保证每个教室至少有一个人
'''
import random    
classrooms=[[],[],[]]                  #创建嵌套的空列表
teacher=['q','w','e','r','t','y','u','i']
count=0
for room in classrooms:                #先在每个教室随机分配一个人
   index=random.randint(0,7-count)
   room.append(teacher.pop(index))     #教师分配过之后下次不再参与分配,所以要删除分配过的人
   count+=1
for ele in teacher:
   classrooms[random.randint(0,2)].append(ele)    #分配剩余的教师
for room in classrooms:
   print('教室有%d人,分别为'%len(room),tuple(room))

列表总结

在这里插入图片描述

*****计数,累计相加,if执行优先条件,for和while里面的else

计数:

​ 在循环中注意此类用法,在循环外设一个count变量,记录循环次数。count+=1

累计相加:

​ sum=sum+i

if执行优先条件:

​ if 语句执行条件应从上至下变大,上面的执行条件不能包含下面的情况。eg:<60,>=60 and <=70,>70。>70这个条件要在最上面。

for和while里面的else:

​ 注意和if中的else区别,while没有执行时也会执行,while循环执行完也会执行,但while中break后不会执行,while中continue后还会执行。

'''列出1~1000内的所有素数-------for遍历,while循环,循环中的else,if语句综合应用'''
'''分析:遍历区间内的数并且以此除以除自身和1以为的数,如果能被整除则不是素数'''
for ele in rang(2,1000):
    i=2
    while i<ele:
        if ele%i==0:
            break
            #print('不是素数')
        i+=1
	else###注意:此处while没有执行时也会执行,while循环执行完也会执行,但while中break后不会执行。
    	print(ele)
		
        
'''
需求:
判断登录用户名是否合法(不能用正则表达式)
用户名是数字字母或者_,需要在3到20位,必须有2个或以上大写字母,2个或以上小写字母,3个或以上数字
hhew2383dW_fkf&E@^
'''
str = "hhew2383dW_fkfE"
numberStr = '01234565789'
lowerStr = 'abcdefghijklmnopqrstuvwxyz'
upperStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

numberCount = 0
lowCount = 0
upperCount = 0

isLegel = True
for ele in  str:
    if ele in numberStr:
        numberCount += 1
    elif ele in lowerStr:
        lowCount += 1
    elif ele in upperStr:
        upperCount += 1
    elif ele == '_':
        pass
    else:
        isLegel = False

# 判断
length = len(str)
if length>=3 and length<=20 and numberCount>=3 and lowCount>=2 and upperCount >= 2 and isLegel:
    print('密码合法')
else:
    print('密码不合法')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值