04while循环和循环关键字

1.三目运算符

python的三目运算符:

  1. 语法:
值1 if 表达式 else 值2
  1. 运算规则:如果表达式的结果为True整个运算的结果就是值1,否则是值2
# 案例1:a如果大于10result是0否则result是1
# 方法一:
a = 100
result = 0 if a > 10 else 1
print(result)

# 方法二:
a = 100
if a > 10:
    result = 0
else:
    result = 1
print(result)


# 案例2:如果a大于10让a加1,否则让a减1(用三目运算符)
a = 18
# 方法一:
a = a + 1 if a > 10 else a - 1

# 方法二:
a += 1 if a > 10 else -1

2.while循环

1.while循环 - 当…的时候就…
  • 语法:
while 条件语句:
    循环体
    
其他代码
  • 说明:
  • while - 关键字;固定写法
  • 条件语句 - 可以是任何有结果的表达式(赋值语句除外)
  • : - 固定写法
  • 循环体 - 和while保持一个缩进的一条或者多条语句;循环体就是会被重复执行代码
  • 执行过程:
    先判断条件语句是否为True,如果是就执行循环体;执行完循环体再判断条件语句是否为True,如果是又执行循环体;… 以此类推,如果条件语句是False循环就结束。
# 案例:使用while循环打印5遍 'hello world!'
a = 0
while a < 5:
    print('hello world!')
    a += 1

"""
执行过程:
a = 0
第1次: while 0<5 -> while True -> print('hello world!'); a += 1 -> a = 1
第2次: while 1<5 -> while True -> print('hello world!'); a += 1 -> a = 2
第3次:while 2<5  -> while True -> print('hello world!'); a += 1 -> a = 3
第4次:while 3<5  -> while True -> print('hello world!'); a += 1 -> a = 4
第5次:while 4<5  -> while True -> print('hello world!'); a += 1 -> a = 5
第6次:while 5<5 -> while False -> 循环结束
"""
2.for和while的选择

如果循环次数确定使用for循环;如果循环次数不确定就使用while。

(凡是可以使用for解决的问题都用for,for解决不了的才用while)

# 案例:输入登录密码,直到输入正确为止
"""
分析过程:
假设正确密码是: '123456'

请输入密码: 123
请输入密码: 4321
请输入密码: 9823
...
请输入密码:123456
登录成功!
"""
pw = '123456'
# while 密码输入错误:
#     提示输入密码
value = input('请输入密码:')
while value != pw:
    value = input('请输入密码:')

print('登录成功!')

3.循环关键字

continue和break - 只能在循环体中使用

1.continue

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

# 案例1:
for x in range(3):
    print('aaa')
    print('bbb')
    continue
    print('ccc')

"""
执行过程:
x = 0: print('aaa'); print('bbb'); continue
x = 1: print('aaa'); print('bbb'); continue
x = 2: print('aaa'); print('bbb'); continue
循环结束
"""

# 案例2:打印0-100内所有奇数
# 方法一:
for x in range(100):
    if x % 2 == 0:
        continue
    print('x:', x)
    
"""
执行过程:
x - 0,1,2,3...98,99
x = 0: if x % 2 == 0 -> if 0 % 2 == 0 -> if True: continue
x = 1: if x % 2 == 0 -> if 1 % 2 == 0 -> if False; print('x:', x) -> print('x:', 1)
x = 2: ...
"""
    
# 方法二:
for x in range(100):
    if x % 2 != 0:
        print('x:', x)
2.break

作用: 结束整个循环(执行循环体的时候如果遇到break,整个循环直接结束)

# 案例1:
for x in range(3):
    print(x)
    print('aaa')
    print('bbb')
    break
    print('ccc')
    
'''
结果:
0
aaa
bbb
'''
3.遇到break的while

语法:

while True:
    需要重复执行的操作
    if 循环结束的条件:
        break
# 案例1:输入登录密码,直到输入正确为止
pw = '123456'
while True:
    value = input('请输入密码:')
    if value == pw:
        break
print('登录成功!')

# 案例2:写一个猜数字游戏
"""
说明:
随机产生一个0~100的随机数,玩家输入数字,输入的数和产生的数相等,游戏结束!如果不相等给出'大了'或者'小了'的提示
假设: 25
请输入一个整数(0~100): 50
大了!
请输入一个整数(0~100): 20
小了!
请输入一个整数(0~100): 25
恭喜你,猜对了!
randint(M,N)  - 产生一个M到N的随机整数
"""
from random import randint
num = randint(0, 100)
count = 0
while True:
    value = int(input('请输入一个整数(0~100):'))
    count += 1
    if value > num:
        print('大了!')
    elif value < num:
        print('小了!')
    else:
        print('恭喜你,猜对了!')
        break

