小白自学笔记之Python入门-第六章 循环-1
接着探讨超市购物系统,模拟更加真实的购物操作,购物不可能都是购买三种商品,有可能一种,有可能多种,这个怎么实现呢?我们捋一下,过程别乱了。
如果购买一件商品,我们的编程步骤,或者算法应该是下面这样的:
⑴ 输入商品价格
⑵ 显示应付金额
⑶ 输入顾客付款金额
⑷ 显示找零信息
⑸ 打印购物小票
如果购买三件商品,我们的编程步骤,或者算法应该是下面这样的:
⑴ 输入三种商品价格,累加每种商品价格(为下一步显示应付金额准备)
⑵ 显示应付金额
⑶ 输入顾客付款金额
⑷ 显示找零信息
⑸ 打印购物小票
如果购买十件商品,我们的编程步骤,或者算法应该是下面这样的:
⑴ 输入十种商品价格,累加每种商品价格(为下一步显示应付金额准备)
⑵ 显示应付金额
⑶ 输入顾客付款金额
⑷ 显示找零信息
⑸ 打印购物小票
大家可以比较一下,基本是第一步有区别,第一步输入价格我们可以使用input函数实现,但是输入十种商品需要写十个input函数吗?当然不是,计算机不会提供这么笨的方法,就像一个笑话“万先生”里面讲的,跑一下题,轻松一下。
古时候,有一个人不识字,他不希望儿子也像他这样,就请了个教书先生来教他儿子认字。他儿子见老师写“一”就是一划,“二”就是二划,“三”就是三划,他就跑去跟他父亲说:“爸爸,我会写字了,请你叫老师走吧!” 这人听了很高兴,就给老师结算了工钱叫他走了。 第二天,这人想请一个姓万的人来家里吃饭,就让他儿子帮忙写一张请帖,他儿子从早上一直写到中午也没有写好,这人觉得奇怪,就去看看,只发现他儿子在纸上划了好多横线,就问他儿子什么意思?他儿子一边擦头上的汗一边埋怨道:“爸,这人姓什么不好,偏偏姓万,害得我从早上到现在才划了500划!!"
Ok,拉回来接着讲循环,我们需要采用循环结构完成这个功能。Python有两种循环:for循环和while循环。
6.1 for循环
学习for循环之前,我们需要先复习一下range函数。range函数的语法如下:
range(stop): 0~stop-1
range(start,stop): start~stop-1
range(start,stop,step): start~stop step(步长)
range(6): 生成序列0 1 2 3 4 5
range(3,,6): 生成序列3 4 5
range(1,6,2): 生成序列1 3 5
for循环的语法如下:
for 变量 in range():
循环需要执行的代码
思考:⑴编程实现求1~100内偶数之和,⑵求5的阶乘5!
先看⑴,首先我们需要一个变量sum用于存储累加和,初始值为零sum=0,然后通过range函数生成100之内的所有偶数range(0,101,2) #为什么用101?在循环里进行累加计算,最后输出结果。
参考代码
sum=0
for i in range(0,101,2):
sum=sum+i
print(sum)
运行结果 2550
上面程序中循环体(就是要多次执行的语句)只有一句sum=sum+i ,如果代码改成下面这样,思考一下运行结果会是什么。
sum=0
for i in range(0,101,2):
sum=sum+i
print(sum)
我都不想贴运行结果了,要占用我50行空间(差一点写成100行),但是居然50行也是错误的,怎么验证到底是多少行呢?程序改成下面这样婶儿的:
sum=0
count=0
for i in range(0,101,2):
sum=sum+i
count+=1
print(count,sum)
运行结果
1 0
…… #我真的算不出这里省略了多少行了!
51 2550
解释一下上面的程序,循环体有三条语句(为什么,因为Python缩进及其严格,这里程序通过缩进确定循环体),三条语句是
sum=sum+i
count+=1
print(count,sum)
也就是每一次(当i的值分别为0,2,4,6……100)都会执行计算和、count加1和输出count,sum值
试着编程实现求100以内奇数的和,求1+2+3+…+100的和,给你参考答案,当然不是编程代码,而是奇数和2500,所有数的和5050,测试一下你的程序编写是否正确吧!
接下来看第2个思考题:求5的阶乘5! 刚才是计算累加和,这次是计算累乘积,一样的方法。首先我们需要一个变量mul用于存储累乘积,初始值为1,mul=1,然后通过range函数生成5之内的所有数range(1,6) 注意这里是6哦,在循环里进行累乘计算,最后输出结果。
参考代码
mul=1
for i in range(1,6):
mul=mul*i
print(mul)
运行结果 120
为什么没有计算100的阶乘呢?
我倒是计算了10的阶乘:3628800,似乎是对的,还试了20的阶乘:2432902008176640000,可能是正确的,100的阶乘也试了,一行都写不下,谁知道是对还是错呢:
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
for循环编程思考题:给小学生出10个10以内的加减法,随机生成两个10以内的整数number1和number2,提示用户输入两个整数的和,判断答案是否正确并给出分数。我不想编写这个代码,算了算了,还是写吧。毕竟还是有点难度的!
参考代码:
import random
import time
print("**********小学生10以内加减法考试系统**********")
print("一共10道题目\n3,2,1...开始了!")
starttime=time.time()
correctNo=0
for i in range(10):
number1 = random.randint(1,10)
number2 = random.randint(1, 10)
sign=random.randint(1,2)
if sign==1: #加法
answer=int(input(str(number1)+"+"+str(number2)+"="))
if answer==number1+number2:
correctNo = correctNo + 1
else: #减法
if number1<number2:
number1,number2=number1,number1
answer = int(input(str(number1) + "-" + str(number2) + "="))
if answer==number1-number2:
correctNo = correctNo + 1
endtime=time.time()
spenttime=endtime-starttime
print("你做对了",correctNo,"个题目,得分:",correctNo*10, \
"用时",format(spenttime,"0.2f"),"秒")
print("bye......")
运行结果
**********小学生10以内加减法考试系统**********
一共10道题目
3,2,1...开始了!
5+3=8
1-1=0
4-4=0
9+5=13
1-1=0
10+8=18
1-1=0
7+2=9
8+1=9
3+3=6
你做对了 9 个题目,得分: 90 用时 22.32 秒
bye......
for循环的一般形式(这个一般人我不告诉他,其它编程语言没有else部分)
for 变量 in range():
循环需要执行的代码
else:
循环结束时(没有通过break退出循环时),需要执行的代码
以用户登录管理系统为例说明。用户登录需求:1.输入用户名和密码; 2.判断用户名和密码是否正确(name=‘cup’,passwd=‘cup123’) 3.登录仅有三次机会,超过3次会报错。
for i in range(3):
user = input('请输入用户名:')
passwd = input('请输入密码:')
if user=='cup' and passwd == 'cup123 ':
print('%s用户登录成功' %user)
break
else:
print('密码错误,请重新输入密码,您还剩%d次机会' %(2-i))
else:
print('超过三次,登录失败')
print("bye......")
运行结果1
请输入用户名:cup
请输入密码:cup123
密码错误,请重新输入密码,您还剩2次机会
请输入用户名:cup
请输入密码:cup123
cup用户登录成功
welcome !
我就想问问:第一次密码为什么还不对?请你思考,别找了,没有参考答案
运行结果2
请输入用户名:1
请输入密码:1
密码错误,请重新输入密码,您还剩2次机会
请输入用户名:2
请输入密码:2
密码错误,请重新输入密码,您还剩1次机会
请输入用户名:3
请输入密码:3
密码错误,请重新输入密码,您还剩0次机会
超过三次,登录失败
bye......
试着分析下面代码运行结果:
for i in range(1,10):
if i%2==0:
print(i)
continue
print("%d houmian"%i) #“后面”的拼音
else:
print("for else")
print("end")
1 houmian
2
3 houmian
4
5 houmian
6
7 houmian
8
9 houmian
for else
end
for i in range(1,10):
if i%2==0:
print(i)
break
print("%d houmian"%i)
else:
print("for else")
print("end")
1 houmian
2
End
编程练习(就是自己试着编写程序,独立解决问题,我不是严师,希望你们是高徒):
1. 输入一个正整数,输出这个数所有的因子。如6的因子有1,2,3,6
2. 计算从1到1000以内所有能同时被3,5和7整除的数的和并输出。
自己写吧,我不想做了,现在太晚了,要养生,不熬夜。2020年7月8日星期三21时6分
又想起个问题,购物系统还没有实现呢?这个……这个……购物系统用for循环不太适合,接着看下面的while循环吧!