第3章 Python 循环结构

文章目录

  • Educoder—第3章 Python 循环结构
      • 第1关:Python循环结构之while循环生成温度转换表
      • 第2关:Python循环结构之while循环实现凯撒密码加密
      • 第3关:Python循环结构之while循环打印九九乘法表
      • 第4关:Python循环结构之for循环实现奇偶数统计
      • 第5关:Python循环结构之for循环实现阶乘计算
      • 第6关:Python循环结构之break之判断素数
      • 第7关:Python循环结构之break
      • 第8关:Python循环结构之continue
      • 第9关:Python循环结构之continue之求正奇数个数
      • 第10关:Python循环结构之for…else…之寻找水仙花数
      • 第11关:Python循环结构之for…else…

Educoder—第3章 Python 循环结构

第1关:Python循环结构之while循环生成温度转换表

第3章 Python 循环结构_第1张图片

任务:构造-20到50摄氏度的摄氏-华氏温度对应表。

本关的摄氏温度值都为整数。温度表中的温度跨度为1度。数字与—之间有一个空格。

输出格式:

摄氏度—华氏度

-20 —> -4.000000

-19 —> -2.200000

···

···

50 —> 122.000000

min_temp = -20     # 最小温度值
max_temp = 50     # 最大温度值
c = -20
print("摄氏度--->华氏度")     # 打印出表的第一格
while c<51:
    f = c*1.8+32
    print("{} ---> {:.6f}".format(c,f))
    c = c + 1

执行结果:
D:\网络安全\Python\py_code>python educ.py
摄氏度--->华氏度
-20 ---> -4.000000
-19 ---> -2.200000
-18 ---> -0.400000
-17 ---> 1.400000
-16 ---> 3.200000
-15 ---> 5.000000
-14 ---> 6.800000
-13 ---> 8.600000
-12 ---> 10.400000
-11 ---> 12.200000
-10 ---> 14.000000
-9 ---> 15.800000
-8 ---> 17.600000
-7 ---> 19.400000
-6 ---> 21.200000
-5 ---> 23.000000
-4 ---> 24.800000
-3 ---> 26.600000
-2 ---> 28.400000
-1 ---> 30.200000
0 ---> 32.000000
1 ---> 33.800000
2 ---> 35.600000
3 ---> 37.400000
4 ---> 39.200000
5 ---> 41.000000
6 ---> 42.800000
7 ---> 44.600000
8 ---> 46.400000
9 ---> 48.200000
10 ---> 50.000000
11 ---> 51.800000
12 ---> 53.600000
13 ---> 55.400000
14 ---> 57.200000
15 ---> 59.000000
16 ---> 60.800000
17 ---> 62.600000
18 ---> 64.400000
19 ---> 66.200000
20 ---> 68.000000
21 ---> 69.800000
22 ---> 71.600000
23 ---> 73.400000
24 ---> 75.200000
25 ---> 77.000000
26 ---> 78.800000
27 ---> 80.600000
28 ---> 82.400000
29 ---> 84.200000
30 ---> 86.000000
31 ---> 87.800000
32 ---> 89.600000
33 ---> 91.400000
34 ---> 93.200000
35 ---> 95.000000
36 ---> 96.800000
37 ---> 98.600000
38 ---> 100.400000
39 ---> 102.200000
40 ---> 104.000000
41 ---> 105.800000
42 ---> 107.600000
43 ---> 109.400000
44 ---> 111.200000
45 ---> 113.000000
46 ---> 114.800000
47 ---> 116.600000
48 ---> 118.400000
49 ---> 120.200000
50 ---> 122.000000

第2关:Python循环结构之while循环实现凯撒密码加密

第3章 Python 循环结构_第2张图片

任务:编写代码实现凯撒密码加密,密码只能为大写字母,原密码和偏移量都通过input函数获取。
需要考虑边界效应,如果密码超过了Z,则重新用A、B、C…表示。

需要用到的内置函数

chr 函数

chr(x) 使用一个整数x作为参数,返回参数x对应的 ASCII 码字符

ord 函数

ord 函数是 chr 函数的配对函数,ord(ch)使用一个字符ch作为参数,返回ch对应的 ASCII 的十进制数值。

key = str(input("please input the key:"))
p = int(input("please input the offset:"))
i = 0
chkey = ""

while i<len(key):
	#偏移后的ASCII
	num = ord(key[i])+p
	#若偏移后的大于90,90就是Z,就要从A开始继续轮回,即考虑边界效应
	if num > 90:
		num  = num-90+64
	string =  chr(num)
	chkey += string
	i = i+1
print(chkey)

执行结果:
D:\网络安全\Python\py_code>python eee.py
please input the key:EICHI
please input the offset:8
MQKPQ

D:\网络安全\Python\py_code>python eee.py
please input the key:ABCD
please input the offset:3
DEFG

第3关:Python循环结构之while循环打印九九乘法表