if count < 5:
    print('天才!')
elif count < 9:
    print('普普通通的你~')
else:
    print('智商感人!')

4.else关键字

1.完整的循环结构
  1. 完整的for循环:
for 变量 in 序列:
    循环体
else:
    代码段
  1. 完整的while循环:
while 条件语句:
    循环体
else:
    代码段
2.关于else
  • else的存在不会影响原循环的执行
  • else后面的代码会在循环结束后执行(如果循环是因为遇到break而结束就不会执行)
# 案例:判断字符串是否是存数字字符串
# 方法一:
str1 = '81283472'
for x in str1:
    if not '0' <= x <= '9':
        print(str1, '不是纯数字字符串')
        break
else:
    print(str1, '是纯数字字符串')

# 方法二:
str1 = '81283472'
flag = True
for x in str1:
    if not '0' <= x <= '9':
        flag = False
        break
if flag:
    print('纯数字字符串')

第一周作业

一、选择题

  1. 下列变量名中不合法的是?(C)
    A. abc
    B. Npc
    C. 1name
    D ab_cd
  2. 下列选项中不属于关键字的是?(B)
    A. and
    B. print
    C. True
    D. in
  3. 下面哪个选项对应的代码写法是正确的?(C)
    A.
print('Python')
  print('新手村')

B.

print('Python') print('新手村')

C.

print('Python')
print('新手村')

D.

print('Python''新手村')
  1. 下面选项中能打印出50的是?(B)
    A.
print('100 - 50')

B.

print(100 - 50)
  1. 关于引号,下面选项中使用正确的是?(D)
    A.
