功能体,是我对编程语言中一些语法格式与特殊语句块的称呼。同时,也是我对其的一种分类手段。例如,我认为“循环语句”和“选择语句”就是属于功能体的一种。


文章目录

  • 输入格式控制
  • 输出格式控制
  • 选择流程控制
  • example code
  • 循环流程控制
  • 循环:while
  • 循环:for
  • break
  • continue
  • example code


输入格式控制

# 格式化控制输入
strA = input("input strA:")
strB = input("input strB:")
intA = int(input("input intA:"))  # 强制类型转化为int型;因为对于用户输入的总是以字符串来对待的;
                                   # 如果不进行强制类型转换,则在格式输出的时候就会报错;

input明文和密文

# 用户输入
	# 方式1
input_str = input("请输入:\n")
print("你刚刚输入的是:%s" % input_str)

    # 方式2
import getpass  # 输入不可见式的密码

passwd = getpass.getpass("请输入:\n")
print(passwd)

输出格式控制

info_a = '''
strA is: %s
strB is: %s
intA is: %d  # 格式控制符,类似于C
''' % (strA, strB, intA)  # 代码的格式化排版
info_b = '''
strA 是:{_strA}
strB 是:{_strB}
intC 是:{_intA}
'''.format(_strA=strA, _strB=strB, _intA=intA)  # 相当于是把x的值赋给_x;
info_c = '''
strA 是:{0}
strB 是:{1}
intC 是:{2}
'''.format(strA, strB, intA)  # 给参数赋值

print(info)
str = "test"
print("this is a %s" % str)
print("this is a {_str}".format(_str=str))
print("this is a {0}".format(str))

print('hello', end='')  # 不换行输出

输出控制中的占位符

  1. %c:格式化字符及其ASCII码
  2. %s:格式化字符串
  3. %d:格式化整数
  4. %u:格式化无符号整型
  5. %o:格式化无符号八进制数
  6. %x:格式化无符号十六进制数
  7. %X:格式化无符号十六进制数(大写)
  8. %f:格式化浮点数字,可指定小数点后的精度
  9. %e:用科学计数法格式化浮点数
  10. %E:作用同%e,用科学计数法格式化浮点数
  11. %g:%f和%e的简写
  12. %G:%f 和 %E的简写
  13. %p:用十六进制数格式化变量的地址

选择流程控制

第一种形式:
if expression:
    statements...

第二种形式:
if expression
    statements...
else:
    statements...

第三种形式:
if expression:
    statements...
elif expression:
    statements...
...//可以有零条或多条elif语句
else:
    statement...

PS:Python不支持switch语句,因此判断结果对应多种执行方式时,只能用elif来做。

注意语法:
1、不要忘记缩进(一个Tab),从而形成代码块;一个代码块就如同C语言中的一个大括号覆盖的;
2、不要随意缩进;同一个代码块中的应该保持缩进一致;
3、不要遗忘冒号;
4、if 条件可以是任意类型,但” False、None、0、""、()、[]、{}”, 作为 bool 表达式时,会被解释器当作 False 处理;

example code

**功能体:**选择结构例子示例

'''
功能:身份验证,验证字符串是否相等
'''

username = input('Input your user name:')
password = input('Input your password:')
''' 输入密码时,终端没有回显
 import getpass
 password = getpass.getpass('请输入口令: ')
'''
if username == 'admin' and password == '123':
    print('身份验证成功!')
else:
    print('身份验证成功!')
'''
功能:求分段函数的值
        3x - 5  (x > 1)
f(x) =  x + 2   (-1 <= x <= 1)
        5x + 3  (x < -1)
'''

x = float(input('输入一个数字:'))  # 经过控制台输入的都是str格式,强转换为float
if x > 1:
    y = 3 * x -5
elif x >= -1:
    y = x + 2
else:
    y = 5 * x + 3

print('f(%.2f) = %.2f' %(x,y))  # 格式输出方式,保留float两位小数,注意格式:%.2f

'''输出:
输入一个数字:2
f(2.00) = 1.00
'''
'''
功能:转换英制单位英寸 和 公制单位厘米
算法:1英寸=2.54厘米
'''

value = float(input('请输入长度:'))
unit = input('请输入单位(英寸/in 厘米/cm):')
if unit == 'in' or unit == '英寸':
    print('%f英寸 =  %f厘米' % (value, value * 2.54))
elif unit == '厘米' or unit == 'cm':
    print('%f厘米 = %f英寸' % (value, value / 2.54))
else:
    print('你的输入不合法!')
'''
功能:掷骰子
核心:random模块randint函数
'''

from random import randint
a = randint(1, 6)  # 随机产生[1,6]之间的整数
print('第一次掷得:%d' % a)

b = randint(1, 6)
print('第二次掷得:%d' % b)

c = randint(1, 6)
print('第三次掷得:%d' % c)
'''
功能:百分制成绩转等级制
90分以上    --> A
80分~89分   --> B
70分~79分   --> C
60分~69分   --> D
60分以下    --> E
'''

score = float(input('请输入分数:'))
if score >= 90:
    grade = 'A'  # 等级
elif score >=80:  # 为什么不是score >= 80 and score <90? 因为上个if已经把<90排除了;
    grade = 'B'