任务:使用while循环打印出九九乘法表。注意每行算式间有一个空格,每一行的末尾有一个空格,乘号使用的是 x。

说明:print(“Hello Python”, end="\n"),print()函数默认带换行参数,将其等于空就不会换行了

i = 1
while i<10:
	j = 1
	while j<(i+1):
		res = i*j
		print("{}x{}={} ".format(i,j,res),end="")
		j+=1
	i+=1
	print()

执行结果:
D:\网络安全\Python\py_code>python educ.py
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81

第4关:Python循环结构之for循环实现奇偶数统计

任务:分别统计给定的列表中奇数和偶数的个数。

对range函数的说明

range()函数的使用
​ range(n) 表示一个区间范围的递增的数据 [0, n)
​ range(m, n) 表示一个区间范围,[m, n)的区间
​ range(m, n, s) 第三个值表示步长step

帮助文档

>>> help(range)
Help on class range in module builtins:

class range(object)
 |  range(stop) -> range object
 |  range(start, stop[, step]) -> range object
 |
 |  Return an object that produces a sequence of integers from start (inclusive)
 |  to stop (exclusive) by step.  range(i, j) produces i, i+1, i+2, ..., j-1.
 |  start defaults to 0, and stop is omitted!  range(4) produces 0, 1, 2, 3.
 |  These are exactly the valid indices for a list of 4 elements.
 |  When step is given, it specifies the increment (or decrement).
 翻译一下
 
>>>帮助(范围)

模块内置中有关类范围的帮助:


类范围(对象)

|范围(停止)->范围对象

