Day 4 品读Python之while循环
while循环
1 基本内容
1.1 语法结构
while 条件语句 :
循环体
1.2 执行过程
- 判断条件语句是否成立
- 成立就执行循环体,执行完循环体,再判断条件是否成立,成立继续执行循环
- 直到不成立直接退出循环,循环终止
1.3 for循环和while的选择
- 原则上,能用for循环的时候尽量用for循环,解决不了的时候才考虑whlie循环
- for循环能够解决的问题: 循环次数能够确定
- for循环不能解决的问题: 循环次数不能确定
#案例1:
num = 1
while num <= 10:#每一次执行完循环,num会累加
print(num)
num += 1
#案例2:打印10个hello world!
num = 1
while num <= 10:
print("hello world")
num += 1
#案例3
pw = "123456"
while True:
value = imput("请输入密码:")
if pw == value:#循环终止是用户和存储的密码完全一样,循环次数是根据用户的输入确定
break
2 循环关键字
2.1 continue
- 结束一次循环
- 循环中遇到continue,结束当次循环,不在执行continue之后的循环体
- 继续执行下一次循环
#案例:打印0-10之间的基数
for i in range(10):
if x % 2 == 0:
continue
print(x)
2.2 break
- 结束整个循环
- 循环体执行过程中,遇到break,将直接跳出循环,循环终止
#打印0-10之间小于等于4的数
for i in range(10)
if i > 4:
break
print(i)
2.3 while循环和break万能公式
while True:
循环体
循环终止条件
break
第一周作业
一、选择题
-
下列变量名中不合法的是?(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 i in range(5): print("you see see ,one day day !")
-
写代码打印数字 11、12、13、… 21
for i in range(11,22): print(i)
-
写代码打印数字 11,13,15,17,…99
for i in range(11,100,2): print(i)
-
写代码打印数字:10、9、8、7、6、5
for i in range(10,4,-1): print(i)
-
写代码计算:1+2+3+4+…+20 的和
sum_num = 0 for i in range(1, 21): sum_num += i print(sum_num)
-
写代码计算100以内所有偶数的和
sum_num = 0 for i in range(2,101,2): sum_num += i print(sum_num)
-
写代码统计100~200中个位数是3的数的个数
count = 0 for i in range(100,201): if i % 10 == 3: count += 1 print(count)
-
写代码计算
2*3*4*5*...*9
的结果product = 1 for i in range(2,10): product *= i print(product)
-
输入一个数,如果输入的数是偶数就打印
偶数
否则打印奇数
num = int(input("请输入一个数:")) if num == 0: print("既不是奇数也不是偶数") else: if num % 2 == 0: print("偶数") else: print("奇数")
-
统计1000以内能被3整除但是不能被5整除的数的个数。
count = 0 for i in range(1000): if i % 3 == 0 and i % 5 != 0: count += 1 print(count)
-
判断101-200之间有多少个素数,并输出所有素数。
count_sum = 0 for i in range(101,200): flag = True for j in range(2,i): if i % j == 0: flag = False break if flag: print(i) count_sum +=1 print("素数的总数为:",count_sum)
-
求整数1~100的累加值,但要求跳过所有个位为3的数。
sum_num = 0 for i in range(1, 101): if i % 10 != 3: sum_num += i print(sum_num)
-
有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的第20个分数
son_1, son_2 = 2, 3 mother_1, mother_2 = 1, 2 count = int(input("请输入您想查看的第几个分数:")) if count == 1: print("第", count, "个分数是:", son_1, "/", mother_1) elif count == 2: print("第", count, "个分数是:", son_2, "/", mother_2) else: for i in range(count - 2): son = son_1 + son_2 son_1 = son_2 son_2 = son mother = mother_1 + mother_2 mother_1 = mother_2 mother_2 = mother print("第", int, "个分数是:", son, "/", mother)
-
写程序计算 n 的阶乘 n! 的结果
product= 1 num = int(input("请输入您想计算谁的阶乘:")) for i in range(1,num+1): product *= i print(num,"的阶乘为:",product)
-
求1+2!+3!+…+20!的和
sum_num = 0 for i in range(1,21): product = 1 for j in range(1, i + 1): product *= j sum_num += product print("1-20包含20所有数的阶乘和为:",sum_num)
-
写程序求表达式 a + aa + aaa + aaaa+ … 的结果,其中a是1~9的数字,求和的项数用n来控制。(a和n可以用变量来表示)
例如:a为3, n为5的时候: 3 + 33 + 333 + 3333 + 33333
a = int(input("请输入a的值(大于0):")) n = int(input("请输入n的值(大于0):")) flag = a sums_num = 0 for i in range(1, n + 1): sum_num = 0 for j in range(0, i): a = flag a *= 10 ** j sum_num += a if i < n: print(sum_num, end=" + ") else: print(sum_num, end=" = ") sums_num += sum_num print(sums_num)
-
控制台输出三角形
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("请输入n的值:")) for i in range(n+1,0,-1): print("*"*i) #b n = int(input("请输入n的值:")) for i in range(1,n+1,2): print(" "*((n-i)//2),"*"*i) #c n = int(input("请输入n的值:")) for i in range(1,n+1): print(" "*(n-i),end="") for j in range(1,i+1): print(j,end="") for k in range(i-1,0,-1): print(k, end="") print()
-
小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?
total_money = 100 shampoo = 15#6 soap = 2#50 toothbrush = 5#20 for shampoo_num in range(7): for soap_num in range(51): for toothbrush_num in range(21): if shampoo_num*15 +soap_num*2 + toothbrush_num* 5 == total_money: print("洗发水的数量:",shampoo_num,"香皂的数量:",soap_num,"牙刷的数量:",toothbrush_num)
-
一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
total_height = 8848.13 single_height = 0.00008 count = 0 while True: count += 1 growing_height = single_height*2 **count if growing_height >= total_height: break print("需要折叠的次数为:",count)
-
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
month = int(input("请输入月份: ")) if month == 1 or month == 2: #兔子从第三个月才开始生兔子,所以前两个月单拿出来 print("总共有兔子数对数为1对") else: a = 1 b = 1 c = 0 for i in range(3, month + 1): c = a + b #第n个月等于第n-1个月+第n-2个月 a = b b = c print("总共有兔子对数为:", c)
-
将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
num = int(input("请输入一个数:")) total = num #备份num,最后打印 list_num = [] for i in range(2, num + 1): flag = True for j in range(2, i): if i % j == 0: flag = False break if flag: list_num.append(i) # 将质数存储在列表中 list_nums = [] # 将质数因数存储在列表中 while num !=1: #num每次发生变化 for k in list_num: if num % k == 0: list_nums.append(k) num /=k break print(total," = ",end="") for m in range(len(list_nums)): if m == len(list_nums) -1: print(list_nums[m]) else: print(list_nums[m]," * ",end="")
-
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
num = int(input("请输入需要加密的值(四位整数):")) num_1 = num %10 num_2 = num%100//10 num_3 = num//100%10 num_4 = num//1000 num_1 += 5 num_1 %= 10 num_2 += 5 num_2 %= 10 num_3 += 5 num_3 %= 10 num_4 += 5 num_4 %= 10 num_1, num_2, num_3, num_4 = num_4, num_3, num_2, num_1 print("加密后的值为:", num_1, num_2, num_3, num_4)
-
将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
num = int(input("请输入一个数:")) total = num #备份num,最后打印 list_num = [] for i in range(2, num + 1): flag = True for j in range(2, i): if i % j == 0: flag = False break if flag: list_num.append(i) # 将质数存储在列表中 list_nums = [] # 将质数因数存储在列表中 while num !=1: #num每次发生变化 for k in list_num: if num % k == 0: list_nums.append(k) num /=k break print(total," = ",end="") for m in range(len(list_nums)): if m == len(list_nums) -1: print(list_nums[m]) else: print(list_nums[m]," * ",end="")
-
本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。
money = float(input("请输入您的本金:")) years = int(input("请输入想查询几年后的本金:")) for i in range(years): money=money*(1+3/1000) print(years,"年后,您的本金是{:.2f}:".format(money))
-
输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)
num = input("请输入一个整数:") count = len(num) num_int = int(num) sum_num = 0 for i in range(count): unit = num_int%10 num_int //= 10 sum_num += unit print(sum_num)
-
求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)
num_1 = int(input("请输入第一个数:")) num_2 = int(input("请输入第二个数:")) max_num = max(num_1, num_2) min_num = min(num_1, num_2) # 求最大公约数 list_min = [] for i in range(2, min_num + 1): if num_1 % i == 0 and num_2 % i == 0: list_min.append(i) if list_min == []: print("没有最大公约数.") else: print("最大公约数为:", max(list_min)) # 求最小公倍数 num_copy = max_num while True: if num_copy % num_1 == 0 and num_copy % num_2 == 0: break else: num_copy += max_num print("最小公倍数为:", num_copy)
-