For 循環
for
循環是 Python 中用于遍歷序列(如列表、元組、字符串等)的迭代結構。for
循環的本質是按照序列中的元素順序執行代碼塊,并在每次迭代中獲取序列的下一個元素。for
循環的語法結構如下:
for variable in sequence:
# 代碼塊
下面是一個使用 for
循環的簡單示例,以及相應的代碼注釋:
# 創建一個數字列表
numbers = [1, 2, 3, 4, 5]
# 使用 for 循環遍歷列表中的每個元素
for num in numbers:
# 在每次迭代中,將當前元素乘以 2 并打印
double_num = num * 2
print(double_num)
# 輸出結果:
# 2
# 4
# 6
# 8
# 10
此外,你還可以使用 range()
函數與 for
循環配合使用,實現特定范圍內的迭代。下面是一個例子:
# 使用 range() 函數生成一個包含 0 到 4(不包括 5)的整數序列
# 并使用 for 循環遍歷這個序列
for i in range(5):
# 在每次迭代中,將當前索引值乘以 3 并打印
triple_i = i * 3
print(triple_i)
# 輸出結果:
# 0
# 3
# 6
# 9
# 12
通過這些示例,你可以看到 for
循環如何在 Python 代碼中實現對序列的遍歷,以及如何利用循環執行特定任務。
當然Python 中的 for
循環還可以與其他高級功能結合使用,實現更強大的功能。以下是一些高級用法的示例:
列表推導式(List Comprehensions)
列表推導式是一種簡潔的創建列表的方法,它使用 for
循環實現。例如,我們可以使用列表推導式創建一個包含平方數的列表:
# 使用列表推導式創建一個包含 1 到 10 的平方數的列表
squares = [x**2 for x in range(1, 11)]
print(squares)
# 輸出結果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
帶有條件的列表推導式
列表推導式可以與條件語句結合,根據特定條件過濾或更改結果。例如,我們可以創建一個僅包含偶數平方數的列表:
# 使用帶有條件的列表推導式創建一個僅包含 1 到 10 的偶數平方數的列表
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares)
# 輸出結果:[4, 16, 36, 64, 100]
使用 enumerate()
函數
enumerate()
函數允許你在 for
循環中同時獲取元素及其索引。例如:
# 創建一個字符串列表
fruits = ["apple", "banana", "cherry"]
# 使用 enumerate() 函數遍歷列表,并同時獲取元素及其索引
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
# 輸出結果:
# 0: apple
# 1: banana
# 2: cherry
使用 zip()
函數
zip()
函數允許你在 for
循環中同時遍歷多個序列。例如:
# 創建兩個數字列表
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 使用 zip() 函數同時遍歷兩個列表,并將對應的元素相加
for a, b in zip(list1, list2):
print(a + b)
# 輸出結果:
# 5
# 7
# 9
這些高級用法展示了 for
循環在 Python 中的靈活性和實用性。你可以將這些技巧應用到更復雜的問題中,實現高效且簡潔的代碼。
舉例說明
如今許多純電車型都已經配備了DMS或者OMS視覺識別系統,那么就可以考慮將家庭用車成員人臉及身份信息錄入系統數據庫(字典),并通過大屏進行不同環境條件下需求的熱舒適系統組合設置,與對應的身份信息形成關聯,這樣,當家庭成員上車后,即可通過視覺識別系統自動識別人員身份,在數據庫中已存儲的多個信息中進行查詢,當識別的人臉信息與某個已存儲信息一致時,則進入該存儲信息下的熱舒適模式庫(字典),通過環境信息傳感器采集的環境條件,調取熱舒適模式庫中與之對應的唯一匹配的熱舒適模式,更近一步的話,可以加入自主學習功能,學習用戶習慣,修改對應推送權重,不斷的優化熱舒適模式庫中的定義信息。
接下來,我們會用到編程語言中的數據結構: 字典 ,一種采用鍵值對的結構類型,形如:{key1:value1,key2:value2,…}
在編程中,字典是一種非常有用的數據結構,它可以存儲鍵值對,并且支持快速查找和修改。在Python中,我們可以使用大括號{}
來創建一個字典對象。
以下是一些常見的字典操作:
創建字典
# 創建空字典
my_dict = {}
# 創建帶有初始鍵值對的字典
my_dict = {'apple': 2, 'banana': 3, 'orange': 4}
訪問字典元素
# 使用鍵訪問值
print(my_dict['apple']) # 輸出 2
# 使用get()方法訪問值(如果鍵不存在,則返回None或指定的默認值)
print(my_dict.get('pear')) # 輸出 None
print(my_dict.get('pear', 0)) # 輸出 0
修改字典元素
# 直接賦值修改值
my_dict['apple'] = 5
# 使用update()方法批量修改值
my_dict.update({'banana': 6, 'pear': 7})
遍歷字典
# 遍歷所有鍵
for key in my_dict:
print(key)
# 遍歷所有值
for value in my_dict.values():
print(value)
# 遍歷所有鍵值對
for key, value in my_dict.items():
print(key, value)
刪除字典元素
# 根據鍵刪除鍵值對
del my_dict['apple']
# 清空字典
my_dict.clear()
需要注意的是,字典中的鍵必須是不可變類型(如字符串、數字或元組),而值可以是任意類型。此外,字典是無序的,即它們的元素沒有固定的順序。
在Python中,我們可以使用字典來嵌套其他的數據結構,包括另一個字典。這種方式通常被稱為“字典嵌套”。
以下是一個示例代碼,展示了如何在字典中嵌套另一個字典:
# 定義一個嵌套字典
my_dict = {
'apple': {'price': 2, 'color': 'red'},
'banana': {'price': 3, 'color': 'yellow'},
'orange': {'price': 4, 'color': 'orange'}
}
# 訪問嵌套字典中的元素
print(my_dict['apple']['price']) # 輸出 2
print(my_dict['banana']['color']) # 輸出 yellow
# 修改嵌套字典中的元素
my_dict['orange']['price'] = 5
print(my_dict['orange']['price']) # 輸出 5
需要注意的是,在訪問或修改嵌套字典中的元素時,我們需要使用多個鍵來指定路徑。例如,my_dict['apple']['price']
表示訪問'apple'
鍵對應的值(即另一個字典),然后再訪問該字典中'price'
鍵對應的值。
此外,我們還可以通過循環遍歷嵌套字典中的所有元素,例如:
for key1 in my_dict:
for key2 in my_dict[key1]:
print(key1, key2, my_dict[key1][key2])
這段代碼會依次輸出每個鍵值對的鍵和值,其中key1
表示外層字典中的鍵,key2
表示內層字典中的鍵。
中間穿插了這么多的關于字典數據結構的信息,主要還是因為上面的舉例說明用python實現需要用到這方面的知識,閑話休提,我們再次回到正題
我們通過嵌套字典的數據結構存儲身份ID(key1):Identity_ID、環境條件(key2):Environmental_conditions、熱舒適模式(value):Comfort_mode
即Intelligent_Comfort_Mode={key1:{key2:value}}={Identity_ID:{Environmental_conditions:Comfort_mode}}
假設家庭成員有lin_baba、lin_meimei、wang_mama,其中lin_baba自定義了四個依據環境條件自動推送的熱舒適模式
那么最終的Intelligent_Comfort_Mode={lin_baba:{Environmental_conditions1:Comfort_mode1,Environmental_conditions2:Comfort_mode2,Environmental_conditions3:Comfort_mode3,Environmental_conditions4:Comfort_mode4},wang_mama:{…},lin_meimei:{…}}
Intelligent_Comfort_Mode數據存儲結構建立好以后,就可以通過人臉圖像掃描信息、環境條件采集信息遍歷字典查詢與之對應的熱舒適模式Comfort_mode了
Python代碼實現
def add_member(family_members, identity_id):
# 如果家庭成員字典中不存在該成員,就添加一個新的成員,并初始化其環境條件字典
if identity_id not in family_members:
family_members[identity_id] = {}
def add_environment_condition(family_members, identity_id, environmental_condition, comfort_mode):
# 如果家庭成員存在,向該成員的環境條件字典中添加一條新的環境條件和對應的熱舒適模式
if identity_id in family_members:
family_members[identity_id][environmental_condition] = comfort_mode
def update_comfort_mode(family_members, identity_id, environmental_condition, new_comfort_mode):
# 如果家庭成員和對應的環境條件存在,更新該環境條件的熱舒適模式
if identity_id in family_members:
if environmental_condition in family_members[identity_id]:
family_members[identity_id][environmental_condition] = new_comfort_mode
def get_comfort_mode(family_members, identity_id, environmental_condition):
# 如果家庭成員和對應的環境條件存在,返回該環境條件的熱舒適模式
if identity_id in family_members:
if environmental_condition in family_members[identity_id]:
return family_members[identity_id][environmental_condition]
return None
def learn_from_user_behavior(family_members, identity_id, environmental_condition, comfort_mode):
# 根據用戶行為、時間等權重以自定義方式更新熱舒適模式信息
pass
# 初始化家庭成員字典
family_members = {}
# 添加家庭成員
add_member(family_members, "lin_baba")
add_member(family_members, "lin_meimei")
add_member(family_members, "wang_mama")
# 添加環境條件和對應的熱舒適模式
add_environment_condition(family_members, "lin_baba", "Environmental_conditions1", "Comfort_mode1")
add_environment_condition(family_members, "lin_baba", "Environmental_conditions2", "Comfort_mode2")
add_environment_condition(family_members, "lin_baba", "Environmental_conditions3", "Comfort_mode3")
add_environment_condition(family_members, "lin_baba", "Environmental_conditions4", "Comfort_mode4")
# 根據人臉識別結果和環境條件獲取對應的熱舒適模式
identity_id = "lin_baba"
environmental_condition = "Environmental_conditions1"
comfort_mode = get_comfort_mode(family_members, identity_id, environmental_condition)
print(f"{identity_id} in {environmental_condition}: {comfort_mode}")
# 更新熱舒適模式
new_comfort_mode = "New_Comfort_mode1"
update_comfort_mode(family_members, identity_id, environmental_condition, new_comfort_mode)
comfort_mode = get_comfort_mode(family_members, identity_id, environmental_condition)
print(f"{identity_id} in {environmental_condition}: {comfort_mode}")
# 學習用戶行為
learn_from_user_behavior(family_members, identity_id, environmental_condition, comfort_mode)
# 打印家庭成員的所有環境條件和熱舒適模式
def print_family_members_info(family_members):
for identity_id, environmental_conditions in family_members.items():
print(f"{identity_id}:")
for condition, comfort_mode in environmental_conditions.items():
print(f" {condition}: {comfort_mode}")
print()
matlab function代碼實現
% 添加家庭成員
function family_members = add_member(family_members, identity_id)
if isKey(family_members, identity_id)
family_members(identity_id) = containers.Map();
end
end
% 添加環境條件和對應的熱舒適模式
function family_members = add_environment_condition(family_members, identity_id, environmental_condition, comfort_mode)
if isKey(family_members, identity_id)
family_members(identity_id)(environmental_condition) = comfort_mode;
end
end
% 更新熱舒適模式
function family_members = update_comfort_mode(family_members, identity_id, environmental_condition, new_comfort_mode)
if isKey(family_members, identity_id) && isKey(family_members(identity_id), environmental_condition)
family_members(identity_id)(environmental_condition) = new_comfort_mode;
end
end
% 獲取熱舒適模式
function comfort_mode = get_comfort_mode(family_members, identity_id, environmental_condition)
comfort_mode = [];
if isKey(family_members, identity_id) && isKey(family_members(identity_id), environmental_condition)
comfort_mode = family_members(identity_id)(environmental_condition);
end
end
% 學習用戶行為
function family_members = learn_from_user_behavior(family_members, identity_id, environmental_condition, comfort_mode)
% 根據用戶行為、時間等權重以自定義方式更新熱舒適模式信息
end
% 初始化家庭成員字典
family_members = containers.Map();
% 添加家庭成員
family_members = add_member(family_members, 'lin_baba');
family_members = add_member(family_members, 'lin_meimei');
family_members = add_member(family_members, 'wang_mama');
% 添加環境條件和對應的熱舒適模式
family_members = add_environment_condition(family_members, 'lin_baba', 'Environmental_conditions1', 'Comfort_mode1');
family_members = add_environment_condition(family_members, 'lin_baba', 'Environmental_conditions2', 'Comfort_mode2');
family_members = add_environment_condition(family_members, 'lin_baba', 'Environmental_conditions3', 'Comfort_mode3');
family_members = add_environment_condition(family_members, 'lin_baba', 'Environmental_conditions4', 'Comfort_mode4');
% 根據人臉識別結果和環境條件獲取對應的熱舒適模式
identity_id = 'lin_baba';
environmental_condition = 'Environmental_conditions1';
comfort_mode = get_comfort_mode(family_members, identity_id, environmental_condition);
fprintf('%s in %s: %sn', identity_id, environmental_condition, comfort_mode);
% 更新熱舒適模式
new_comfort_mode = 'New_Comfort_mode1';
family_members = update_comfort_mode(family_members, identity_id, environmental_condition, new_comfort_mode);
comfort_mode = get_comfort_mode(family_members, identity_id, environmental_condition);
fprintf('%s in %s: %sn', identity_id, environmental_condition, comfort_mode);
% 學習用戶行為
family_members = learn_from_user_behavior(family_members, identity_id, environmental_condition, comfort_mode)
由于上面舉例實現起來有點復雜,不利于理解,我們簡化以下控制需求,只保留一層字典{key,value}={identity_id,comfort_mode}
重新生成matlab function代碼
function y = get_comfort_mode(identity_id, comfort_mode)
% identity_id: 人員信息
% comfort_mode: 舒適模式
% 初始化輸出值為NaN
y = NaN;
% 遍歷字典中的所有鍵值對
keys = fieldnames(comfort_mode);
for i = 1:length(keys)
key = keys{i};
if strcmp(key, identity_id) % 如果找到了指定的人員
y = comfort_mode.(key); % 輸出該人員對應的舒適模式
break;
end
end
在上述代碼中,identity_id表示人員信息,comfort_mode表示舒適模式。首先,我們將輸出值初始化為NaN,以便在未找到指定鍵時返回一個無效值。然后,我們使用
fieldnames()
函數獲取字典中的所有鍵,并通過循環逐個檢查每個鍵是否與指定鍵匹配。如果找到了指定鍵,則將輸出值設置為該鍵對應的值,并跳出循環。
考慮到本塊目的是在simulink中實現For循環,我們選用一個最簡單的例子,x遍歷(1:10),y1=power(x, 2)+y1
matlab function代碼實現
function y1=fac()
y1=0;
for x=1:10
y1=power(x, 2)+y1;
end
simulink實現
For Iterator 模塊就充當了 for(i = 0,i<10,i++)的角色,并把i 輸出出來。
在很多帶索引的模塊里,都會有索引模式的選項,模型里的索引語法是從0開始還是從1開始。從建模規范上來說,不管Zero-based 還是 One-based,全篇統一就行,防止出錯。但是在 MATLAB Function 里,似乎是只能從1開始的。
While循環
While循環是一種常見的程序控制結構,它可以在滿足特定條件時重復執行一段代碼塊。其本質是一個條件語句,只有當指定的條件為真時才會執行循環體中的代碼。
While循環通常用于需要反復執行某個操作直到達成特定條件的情況下。例如,在計算機編程中,我們可能需要對一組數據進行處理,直到所有數據都被處理完畢為止。這時候就可以使用While循環來實現。
While循環的基本語法如下:
while (condition)
{
// 循環體
}
其中,condition
是一個布爾表達式,如果該表達式的值為true,則繼續執行循環體中的代碼;否則跳出循環。
在每次迭代中,程序首先檢查condition
是否為true。如果是,則執行循環體中的代碼,并再次檢查condition
的值。如果仍然為true,則繼續執行循環體中的代碼,以此類推。如果condition
的值變為false,則跳出循環,繼續執行后面的代碼。
我們接著用上面的例子:x遍歷(1:10),y1=power(x, 2)+y1
Python代碼實現
# 計算1到10之間所有整數平方和
y1 = 0
x = 1
while x <= 10:
y1 += power(x,2)
x += 1
print("1到10之間所有整數平方和為:", y1)
matlab function實現
function y1 = fcn(x)
%#codegen
y1 = 0;
x = 1;
while i <= 10
y1 = power(x,2)+y1;
x = x + 1;
end
simulink實現
- Maximum number of iterations是指最大迭代次數,這里設為-1表示沒有最大迭代次數,while循環的中止條件由外部決定而不由迭代次數決定
- While loop type是指循環類型,這里選擇while循環。其他情況下也可以選擇
- do-while States when starting選為reset,表示每一個時間步都會重置
- Show iteration number port表示迭代次數,勾選上,后面建模會用到這個迭代次數
stateflow同For循環一致,不再贅述
Do-while循環
while循環和do-while循環是兩種常見的循環結構,它們的主要區別在于循環條件的判斷時機不同。
while循環先判斷循環條件是否滿足,如果滿足則執行循環體中的語句,然后再次判斷循環條件是否滿足。如果循環條件仍然滿足,則繼續執行循環體中的語句,直到循環條件不滿足為止。因此,在使用while循環時,如果循環條件一開始就不滿足,那么循環體中的語句將不會被執行。
例如,下面的代碼演示了一個簡單的while循環:
i = 0
while i < 5:
print(i)
i += 1
這個循環將打印出從0到4的整數,因為當i=5
時,循環條件i<5
不再滿足,循環結束。
而do-while循環則先執行一次循環體中的語句,然后再判斷循環條件是否滿足。如果循環條件滿足,則繼續執行循環體中的語句,否則跳出循環。因此,在使用do-while循環時,無論循環條件是否滿足,循環體中的語句至少會被執行一次。
例如,下面的代碼演示了一個簡單的do-while循環:
i = 0
do:
print(i)
i += 1
while i < 5
這個循環將打印出從0到4的整數,因為在第一次執行循環體時,i=0
,循環條件i<5
滿足,所以循環體中的語句被執行。然后,在接下來的四次循環中,循環條件仍然滿足,因此循環體中的語句繼續被執行,直到i=5
時,循環條件不再滿足,循環結束。
總之,while循環和do-while循環都是常見的循環結構,它們的區別在于循環條件的判斷時機不同。在使用時需要根據具體情況選擇合適的循環結構。
我們接著用上面的例子:x遍歷(1:10),y1=power(x, 2)+y1
Python代碼實現
# 計算1到10之間所有整數平方和
y1 = 0
x = 1
do:
y1 += power(x,2)
x += 1
while x <= 10:
print("1到10之間所有整數平方和為:", y1)
simulink實現
與while循環差別很小,一是將while interator模塊參數中的循環類型設置為do-while,二是取消了初始IC端口外部饋入信號
stateflow實現
通過改變流程圖的方向,實現先執行,后判斷。注意****紅圈的優先級一定是1
-
python
+關注
關注
56文章
4822瀏覽量
85804 -
DMS
+關注
關注
0文章
92瀏覽量
16518 -
機器視覺識別
+關注
關注
0文章
9瀏覽量
5392 -
simulink仿真
+關注
關注
0文章
75瀏覽量
8690
發布評論請先 登錄
相關推薦
評論