|范围(开始,停止[,步骤]->范围对象

|

|返回一个对象,该对象从一开始就生成一个整数序列(包括)

|一步一步地停止(排除)。范围(i,j)产生i,i+1,i+2,…,j-1。

|开始默认为0,停止被忽略!范围(4)产生0、1、2、3。

|这些正是4个元素列表的有效索引。

|当给定step时,它指定增量(或减量)。 
"""
任务:分别统计给定的列表中奇数和偶数的个数。
"""
list_value = [1, 2, 18, 7, 33, 22, 1045, 98, 78, 36, 10, 111, 105, 4320, 1014, 50, 63, 15, 18, 910, 2010, 3201, 2501, 25, 120, 320]

ji = 0
ou = 0
for i in range(len(list_value)):
    if list_value[i]%2 == 0:
        ou +=1
    else:
        ji += 1
print("奇数共{}个,偶数共{}个".format(ji,ou))

执行结果;
D:\网络安全\Python\py_code>python educ.py
奇数共11个,偶数共15

第5关:Python循环结构之for循环实现阶乘计算

任务:使用 for 循环计算某个正整数的阶乘,这个数通过 input 函数获取。
如果输入的数不为正整数,则输出“输入数据不合法”。
注意:0 的阶乘为 1。

num = int(input())
times = 1
flag = 1
if num < 0:
    flag = 0
for i in range(1,num+1):
    flag = 1
    if num == 0:
        times = 1
        break
    else:
        times *= i
if flag == 1:
    print("{}的阶乘为{}".format(num,times))
else:
    print("输入数据不合法")
    
执行结果:
D:\网络安全\Python\py_code>python educ.py
5
5的阶乘为120

D:\网络安全\Python\py_code>python educ.py
4
4的阶乘为24

D:\网络安全\Python\py_code>python educ.py
0
0的阶乘为1

D:\网络安全\Python\py_code>python educ.py
-7
输入数据不合法

第6关:Python循环结构之break之判断素数

“”"

任务:判断给定的整数是否是素数。该整数是通过 input 获取。如果输入的数小于1,则输出“输入数据不合法”。

“”"

什么是素数?

素数是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数

num = int(input())
i = 2
flag = 1
if num < 1:
    print("输入数据不合法")
while i 0:
    print("是素数")

执行结果;
D:\网络安全\Python\py_code>python educ.py
15
不是素数

D:\网络安全\Python\py_code>python educ.py
11
是素数

D:\网络安全\Python\py_code>python educ.py
0
输入数据不合法

第7关:Python循环结构之break

“”"

任务:模仿银行输入的密码出错 3 次,而锁定账户(三次重新输入密码的机会),

请编写代码实现该功能。密码通过 input 函数获取。正确密码为"123"。

如果密码错误,输出一次“密码错误”,如果密码正确,输出“密码正确”。

“”"

flag = 1
for i in range(3):
    password = str(input())
    if password == "123":
        print("密码正确")
        break
    else:
        print("密码错误")
        
执行结果:
D:\网络安全\Python\py_code>python educ.py
123
密码正确

D:\网络安全\Python\py_code>python educ.py
345
密码错误
567
密码错误
678
密码错误

D:\网络安全\Python\py_code>python educ.py
345
密码错误
123
密码正确

第8关:Python循环结构之continue

“”"
任务:计算给定列表中所有正数的和。
“”"

list_num = [-5, 0, 5, 8, 101, -16, -15, 56, 20, -32, 20, 0, -19, 50, 100, 205, 302, 1901, 302]
sum = 0
for i in range(0,len(list_num)):
    if list_num[i] <= 0:
        continue
    else:
        sum += list_num[i]
print("正数和为{}".format(sum))

执行结果:
D:\网络安全\Python\py_code>python educ.py
正数和为3070

第9关:Python循环结构之continue之求正奇数个数

“”"
任务:给定一个正整数 n,统计小于等于 n 的正奇数的个数。n 通过 input 获取。如果输入的数据小于或者等于 0,则输出“输入数据不合法”。
“”"

num = int(input())
res = 0
flag = 0
#注意:当num小于0时,是不符合range()函数的可迭代对象的,即不进入for循环中
for i in range(1,num+1):
    if i%2 == 0:
        continue
    res += 1
    flag = 1
if flag == 0:
    print("输入数据不合法")
else:
    print("正奇数个数为{}".format(res))
    
执行结果:
D:\网络安全\Python\py_code>python educ.py
15
正奇数个数为8

D:\网络安全\Python\py_code>python educ.py
-5
输入数据不合法

D:\网络安全\Python\py_code>python educ.py
100
正奇数个数为50

第10关:Python循环结构之for…else…之寻找水仙花数

相关知识

针对本关任务,我们可以直接使用循环结构和分支结构语句相配合完成,不过,在这里,将介绍 for-else 语句来完成本关任务。

for-else

for-else 语句是 for 循环的一种,它和 break 语句一起使用时才能显示出 else 的作用。下面给出了两个使用 for-else 的例子及其执行结果。

for i in range(10):    
	if i == 5:        
	print( 'found it! i = %s' % i)
else:    
print('not found it')

执行结果:

found it! i = 5
not found it

这段代码中,在i=5时使用了break结束了循环

for i in range(10):    
	if i == 5:        
	print( 'found it! i = %s' % i)        
	break
else:    
	print('not found it')

执行结果:

found it! i = 5

从上述两段代码的运行结果可知,第一段代码并没有使用 break 语句,循环是完整的进行完了的,所以 else 语句中的代码运行了,而在第二段代码中,在 i=5 时使用了 break 结束了循环,所以 else 语句中的代码并没有执行。可以发现,如果循环在运行过程中被中断,则 else 语句不会执行;只有当循环完整的运行结束,else才会去执行

“”"

任务:给定一个整数 n,判断 n 以内的正数是否含有水仙花数,n 通过 input 获取;

如果有,输出“有水仙花数”,如果没有,则输出“没有水仙花数”。

水仙花数:一个 3 位的整数,它的每个位上的数字的 3 次幂之和等于它本身。

“”"

from math import *
n = int(input())
#由于水仙花数是三位的整数,所以范围限制在了100-999;所以for循环从100开始
for i in range(100,n):
    gewei = i%100%10
    shiwei = i%100//10
    beiwei = i//100
    res = pow(gewei,3) + pow(shiwei,3) + pow(beiwei,3)
    if res == i:
        print("有水仙花数")
        #break使循环中断后将不会执行else语句
        break
else:
	#当for循环完整的执行完成后,即没有发现水仙花数,就会执行else语句
    print("没有水仙花数")

执行结果:
D:\网络安全\Python\py_code>python educ.py
123
没有水仙花数

D:\网络安全\Python\py_code>python educ.py
800
有水仙花数

第11关:Python循环结构之for…else…

“”"

任务:给定一个正整数 n,这个正整数通过 input 获取,统计 2 到 n 的素数个数是否超过了 10 个。

如果超过了 10 个,则输出“素数数量超过10个”,如果少于 10 个,则输出“素数数量少于10个”,如果输入的数是 0 或 1,则输出“输入数据不合法”。

“”"

n = int(input())

#add用于统计2-n间素数的和
add = 0

#判断输入是否合法
if n == 0 or n == 1:
    print("输入数据不合法")
else:
    #num用于迭代2到输入的数字
    for num in range(2,n+1):
        if num == 2:
            add += 1
        else:
        #内层循环用于统计,2-n中每一个数字是不是素数
            for i in range(2,num):
                #素数是不能被整除的,,如果可以被整除,肯定不是素数
                if (num%i) == 0:
                    break
            else:
                add += 1
        if add > 10:
            print("素数数量超过10个")
            break
    else:
        print("素数数量少于10个")          

执行结果:
D:\网络安全\Python\py_code>python educ.py
30
素数数量少于10个

D:\网络安全\Python\py_code>python educ.py
57
素数数量超过10个

D:\网络安全\Python\py_code>python educ.py
0
输入数据不合法

D:\网络安全\Python\py_code>python educ.py
60
素数数量超过10

你可能感兴趣的:(#,Edu-Python程序设计,python)