04while循环和循环关键字
1.三目运算符
python的三目运算符:
- 语法:
值1 if 表达式 else 值2- 运算规则:如果表达式的结果为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 -12.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.完整的循环结构
- 完整的for循环:
for 变量 in 序列:
循环体
else:
代码段- 完整的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('纯数字字符串')第一周作业
一、选择题
- 下列变量名中不合法的是?(C)
A. abc
B. Npc
C. 1name
D ab_cd - 下列选项中不属于关键字的是?(B)
A. and
B. print
C. True
D. in - 下面哪个选项对应的代码写法是正确的?(C)
A.
print('Python')
print('新手村')B.
print('Python') print('新手村')C.
print('Python')
print('新手村')D.
print('Python''新手村')- 下面选项中能打印出50的是?(B)
A.
print('100 - 50')B.
print(100 - 50)- 关于引号,下面选项中使用正确的是?(D)
A.
print('hello)B.
print("hello')C.
print(“hello”)D.
print("hello")二、编程题
- 写代码在控制台打印
good good study, day day up!
print('good good study,day day up!')- 写代码在控制台打印5次
you see see, one day day!
for x in range(5):
print('you see see,one day day!')- 写代码打印数字 11、12、13、… 21
for x in range(11,22):
print(x)- 写代码打印数字 11,13,15,17,…99
for x in range(11,100,2):
print(x)- 写代码打印数字:10、9、8、7、6、5
for x in range(10,4,-1):
print(x)- 写代码计算:1+2+3+4+…+20 的和
result = 0
for x in range(1,21):
result += x
print(result)- 写代码计算100以内所有偶数的和
result = 0
for x in range(2,101,2):
result += x
print(result)- 写代码统计100~200中个位数是3的数的个数
count = 0
for x in range(100,201):
if x % 10 == 3:
count += 1
print(count)- 写代码计算
2*3*4*5*...*9的结果
result = 1
for x in range(2,10):
result *= x
print(result)- 输入一个数,如果输入的数是偶数就打印
偶数否则打印奇数
num = int(input('请输入一个整数:'))
if num % 2 == 0:
print('偶数')
else:
print('奇数')- 统计1000以内能被3整除但是不能被5整除的数的个数。
count = 0
for x in range(3,1001,3):
if x % 5 != 0:
count += 1
print(count)循环练习题
- 判断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~100的累加值,但要求跳过所有个位为3的数。
result = 0
for x in range(1,101):
if x % 10 == 3:
continue
else:
result += x
print(result)- 有⼀分数序列: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='')- 写程序计算 n 的阶乘 n! 的结果
result = 1
n = int(input('请输入一个整数:'))
for x in range(1,n+1):
result *= x
print('n的阶乘是:',result)- 求1+2!+3!+…+20!的和
result = 1
num = 0
for x in range(1,21):
result *= x
num += result
print(num)- 写程序求表达式 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)- 控制台输出三角形
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()- 小明单位发了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)- 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
ply = 0.08 / 1000
count = 0
while True:
ply *= 2
count += 1
if ply >= 8848.13:
print('对折次数:',count)
break- 古典问题:有一对兔子,从出生后第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)- 将一个正整数分解质因数。例如:输入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()- 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上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)- 将一个正整数分解质因数。例如:输入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()- 本金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)- 输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)
num = 276721
sum1 = 0
while True:
sum1 += num % 10
num //= 10
if num == 0:
break
print('和为:', sum1)- 求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)
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)
















