Python学习第一课(循环语句)

python作为越来越炙手可热的语言,在深度学习方面运用广泛,因此学习python成了大趋之势,本着语言只是工具的原则,学习一门语言,重要的是了解它的规则,让我们开启python语言学习打卡第一天!

循环语句

循环用于重复地执行代码块。
Python中有两种主要的循环:for循环和while循环。
for循环通常比while循环更容易使用,也不那么容易出错,但没有while循环灵活。

for循环

for 变量 in 集合:for循环通常与range()函数一起使用,range()函数返回一个列表,for循环遍历列表中的元素。
range()函数格式:range(start,stop, [step]),参数start表示列表开始值,默认为0;参数stop表示列表结束值,不能缺省,循环到stop-1停止;参数step表示步长,默认值为1。

while循环

while 条件表达式:

功能:当条件表达式为真时,依次执行while中的语句,直到循环表达式的值为假

在这里插入图片描述

问题一:求1+2+3+…+100,用for和while两种循环实现

#for 循环实现
sum=0
for i in range(1,101):
    sum+=i
print("sum的值是",sum)
#while循环实现
sum=0
i=1
while i<=100:
    sum+=i
    i+=1
print("sum的值是",sum)

问题二:计算已知和未知数的总和(用for和while两种形式实现)

#已知个数的总和计算(for循环计算)
total=0
n=int(input("请输入要进行加法的个数"))
print('输入的值是'+str(n))
for i in range(1,n+1):
    s=input("请输入数字"+str(i)+':')
    print('输入的值是'+str(s))
    total+=int(s)
print("数字总和为:"+str(total))

在这里插入图片描述

#while循环
s=input('请输入一个数字或("undone"):')
print('输入的值是'+str(s))
total=0
while s!='undone':
    num=int(s)
    total+=num
    s=input('请输入一个数字或("undone"):')
    print('输入的值是'+str(s))
print("总和是"+str(total))

在这里插入图片描述

循环嵌套(嵌套语句输出九九乘法表)

for row in range(1,10):
    for col in range(1,10):
        prod=row*col
        if prod<10:
            print(' ',end='')#保证对齐
        print(row*col,'',end='')
    print("")#换行

在这里插入图片描述

条件语句

编写一个程序,处理三个变量 x,y和z,然后输出它们当中最大的奇数。如果其中没有奇数,输出一条信息来说明

print("-------------------------")
a=int(input("请输入第一个数字"))
print('你输入的第一个数字是'+str(a))
b=int(input("请输入第二个数字"))
print('你输入的第二个数字是'+str(b))
c=int(input("请输入第三个数字"))
print('你输入的第三个数字是'+str(c))
if a>b:
    a,b=b,a
if b>c:
    b,c=c,b
if c%2==1:
     print("最大的奇数是:",c)    
elif b%2==1:
      print("最大的奇数是:",b)
elif a%2==1:
       print("最大的奇数是:",c)  

else:
    
    print("没有奇数")

在这里插入图片描述

跳转语句

Python的跳转语句有:break语句和continue语句

break语句的作用是:结束当前正在执行的循环(for、while),转而执行这些结构后面的语句。
continue语句的作用是:结束当前正在执行的这一次循环(for、while),接着执行下一次循环。即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
continue语句和break语句的区别是:continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环,不再进行条件判断。

即break跳出上一个整个循环语句 continue跳出当前循环中后续操作步骤,进行下一次循环

例:计算未知个数的总和:(break语句)输出done,启动break语句跳出当前循环

total=0
while True:
    s=input('Enter a number (or done)')
    print('输入的值是'+str(s))
    if s=='done':
        break
    num=int(s)
    total+=num
print("The sum is ",total)

在这里插入图片描述

练习:输出1~100之间的不能被7整除的数。

用continue来做

count=0
for i in range (1,101):
    if i%7==0:
        continue
    count+=1
    if i<10:
        print(" ",end="")
    print(str(i),'',end='')
    if count%10==0:
        print("")

在这里插入图片描述

求任意数的平方根(穷举法,二分法的引入)

穷举法:

取较小的步长生成猜测值(顺序地); 检查是否足够接近结果。 反复执行上述步骤。

