day3_for循环

回顾

1. 数学运算符

+、-、*、/、//、%、**

2. 比较运算符

<=、>=、<、>可以连用

3. 逻辑运算符

and 、or、not

零值、空值是False

4. 赋值运算符

=、+=、-=、*=、/=、//=、**=

5. 优先级

数学>比较>逻辑>赋值,有括号先括号

6.分支结构

if

if —elif–else

if—else

7.奇怪的知识出现了-负数取模

负数运算中:

C++ 和 Java 通常会尽量让商更大一些

Python 和 Google 计算器中,尽量让商更小

在正整数运算中:

所有语言和计算器都遵循了尽量让商小的原则

被除数÷除数 = 商…余数

余数 = 被除数-除数×商(被除数//除数)

print(9%2)  #1   9-2*(9//2)
print(-9%2) #1   -9 - 2*(-9//2)
print(9%-2) #-1  9-(-2)*(9//-2)

新知识-循环

让代码写一次却可以执行多次

循环分为for循环和while循环

1. for

a) 语法

for 变量 in 序列:
    循环体

b)说明

for、in - 关键字,固定语法

变量 - 变量名可以是没有定义过的变量名,也可以是已经定义过了的

序列 - 容器型数据类型的数据

常见序列:字符串、字典、元组、列表、迭代器、生成器、range等
       -    固定写法

循环体 - 和for保持一个缩进的一条或多条语句。循环体就是需要重复执行的代码

c)执行过程

Ⅰ. 序列

让变量去序列中取值,一个一个的取,取到取完为止,每取一个值iu执行一次循环体。

(序列中的元素个数决定for循环循环次数)

【 J S中没有range函数】

Ⅱ. range函数

产生指定范围的数字序列

①. range(N)

产生0~N-1的数字序列

例:range(3):产生一个数字序列,里面的元素是0、1、2

for x in range(10):
    print(x)
②. range(M,N)

产生M~N-1的数字序列

例:range(10,15):产生一个数字序列,里面的元素是10、11、12、13、14

for i in range(10,15):
    print(i)
③. range(M,N,step)

产生[M,N)的数字序列,步长是step(每次增加step)

for i in range(10,16,2):
    print(i)

步长可以是负,但是M必须大于N

for i in range(16, 10, -2):
    print(i)
④. 练习
练习1:打印100以内所有的偶数
for i in range(0, 100, 2):
    print(i, end=' ')
练习2:统计100以内奇数的个数
num = 0
for i in range(1, 100, 2):
    num += 1
print(num)
练习3:统计100以内能被3整除的偶数的个数
num = 1
for i in range(6, 97, 6):
    num += 1
print(num)
练习4:计算1+2+3+…+100的和
s = 0
for i in range(1,101):
    s += i
print(s)
s2 = (1+100)*100/2
print(s2)
练习5:计算100~200间能被3整除,但不能被5整除的数的和
sum = 0
for i in range(102, 200, 3):
    if i % 5 == 0:
        continue
    sum += i
print(sum)

2. while语句

a) 语法

while 条件语句:
	循环体

b)说明

while - 关键字,固定写法

条件语句 - 任何有结果的表达式(除了赋值语句)
            -     固定写法

循环体 - 和while保持一个缩进的一条或多条语句(需要重复执行的代码)

c) 执行过程

先判断条件语句是否为True,如果是,则执行循环体;执行完循环体再判断条件语句是否为True…如果是False,则循环结束

3. for和while的选择

循环次数确定的时候用for,不确定的时候用while

练习1:提示用户输入密码,直到密码正确为止

法一:

psw = input('请输入密码:')
while psw != '123456':
    print('密码错误,请重新输入!')
    psw = input('请输入密码:')
print('输入正确!')

法二:

while True:
    psw = input('请输入密码:')
    if psw == '12345':
        break
print('输入正确!')

简化:


while input('请输入密码:') != '123456':
	pass
print('输入正确!')

练习2:产生一个随机数,猜。

请输入(0~100):50
小了,再大点儿!
请输入(0~100):80
大了,再小点儿!

请输入(0~100):67
恭喜你!猜对了!

import random

