功能體,是我對編程語言中一些語法格式與特殊語句塊的稱呼。同時,也是我對其的一種分類手段。例如,我認爲“循環語句”和“選擇語句”就是屬於功能體的一種。
輸入格式控制
# 格式化控制輸入
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='') # 不換行輸出
輸出控制中的佔位符
-
%c
:格式化字符及其ASCII碼 -
%s
:格式化字符串 -
%d
:格式化整數 -
%u
:格式化無符號整型 -
%o
:格式化無符號八進制數 -
%x
:格式化無符號十六進制數 -
%X
:格式化無符號十六進制數(大寫) -
%f
:格式化浮點數字,可指定小數點後的精度 -
%e
:用科學計數法格式化浮點數 -
%E
:作用同%e,用科學計數法格式化浮點數 -
%g
:%f和%e的簡寫 -
%G
:%f 和 %E的簡寫 -
%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