elif score >=70:
    grade = 'C'
elif score >=60:
    grade = 'D'
else:
    grade = 'F'
print('该分数对应的等级是', grade)
'''
功能:判断三条边能否构成三角形
算法:任意两边之和大于第三边,任意两边只差小于第三边
'''

import math  # 导入math模块
a = float(input('a='))
b = float(input('b='))
c = float(input('c='))

if a + b > c and a + c > b and b + c > a:
    print('能构成三角形!')
else:
    print('不能构成三角形!')

循环流程控制

Python中没有do while循环。

循环:while

# 条件循环
count = 0
while count < 3 :
    print("count is :", count)
    count += 1

# 无线循环,通常要搭配break使其更具有实际意义;
while True:
    print("LOOP FOREVER.")

# while……else……当循环条件为 False 时,程序会执行 else 代码块。
count = 0
while count < 5 :
    print("now count is ", count)
    count += 1
    if count == 4:
        print("此时的count是4,break!则不会执行与while搭配的else代码!")
        break
else:
    print("正常完成了while循环,并执行了else代码。")

循环:for

for i in "I_love_python.":  # 语法,冒号;
    print(i)  # 每执行一次,就换行;从这个串里读取每个字母;
print("done!")

s = ['kyle', 'shawe', 'haha', 'nihao']
for i in s:  # 从列表中的变量;
    print(i)

break

**循环中的break:**一个break只能结束距离break最近的循环;

for i in range(0, 10) :
    print("i的值是: ", i)
    if i == 2:
        break  # 执行该语句时将结束循环

# 对于带 else 块的 for 循环,如果使用 break 强行中止循环,程序将不会执行 else 块。
for i in range(0, 10) :
    print("i的值是: ", i)
    if i == 2 :
        # 执行该语句时将结束循环
        break
else:
    print('else块: ', i)

continue

for i in range(0, 3):
    if i == 1:
        continue  # 忽略本次循环的剩下语句
    print ("i=: ", i)
'''output:由于i等于1时被忽略跳过了,故没有被输出
i=:  0
i=:  2
'''

PS: 循环与else 无论是 while 循环还是 for 循环,其后都可以紧跟着一个 else 代码块。
它的作用是,当循环条件为 False 跳出循环时,程序会最先执行 else 代码块中的代码。

example code

功能体:while-example code

# range函数说明:
# range(101) 依次产生[0,100]的整数序列;顾头不顾尾;
# range(1, 100) [1,99]
# range(1, 100, 2)  参数分别是:起始值,尾,步长

'''
功能:猜数字
核心:random模块下的randint函数
'''
import random
answer = random.randint(1, 100)  # answerd∈[1,100]的随机数
counter = 0  # 计算猜了多少次
print(answer)

while True:
    counter += 1
    number = int(input('输入一个整数:'))
    if number < answer:
        print('小了')
    elif number > answer:
        print('大了')
    else:
        print('恭喜,猜对了!')
        break  # 终结本个while循环
print('总共猜了%d次。' % counter)

功能体for-example code

# range函数说明:
# range(101) 依次产生[0,100]的整数序列;顾头不顾尾;
# range(1, 100) [1,99]
# range(1, 100, 2)  参数分别是:起始值,尾,步长

'''功能:求1-100之间的偶数求和
核心:for-in;range
'''
sum = 0
for x in range(2, 101, 2):
    sum += x
print('1-100之间的偶数求和为:', sum)

'''低效的代码
sum = 0
for x in  range(1,101):
   if x % 2 == 0:
      sum += x
print(sum)
'''
'''
功能:输出九九乘法表
核心:for-in; range()
'''

for i in range(1, 10):
    for j in range(1, i+1):
        print('%dx%d=%d' % (i, j, i*j), end='\t')
    print()
'''
功能:判断素数
算法:一个数的因数有且仅有1和它本身
 1) n都不能被[3,n)内的奇数整除;为什么是3开始?因为一个数如果是质数,其必定是奇数;
 2) n都不能被[3,n/2]内的奇数整除;
 3) n都不能被[3,sqrt(n)]内的奇数整除;
'''
from math import sqrt

num = int(input('输入一个整数:'))
if num <= 0:
    print('输入的整数不合法!')
    exit()
end = int(sqrt(num))
is_prime = True

for x in range(3, end+1):
    if num % x ==0:
        is_prime = False
        break
if is_prime == True:
    print('是素数。')
else:
    print('不是素数。')
'''
功能:两个数的最大公因数、最小公倍数
核心:最小公倍数 = 两数之积/最大公因数
算法: 1) 欧几里得-辗转相除法
  2) 试商法
'''

a = int(input('输入整数a:'))
b = int(input('输入整数b:'))
product = a * b
if a < b:  # 使得a>b
    t = a
    a = b
    b = t
# while a % b:  # 辗转相除法
#     t = a
#     a = b
#     b = t % b
# print('最大公因数:%d,最小公倍数是:%d' % (b, product / b))


for i in range(b, 0, -1):  # 试商法;使range递减
    if a % i == 0:
        print('最大公因数:%d,最小公倍数是:%d' % (i, product / i))
        break