number = random.randint(0, 100)
count = 0
print('请猜一个0~100之间的数字:')
s_num = int(input())
while s_num != number:
    print('猜错了,', end='')
    count += 1
    if s_num > number:
        print('你猜的数字大了,请重新输入')
    else:
        print('你猜的数字小了,请重新输入')
    s_num = int(input())
print('恭喜你猜对了,你一共猜错了', count, '次', sep='')

随机数

import random

number = random.randint(0, 100)

功能:随机生成一个 [a,b] 的整数

3. 循环关键字

continue 和break只能在循环内使用

a) continue

功能:结束一次循环

执行循环体的时候如果遇到continue,直接结束当次循环,直接进入下一次循环

for x in range(10,20)
	if  x % 3 == 0:
        continue
    print('x',x)

b) break

功能:结束整个循环

执行循环体时如果遇到break,直接结束整个循环

for x in range(10,20)
	if  x % 3 == 0:
        continue
    print('x',x)
while True:
    每次循环要做的事情
    if 循环结束的条件:
    	break

c) else

循环自然死亡的时候执行else的代码段(正常结束for/while)

意外结束循环时不执行

for 变量 in 序列:
    循环体
else


while 条件语句:
    循环体
else:
	代码段
for x in range(3):
    print('hello')
else:
    print('自然死亡')

for x in range(3):
    print('hello')
    if x==1:
        break
else:
    print('自然死亡')

作业

基础题

  1. 使用for和while循环输出 0~100内所有3的倍数。

    for i in range(3, 100, 3):
        print(i, end='  ')
    
    i = 3
    while i < 100:
        print(i, end='  ')
        i += 3
    
  2. 使用for和while循环输出100~200内个位数或者十位数能被3整除的数。

for i in range(100, 201):
    if (i % 100) // 10 % 3 == 0:
        print(i, end='  ')
    elif i % 10 % 3 == 0:
        print(i, end='  ')
i = 100
while i < 201:
    if (i % 100) // 10 % 3 == 0:
        print(i, end='  ')
    elif i % 10 % 3 == 0:
        print(i, end='  ')
    i += 1

进阶题

  1. 使用循环计算1*2*3*4*...*10的结果。

    s = 1
    for i in range(2, 11):
        s *= i
    print(s)
    
  2. 统计100以内个位数是2并且能够被3整除的数的个数。

    for i in range(12, 100, 30):
        if i % 3 == 0:
            print(i, end=' ')
    
  3. 输入任意一个正整数,求他是几位数?

    i = 0
    n = int(input())
    while n > 0:
        i += 1
        n //= 10
    print(i)
    

    注意: 这儿不能使用字符串,只能用循环

  4. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是

    ⼀个⽔仙花数,因为 1³ + 5³ + 3³ 等于 153。

    for i in range(100, 999, 1):
        if (i//100)**3+(i%100//10)**3+(i%10)**3 == i:
            print(i, end=' ')
    

挑战题

  1. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)

    n = int(input())
    count = int(n ** 0.5)
    if n > 1:
        for i in range(2, count + 1):
            if n % i == 0:
                print(n, '不是素数', sep='')
                break
        else:
            print(n, '是素数', sep='')
    else:
        print(n, '不是素数', sep='')
    
  2. 求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)

    n = int(input())
    s = 1
    tol = 1
    for i in range(3, n+1):
        tmp=tol
        tol = s + tol
        s = tmp
    print(tol)
    
  3. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

    for i in range(1,10):
        for j in range(1,i+1):
            print(j, '*', i, '=', i*j,end='    ')
        print()
    
  4. 这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)

for big in range(0, 33):
    for mid in range(0, 50):
        if big * 3 + mid * 2 + (100 - big - mid) / 2 == 100:
            print('大马有', big, '匹,中马有', mid, '匹,小马有', (100 - big - mid), '匹')


3. 输出9*9口诀。 程序分析:分行与列考虑,共99列,i控制行,j控制列。

   ```python
   for i in range(1,10):
       for j in range(1,i+1):
           print(j, '*', i, '=', i*j,end='    ')
       print()
  1. 这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
for big in range(0, 33):
    for mid in range(0, 50):
        if big * 3 + mid * 2 + (100 - big - mid) / 2 == 100:
            print('大马有', big, '匹,中马有', mid, '匹,小马有', (100 - big - mid), '匹')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值