條件語句和循環語句是計算機編程中常用的兩種控制結構
條件語句是一種根據某個條件來執行不同操作的程序結構。當滿足特定條件時,程序會執行一個或多個指定的操作;否則,程序將跳過這些操作并繼續執行下一條語句。在大多數編程語言中,條件語句通常使用if-else語句實現,也可以使用switch-case語句等其他形式。
循環語句是一種重復執行相同或類似操作的程序結構。它允許程序按照預定義的次數或者直到某個條件被滿足為止重復執行一組語句。在大多數編程語言中,循環語句通常使用for、while、do-while等關鍵字實現。
通過使用條件語句和循環語句,程序員可以更加靈活地控制程序的流程和行為,從而實現各種復雜的功能和應用
文本通過python,Stateflow,Simulink 以及 MATLAB Function四種方法實現If-else、Switch -case、For循環、While循環、Do-while循環
If-Else
if else循環的本質是根據給定條件判斷程序執行哪個分支。具體來說,if語句會先判斷括號中的條件是否為真,如果為真,則執行花括號內的代碼塊;否則,跳過該代碼塊,繼續執行下一個語句。
x = 10
if x > 5:
print("x大于5")
else:
print("x小于等于5")
在這個示例中,我們定義了變量x,并使用if else語句對其進行判斷。首先,if語句會判斷x是否大于5,由于x的值為10,因此條件成立,程序將輸出“x大于5”。如果x的值為3,則條件不成立,程序將跳過if語句塊,執行else語句塊,輸出“x小于等于5”。
總之,if else循環可以幫助我們根據不同的情況采取不同的行動,從而實現更加靈活和智能的編程。
舉例說明1
對于自動空調控制系統,以夏季空調制冷為例,當主副駕設定不同需要求溫度時(temp_set_driver,temp_set_passenger),整車TD負荷值按空調設定溫度最低的一側取值進行計算
Python實現
temp_set_driver = int(input("請輸入主駕溫度:"))
temp_set_passenger = int(input("請輸入副駕溫度:"))
if temp_set_driver <= temp_set_passenger:
output = temp_set_driver
else:
output = temp_set_passenger
print("自動空調設定溫度為:", output)
"""
我們使用了input()函數來獲取用戶輸入,并將其轉換成整數類型。然后,我們使用if else語句來判斷兩個變量的大小關系,并將最小值賦給output變量。
最后輸出自動空調設定溫度即可。例如,在上述示例中,當用戶輸入主駕溫度為20,副駕溫度為22時,程序會輸出“自動空調設定溫度為:20”,因為此時主駕溫度小于等于副駕溫度。而當用戶輸入主駕溫度為28,副駕溫度為24時,程序會輸出“自動空調設定溫度為:24”,因為此時主駕溫度大于副駕溫度。
"""
matlab function實現
function output = auto_temp_control(temp_set_driver, temp_set_passenger)
% 自動空調設定溫度取主駕和副駕溫度的最小值
if temp_set_driver <= temp_set_passenger
output = temp_set_driver;
else
output = temp_set_passenger;
end
fprintf("自動空調設定溫度為:%dn", output);
%{
我們定義了一個名為auto_temp_control的MATLAB函數,并接受兩個輸入參數:temp_set_driver和temp_set_passenger。然后,我們使用if else語句來判斷兩個變量的大小關系,并將最小值賦給output變量。
最后,我們使用fprintf()函數輸出自動空調設定溫度即可。例如,在上述示例中,當用戶輸入主駕溫度為20,副駕溫度為22時,程序會輸出“自動空調設定溫度為:20”,因為此時主駕溫度小于等于副駕溫度。而當用戶輸入主駕溫度為28,副駕溫度為24時,程序會輸出“自動空調設定溫度為:24”,因為此時主駕溫度大于副駕溫度。
%}
simulink實現
當然,simulink實現方法是為了體現If-Else條件語句的邏輯,采用了Switch模塊,單看此部分的實例,選用min模塊會更加方便
Stateflow實現
If-Else If-Else
If-Else If-Else通常用于處理多種情況的判斷,例如根據不同的條件執行不同的操作。以下是一個簡單的示例代碼(Python):
score = 85
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print("成績為:", grade)
舉例說明2
**當車內環境溫度(temp_incar)低于10℃時,空調開啟加熱模式(AC_state==heater),當車內環境溫度處于10℃到30℃時開啟空調自然風模式(AC_state==natural_wind),當車內環境溫度大于30℃時開啟制冷模式(AC_state==cooling)**
Python實現
temp_incar = float(input("請輸入車內環境溫度:"))
if temp_incar < 10:
AC_state = 'heater'
elif temp_incar >= 10 and temp_incar <= 30:
AC_state = 'natural_wind'
else:
AC_state = 'cooling'
print("空調狀態為:", AC_state)
matlab function實現
function AC_state = calculate_AC_state()
% 計算空調狀態
temp_incar = input("請輸入車內環境溫度:");
if temp_incar < 10
AC_state = 'heater';
elseif temp_incar >= 10 && temp_incar <= 30
AC_state = 'natural_wind';
else
AC_state = 'cooling';
end
fprintf('空調狀態為:%sn', AC_state);
end
%{
在這個示例中,我們首先定義了一個名為calculate_AC_state()的MATLAB函數,并使用input()函數提示用戶輸入車內環境溫度。然后,我們使用If-Else If-Else深層次邏輯來根據車內環境溫度計算出對應的空調狀態,與之前的Python代碼相同。最后,我們使用fprintf()函數輸出計算出的空調狀態。
當你調用該函數時,程序會等待用戶輸入車內環境溫度,并根據輸入的值計算出對應的空調狀態。
%}
simulink實現
如果執行語句只是簡單的賦值,使用 switch 模塊即可,如果涉及到更復雜的計算,應避免頻繁使用開關塊進行條件分岔,可考慮使用 If 以及 If Action Subsystem 模塊,但是這個"復雜"也很難定義。對于 Switch來說,通常會約束一個層疊的上限,比如三層,如果 switch 模塊層層疊疊層級非常多也可以考慮用子系統分別“包裹”起來,如果沒有狀態量的話,最好就不要用 If Action Subsystem模塊,理論上 Stateflow,Simulink 以及 MATLAB Function 幾乎都可以完成相同的模型,只是要根據應用場合和使用習慣加以取舍。
使用 If 以及 If Action Subsystem 模塊對上面的switch模塊進行改造,如下:
在Simulink中,If
模塊和If Action Subsystem
模塊組合可以用于實現多個條件分支邏輯。
- If Action Subsystem 模塊是經過預先配置的 Subsystem模塊,可以作為一個起點,用來創建由 If模塊控制執行的子系統。If 模塊計算邏輯表達式,然后根據計算結果輸出動作信號。子系統的執行由放置在子系統內部的 Action Port模塊控制;
- If 模塊以及包含 Action Port 模塊的 If Action Subsystem 模塊實現 if-else 邏輯來控制子系統的執行。有關使用 If 模塊的示例,請參閱 If 執行子系統;
- If 模塊從一組子系統中選擇 If Action Subsystem 模塊的執行。無論 If 模塊選擇哪個子系統,您都可以使用 Merge模塊創建單個信號;
- If Action Subsystem 模塊中的所有模塊必須以與驅動 If 模塊相同的速率執行。您可以通過將每個模塊的采樣時間參數設置為繼承
-1
或與 If 模塊采樣時間相同的值來滿足此要求;
Stateflow實現
Switch - Case
在Python中,switch-case
結構并不是一種原生的語言結構。但我們可以使用其他方式來實現類似的功能。
一種常見的方法是使用字典(dictionary)和函數映射來模擬switch-case
結構。具體步驟如下:
- 創建一個字典,將每個條件對應的操作函數作為值存儲在其中。
- 根據輸入信號選擇相應的操作函數,并執行它。
以下是一個使用字典和函數映射實現switch-case
結構的示例代碼:
def case_1():
print("Case 1")
def case_2():
print("Case 2")
def case_3():
print("Case 3")
# 創建字典
cases = {
1: case_1,
2: case_2,
3: case_3
}
# 輸入信號
u = 2
# 根據輸入信號選擇相應的操作函數,并執行它
if u in cases:
cases[u]()
else:
print("Invalid input")
在上述代碼中,我們首先定義了三個操作函數case_1()
、case_2()
和case_3()
,分別對應三種情況。然后,我們創建了一個字典cases
,將每個條件對應的操作函數作為值存儲在其中。最后,根據輸入信號選擇相應的操作函數,并執行它。
既然python尚不支持Switch-Case,那我們先用一個C代碼示例展示Switch-Case語法結構吧
#include < stdio.h >
int main() {
int choice;
printf("Please select an option:n");
printf("1. Option 1n");
printf("2. Option 2n");
printf("3. Option 3n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("You selected Option 1.n");
break;
case 2:
printf("You selected Option 2.n");
break;
case 3:
printf("You selected Option 3.n");
break;
default:
printf("Invalid input.n");
break;
}
return 0;
}
/*
在上述代碼中,我們首先輸出一個菜單,讓用戶選擇一個選項。然后,我們使用switch-case結構來根據用戶的選擇執行相應的操作。如果用戶輸入了無效的選項,則會輸出“Invalid input.”。
這個示例代碼可以用于各種需要用戶交互的場景,例如命令行工具、控制臺程序等。
*/
閑話休提,我們接著舉例說明Switch-Case語句如何用simulink實現
舉例說明3
**空調吹風模式具有多種狀態,AC控制器需要把不同吹風模式反饋給大屏控制器用于狀態顯示,AC_flow_state=0x0時,AC_state=’face’;AC_flow_state=0x1時,AC_state=’foot’;AC_flow_state=0x2時,AC_state=’defrost’**
C代碼實現
#include < stdio.h >
int main() {
int AC_flow_state = 1;
char AC_state[10];
switch (AC_flow_state) {
case 0:
sprintf(AC_state, "face");
break;
case 1:
sprintf(AC_state, "foot");
break;
case 2:
sprintf(AC_state, "defrost");
break;
default:
printf("Invalid input.n");
return -1;
}
printf("The AC state is %s.n", AC_state);
return 0;
}
/*
在上述代碼中,我們首先定義了一個整型變量AC_flow_state表示空調吹風模式狀態。然后,我們使用switch-case結構根據不同的狀態值來設置字符串類型的變量AC_state。最后,我們輸出AC_state的值。
需要注意的是,在default分支中,我們輸出了“Invalid input.”并返回-1,這是為了防止程序出現未知錯誤。
char AC_state[10]是一個字符數組,用于存儲空調吹風模式的狀態。在這個例子中,我們將其定義為長度為10的數組,因為最長的狀態字符串"defrost"有7個字符,再加上結尾符?,所以需要分配至少8個字節的空間。
*/
matlab function代碼實現
function AC_state = get_AC_state(AC_flow_state)
% This function returns the corresponding AC state based on the input flow state.
switch AC_flow_state
case 0
AC_state = 'face';
case 1
AC_state = 'foot';
case 2
AC_state = 'defrost';
otherwise
error('Invalid input.');
end
fprintf('The AC state is %s.n', AC_state);
end
%{
在上述代碼中,我們首先定義了一個MATLAB函數get_AC_state(),它接受一個整型參數AC_flow_state表示空調吹風模式狀態。然后,我們使用switch-case結構根據不同的狀態值來設置字符串類型的變量AC_state
}%
simulink實現
Stateflow實現
而對于 Stateflow 來說,不管是if-else還是switch-case,其實都是流程圖。所以就算你按照switch-case的邏輯畫了出來,生成的代碼依舊是if-else形式的。
所以需要我們稍微配置一下:模型設置→代碼生成→代碼風格→勾選convert if-elseif-else patterns to switch case
-
驅動器
+關注
關注
53文章
8256瀏覽量
146593 -
控制器
+關注
關注
112文章
16396瀏覽量
178512 -
自動控制系統
+關注
關注
1文章
192瀏覽量
19416 -
python
+關注
關注
56文章
4798瀏覽量
84810 -
simulink仿真
+關注
關注
0文章
75瀏覽量
8584
發布評論請先 登錄
相關推薦
評論