#穷举法猜测25的平方根
x=25
epsilon=0.01#精度epsilon
step=epsilon**2#步长越来越小
numGuesses=0#猜的次数
ans=0.0
while (abs(ans**2-x))>=epsilon and ans<=x:#精度不够,并且猜的值小
    ans+=step
    numGuesses+=1
print('numGuesses='+str(numGuesses))
if abs(ans**2-x)>=epsilon:#猜测过头,失败
    print(str(x)+'的平方根猜测失败')
else:
    print(str(ans)+'接近'+str(x)+'的平方根')

在这里插入图片描述
运算了49990次

在穷举法中,步长可以取任意小数值,但是: 如果步长太小了,程序执行会花较长时间 如果步长太大了,可能会跳过最近似的答案

还有更有效的方法。 我们引入二分法

二分法

根据数学定义,x的平方根位于0—x之间。 尽管在穷举法中,我们从0开始进行猜测,但实际上可以取这个范围的中间值。

在这里插入图片描述

如果幸运,这个答案恰好能找到

如果猜测值不足够近似,太大或太小怎么办? 如果g**2>x,则g太大,现在应查找:

在这里插入图片描述

如果新的g,例如g**2<x,则g太小了,应查找:

在这里插入图片描述

每次减少值的范围的一半。

在这里插入图片描述

#二分法求解任意值的平方根
x=25
epsilon=0.01
numGuesses=0#猜的次数
low=0.0
high=x
ans=(high+low)/2.0
while abs(ans**2-x)>=epsilon:#判断精度,没在精度epsilon里面
    print('low='+str(low)+'high='+str(high)+'ans='+str(ans))
    numGuesses+=1
    if ans**2<x:
        low=ans
    else:
        high=ans
    ans=(high+low)/2.0
    print('numGuesses='+str(numGuesses))
    print(str(ans)+'与'+str(x)+'的平方根接近')

在这里插入图片描述
作为最常用的算法

二分查找算法从根本上减少了计算时间; 二分查找算法必须用于有序的数据。

练习:由用户想一个0—100之间的整数(包括0,不包括100),由计算机来猜。由用户给一个输入,是低了还是高了,使用二分查找算法,计算机将猜到用户的秘密数。

#猜数游戏
import random 
low,high=0,100

s=int(input('请输入一个0到100的整数'))
print("你输入的数字是"+str(s))
i=random.randint(0,101)

while True:
    print('你想的数字是'+str(i)+'吗?')
    a=input('如果比你想的数大,请输入h;如果比你想到数小,请输入l,否则请输入c')
    if a=='l':
        low=i
        i=int((low+high)/2)
    elif a=='h':
        high=i
        i=int((low+high)/2)
    else:
        print('我猜对了,这个数是'+str(i))
        break
        
       

在这里插入图片描述

蒙特卡洛(Monte Carlo)方法

蒙特卡洛(Monte Carlo)方法,又称随机抽样或统计试验方法。
当所求解问题是某种事件出现的概率,或某随机变量期望值时,可以通过某种“试验”的方法求解。 简单说,蒙特卡洛是利用随机试验求解问题的方法

应用蒙瑞特卡罗方法求解π的步骤
在这里插入图片描述
首先构造一个单位正方形和1/4圆。
随机向单位正方形和圆结构抛洒大量点,对于每个点,可能在圆内或者圆外,当随机抛点数量达到一定程度,圆内点将构成圆的面积,全部抛点将构成矩形面积。
圆内点数除以圆外点数就是面积之比,即π /4。
随机点数量越大,得到的π值越精确。

from random import random 
from math import sqrt
from time import clock
DARTS=int(input('请输入抛点的数量'))
hist=0
clock()

for i in range(1,DARTS):
    x,y=random(),random()
    dist=sqrt(x**2+y**2)
    if dist<=1.0:
        hist+=1#判断有多少个值在圆面积里面
pi =4*(hist/DARTS)
print("pi的值是%s"% pi)
print("程序运行的时间是%-5.5ss"%clock())

在这里插入图片描述

总结

第一天对python的循环结构进行了总结,其中还了解了穷举法和二分法,二分法作为很常用的算法,无疑是很适用的,本文只是python的基础语法,具体掌握还需实战

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值