目录
文章目录
概述
Python 中的循环语句有 for 和 while
Python 循环语句的控制结构图如下所示:
for循环
Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。
1、for循环格式
for <variable> in <sequence>:
<statements>
# 如果条件为真,那么循环体则执行
# 如果条件为假,那么循环体不执行
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
languages = ["C", "C++", "Perl", "Python"]
for x in languages:
print(x,end=" ")
运行结果如下:
C C++ Perl Python
2、break用于退出所有循环
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
languages = ["C", "C++", "Perl", "Python"]
for x in languages:
if x=="Perl":
break
print(x,end=" ")
运行结果如下:
C C++
3、continue用于退出当前循环,继续下一次循环
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
languages = ["C", "C++", "Perl", "Python"]
for x in languages:
if x=="Perl":
continue
print(x,end=" ")
运行结果如下:
C C++ Python
练习题
1、使用for循环输入 1 2 3 4 5 6 7 8 9 10
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
x=range(11) ###[0,11)表示0-11前闭后开的区间
print(x)
for i in x:
if i==0:
continue
print(i,end=" ")
运行结果如下:
range(0, 11)
1 2 3 4 5 6 7 8 9 10
2、使用for循环输入 1 2 3 4 5 6 8 9 10(不打印数字7)
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
x=range(1,11)
print(x)
for i in x:
if i==7:
continue
print(i,end=" ")
运行结果如下:
range(0, 11)
1 2 3 4 5 6 8 9 10
3、求1-100的所有数的和
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
#求1-100的所有数的和
sum=0
for a in range(1,101):
sum=sum+a
print(sum)
4、输出 1-100 内的所有奇数
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
for a in range(1,101):
if a%2==0:
continue ###可以换成pass###
else:
print(a, end=" ")
5、输出 1-100 内的所有偶数
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
for a in range(1,101):
if a%2==0:
print(a,end=" ")
else:
continue ###可以换成pass###
6、求1-2+3-4+5 … 99的所有数的和
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
sum=0
for a in range(1,100):
if a%2==0:
sum=sum-a
else:
sum=sum+a
print(sum)
7、查找列表中最大的元素
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
a=[5568,1254,75654,1466,58781,89,58475]
max=0
for i in range(0,len(a)):
if max <= a[i]:
max =a[i]
print(i)
print("此列表中最大的元素是:",max)
8、百钱买百鸡
公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱?
第一种方法
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
#首先分析单纯购买每种鸡,分别能够买多少只:
#公鸡:100 / 5 = 20(只)
#母鸡:100 / 3 ≈ 33(只)
#小鸡:100 / (1/3) = 300(只)
num = 0 # 用于计算有多少种方案
count = 0 # 用于计算循环的次数
for gongji in range(1,21):
for muji in range(1,34):
for xiaoji in range(1,301):
count += 1
if gongji + muji + xiaoji == 100 and 5*gongji + 3*muji + (1/3)*xiaoji == 100:
print(f'公鸡{gongji}只,母鸡{muji}只,小鸡{xiaoji}只')
num += 1
print("一共",num,"种方案")
print("一共",count,"次循环")
运行结果如下:
公鸡4只,母鸡18只,小鸡78只
公鸡8只,母鸡11只,小鸡81只
公鸡12只,母鸡4只,小鸡84只
一共 3 种方案
一共 198000 次循环
第二种方法(优化)
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
#首先分析单纯购买每种鸡,分别能够买多少只:
#公鸡:100 / 5 = 20(只)
#母鸡:100 / 3 ≈ 33(只)
#小鸡:(100-公鸡-母鸡)只
num = 0 # 用于计算有多少种方案
count = 0 # 用于计算循环的次数
for gongji in range(1,21):
for muji in range(1,34):
xiaoji=100-gongji-muji
count += 1
if gongji + muji + xiaoji == 100 and 5*gongji + 3*muji + (1/3)*xiaoji == 100:
print(f'公鸡{gongji}只,母鸡{muji}只,小鸡{xiaoji}只')
num += 1
print("一共",num,"种方案")
print("一共",count,"次循环")
运行结果如下:
公鸡4只,母鸡18只,小鸡78只
公鸡8只,母鸡11只,小鸡81只
公鸡12只,母鸡4只,小鸡84只
一共 3 种方案
一共 660 次循环
第三种方法(优化)
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
#首先分析单纯购买每种鸡,分别能够买多少只:
#假设:公鸡=x,母鸡=y,小鸡=z
#0< x ≤ 20,0 < y < 34, 0 < z < 34
#那麽:x+y+z=100,5x+3y+1/3*z=100
#通过换算可知:y=(100-7x)/4,z=(300+3x)/4
num = 0 # 用于计算有多少种方案
count = 0 # 用于计算循环的次数
for gongji in range(1,21):
muji=(100-7*gongji)/4
#xiaoji=(300+3*gongji)/4
xiaoji=100-gongji-muji
if gongji >=1 and muji>=1 and xiaoji>=1 and muji :
count += 1
print(f'公鸡{gongji}只,母鸡{muji}只,小鸡{xiaoji}只')
num += 1
print("一共",num,"种方案")
print("一共",count,"次循环")
result = isinstance(123,int)
print(result)
运行结果如下:
公鸡1只,母鸡23.25只,小鸡75.75只
公鸡2只,母鸡21.5只,小鸡76.5只
公鸡3只,母鸡19.75只,小鸡77.25只
公鸡4只,母鸡18.0只,小鸡78.0只 ###符合要求###
公鸡5只,母鸡16.25只,小鸡78.75只
公鸡6只,母鸡14.5只,小鸡79.5只
公鸡7只,母鸡12.75只,小鸡80.25只
公鸡8只,母鸡11.0只,小鸡81.0只 ###符合要求###
公鸡9只,母鸡9.25只,小鸡81.75只
公鸡10只,母鸡7.5只,小鸡82.5只
公鸡11只,母鸡5.75只,小鸡83.25只
公鸡12只,母鸡4.0只,小鸡84.0只 ###符合要求###
公鸡13只,母鸡2.25只,小鸡84.75只
一共 13 种方案
一共 13 次循环
9、元素分类
有如下列表 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。即: {‘k1’: [大于66的所有值], ‘k2’: [小于66的所有值]}
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
a=[11,22,33,44,55,66,77,88,99,90]
print(a,type(a))
b={"k1":[],"k2":[]}
for i in a:
if i>66:
b["k1"].append(i)
elif i<=66:
b["k2"].append(i)
print(b,type(b))
运行结果如下:
[11, 22, 33, 44, 55, 66, 77, 88, 99, 90] <class 'list'>
{'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55, 66]} <class 'dict'>
10、查找元素
查找列表中元素,移除每个元素的空格,并查找以a或A开头并且以c结尾的所有元素。
li = [“alec”, " aric", “Alex”, “Tony”, “rain”]
tu = (“alec”, " aric", “Alex”, “Tony”, “rain”)
dic = {‘k1’: “alex”, ‘k2’: ’ aric’, “k3”: “Alex”, “k4”: “Tony”}
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
#Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
#:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
li = ["alec ", " Ar ic", " Alex", "Tony", "rain"]
tu = ("alec", " Ar ic", " Alex", "Tony", "rain")
dic = {'k1': "alex", 'k2': ' Aric', "k3": "Alex", "k4": "Tony"}
for i in li:
b=i.strip()
if (b.startswith("a") or b.startswith("A")) and b.endswith("c"):
print(b, len(b))
print("------分割线--------")
for x in tu:
b=x.strip()
if (b.startswith("a") or b.startswith("A")) and b.endswith("c"):
print(b, len(b))
print("------分割线--------")
for key in dic:
b=dic[key].strip()
if (b.startswith("a") or b.startswith("A")) and b.endswith("c"):
print(b, len(b))
运行结果如下:
alec 4
Ar ic 5
------分割线--------
alec 4
Ar ic 5
------分割线--------
Aric 4
11、输出商品列表,用户输入序号,显示用户选中的商品
商品列表: [“手机”, “电脑”, ‘鼠标垫’, ‘游艇’]
#!/usr/bin/python
# -*- coding:utf-8 -*-
# created by yuki
#
# enumerate(可迭代的对象,序号从何开始),为可迭代的对象添加序号,序号必须是数字
li = ["手机", "电脑", '鼠标垫', '游艇']
for key,values in enumerate(li,0):
print(key,values)
print("-----------分隔线-----------")
for key,values in enumerate(li,-50):
print(key,values)
运行结果如下:
0 手机
1 电脑
2 鼠标垫
3 游艇
-----------分隔线-----------
-50 手机
-49 电脑
-48 鼠标垫
-47 游艇
12、购物车
功能要求:
- 要求用户输入总资产,例如:2000
- 显示商品列表,让用户根据序号选择商品,加入购物车
- 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
- 附加:可充值、某商品移除购物车