print('hello)

B.

print("hello')

C.

print(“hello”)

D.

print("hello")

二、编程题

  1. 写代码在控制台打印 good good study, day day up!
print('good good study,day day up!')
  1. 写代码在控制台打印5次 you see see, one day day!
for x in range(5):
    print('you see see,one day day!')
  1. 写代码打印数字 11、12、13、… 21
for x in range(11,22):
    print(x)
  1. 写代码打印数字 11,13,15,17,…99
for x in range(11,100,2):
    print(x)
  1. 写代码打印数字:10、9、8、7、6、5
for x in range(10,4,-1):
    print(x)
  1. 写代码计算:1+2+3+4+…+20 的和
result = 0
for x in range(1,21):
    result += x
print(result)
  1. 写代码计算100以内所有偶数的和
result = 0
for x in range(2,101,2):
    result += x
print(result)
  1. 写代码统计100~200中个位数是3的数的个数
count = 0
for x in range(100,201):
    if x % 10 == 3:
        count += 1
print(count)
  1. 写代码计算2*3*4*5*...*9的结果
result = 1
for x in range(2,10):
    result *= x
print(result)
  1. 输入一个数,如果输入的数是偶数就打印偶数否则打印奇数
num = int(input('请输入一个整数:'))
if num % 2 == 0:
    print('偶数')
else:
    print('奇数')
  1. 统计1000以内能被3整除但是不能被5整除的数的个数。
count = 0
for x in range(3,1001,3):
    if x % 5 != 0:
        count += 1
print(count)

循环练习题

  1. 判断101-200之间有多少个素数,并输出所有素数。
count = 0
for x in range(101,201):
    for i in range(2,x):
        if x % i == 0:
            break
    else:
        count += 1
        print(x)
print(count)
  1. 求整数1~100的累加值,但要求跳过所有个位为3的数。
result = 0
for x in range(1,101):
    if x % 10 == 3:
        continue
    else:
        result += x
print(result)
  1. 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的第20个分数
# 后一个分数分子等于前一个分数分子和分母的和;分母等于前一个分数分子
denominator = 1
numerator = 2
for x in range(1,20):
    denominator,numerator = numerator,numerator + denominator
print('第20个分数是:',numerator,'/',denominator,sep='')
  1. 写程序计算 n 的阶乘 n! 的结果
result  = 1
n = int(input('请输入一个整数:'))
for x in range(1,n+1):
    result *= x
print('n的阶乘是:',result)
  1. 求1+2!+3!+…+20!的和
result = 1
num = 0
for x in range(1,21):
    result *= x
    num += result
print(num)
  1. 写程序求表达式 a + aa + aaa + aaaa+ … 的结果,其中a是1~9的数字,求和的项数用n来控制。(a和n可以用变量来表示)

例如:a为3, n为5的时候: 3 + 33 + 333 + 3333 + 33333

a = int(input('请输入数字(1-9):'))
n = int(input('请输入项数:'))
result = 0
b = 0
# b = 0 b*10+3 b*10+3 b*10+3
for x in range(0,n):
    b = b * 10 + a
    result += b
print(result)
  1. 控制台输出三角形
a.根据n的值的不同,输出相应的形状
n = 5时             n = 4
*****               ****
****                ***
***                 **
**                  *
*

b.根据n的值的不同,输出相应的形状(n为奇数)
n = 5               n = 7
  *                    *
 ***                  ***
*****                *****
                    *******

c. 根据n的值的不同,输出相应的形状
n = 4
   1
  121
 12321
1234321

n = 5
    1
   121
  12321
 1234321
123454321
#a.
n = int(input('请输入一个正整数:'))
for x in range(n,0,-1):
    for y in range(x):
        print('*',end='')
    print()
    
#b.
n = int(input('请输入一个奇数:'))
for x in range(1,n+1,2):
    z = (n - x) // 2
    for m in range(z,0,-1):
        print(' ',end='')
    for y in range(x):
        print('*',end='')
    print()
    
#c.
n = int(input('请输入一个整数:'))
for x in range(1,n+1):
    z = n - x
    for m in range(z,0,-1):
        print(' ',end='')
    for y in range(1,x+1):
        print(y,end='')
    for y in range(x-1,0,-1):
        print(y,end='')
    print()
  1. 小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?
for x in range(1,100 // 15 + 1):
    for y in range(1,100 // 2 + 1):
        for z in range(1,100 // 5 + 1):
            if 15 * x + 2 * y + 5 * z == 100:
                print('洗发水:',x,'香皂:',y,'牙刷:',z)
  1. 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
ply = 0.08 / 1000
count = 0
while True:
    ply *= 2
    count += 1
    if ply >= 8848.13:
        print('对折次数:',count)
        break
  1. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
a = 1
b = 1
n = int(input('请输入月份数:'))
for x in range(1,n+1):
    if x < 3:
        b = a
    else:
        a = a + b
        b,a = a,b
print(2 * b)
  1. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
num = 90
x = 2
while True:
    if num % x == 0:
        num /= x
        print(x, end='')
        if num != 1:
            print('x', end='')
    else:
        x += 1

    if num == 1:
        break
print()
  1. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
num = 2367
n1 = num // 1000
n2 = num // 100 % 10
n3 = num // 10 % 10
n4 = num % 10
n1 += 5
n2 += 5
n3 += 5
n4 += 5
n1 %= 10
n2 %= 10
n3 %= 10
n4 %= 10
new_num = n4*1000 + n3*100 + n2 * 10 + n1
print(num, '加密后的值:', new_num)
  1. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
n = 90
num = 2
while True:
    if n % num == 0:
        n //= num
        if n == 1:
            print(num, end=' ')
        else:
            print(num, '*', end=' ')
    else:
        num += 1
    if n == 1:
        break
print()
  1. 本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。
year = 5
capital = 10000
current_year = 1
while True:
    capital *= 1+0.003
    current_year += 1
    if current_year > 5:
        break
print(capital)
  1. 输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)
num = 276721
sum1 = 0
while True:
    sum1 += num % 10
    num //= 10
    if num == 0:
        break
print('和为:', sum1)
  1. 求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)
num1 = 18
num2 = 15
# 保证num1保存两个数中较小的数,num2中保存两个数中较大的数
if num1 > num2:
    num1, num2 = num2, num1

# 最大公约数
max_common_divisor = num1
while True:
    if num1 % max_common_divisor == 0 and num2 % max_common_divisor == 0:
        break
    else:
        max_common_divisor -= 1
print('最大公约数:', max_common_divisor)

# 最小公倍数
min_common_multiple = num2
multiple = 1    # 倍数
while True:
    if min_common_multiple % num1 == 0:
        break
    multiple += 1
    min_common_multiple = num2 * multiple
print('最小公倍数:', min_common_multiple)