欢迎光临散文网 会员登陆 & 注册

小白自学笔记之Python入门-第六章 循环-1

2023-07-03 08:50 作者:wangyanhpa  | 我要投稿

接着探讨超市购物系统,模拟更加真实的购物操作,购物不可能都是购买三种商品,有可能一种,有可能多种,这个怎么实现呢?我们捋一下,过程别乱了。

如果购买一件商品,我们的编程步骤,或者算法应该是下面这样的:

⑴ 输入商品价格

⑵ 显示应付金额

⑶ 输入顾客付款金额

⑷ 显示找零信息

⑸ 打印购物小票

如果购买三件商品,我们的编程步骤,或者算法应该是下面这样的:

⑴ 输入三种商品价格,累加每种商品价格(为下一步显示应付金额准备)

⑵ 显示应付金额

⑶ 输入顾客付款金额

⑷ 显示找零信息

⑸ 打印购物小票

 

如果购买十件商品,我们的编程步骤,或者算法应该是下面这样的:

⑴ 输入十种商品价格,累加每种商品价格(为下一步显示应付金额准备)

⑵ 显示应付金额

⑶ 输入顾客付款金额

⑷ 显示找零信息

⑸ 打印购物小票

 

大家可以比较一下,基本是第一步有区别,第一步输入价格我们可以使用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循环吧!


小白自学笔记之Python入门-第六章 循环-1的评论 (共 条)

分享到微博请遵守国家法律