Python之迴圈的使用

来源:https://www.cnblogs.com/gongyu2018/archive/2018/04/11/8785101.html
-Advertisement-
Play Games

最近在學Python,嘗試著用for和while迴圈做一個簡單的學生管理系統,現在遇到的問題是沒法限定輸入的數據類型和從for迴圈中跳出 第一個限定是:如果沒有沒有輸入整數,程式直接報錯,在其中使用了轉換,代碼18行 第二個跳出for迴圈:目的是要對錄入的信息進行一個初步的判斷,確保關鍵信息不重覆 ...


最近在學Python,嘗試著用for和while迴圈做一個簡單的學生管理系統,現在遇到的問題是沒法限定輸入的數據類型和從for迴圈中跳出

  第一個限定是:如果沒有沒有輸入整數,程式直接報錯,在其中使用了轉換,代碼18行

  第二個跳出for迴圈:目的是要對錄入的信息進行一個初步的判斷,確保關鍵信息不重覆

這個管理系統,涉及的到就是先定義字典grade,再將字典grade使用append()函數添加到列表student,然後通過for迴圈遍曆數組,將

字典取出來sname,最後對比輸入的名字和字典sname中“姓名”鍵(key)對應的值(value),這樣就做到了數據的匹配查詢

  1 '''如果是將這個系統改成績查詢的,又該怎麼做,字典的話如何進行疊加'''
  2 
  3             #定義信息列表
  4 
  5 print('歡迎進入學生成績管理系統!\n\t************\n請查看你能進行的操作\n\t************')
  6 menu = ('1.錄入','2.查詢','3.修改','4.刪除','5.預覽','6.退出')
  7 orderid = (1,2,3,4,5,6)    #操作的步驟選擇
  8 student = []
  9 a = 1
 10 m = 0
 11 n = 0
 12 while a == 1:                        #目的是使操作一直在使用,迴圈,最後不操作退出
 13     for opration in menu:
 14         print(opration)
 15     order = input('請輸入序號,進行你想要的操作:')
 16     '''while True:
 17         order = input('請輸入序號,進行你想要的操作:')
 18         try:
 19             order = int(order)
 20             break
 21         except:
 22             print("pls enter number")
 23             continue'''
 24     #order = input('請輸入序號,進行你想要的操作:')#限制輸入的數據類型
 25     if order.isdigit():
 26         order = int(order)
 27     else:
 28         print('請輸入正確的數字')
 29         continue
 30 
 31     if int(order) in orderid:
 32 
 33         while int(order) == 1:
 34             valid = 0
 35             while not valid:
 36                 valid = 1
 37                 name = input('請輸入學生的姓名:')# 數據錄入#需要解決重覆錄入的問題
 38                 for stu_name in student:
 39                     if name == stu_name['姓名']:
 40                         stu_id = input('該學生已經錄入信息,請確認是否重覆錄入,並比較學號')
 41                         if stu_id == stu_name['學號']:
 42                             print('重覆錄入!請錄入下一個')
 43                             valid = 0
 44                         break
 45 
 46             print('請繼續接下來的信息錄入!')
 47 
 48             id = input('請輸入學生號:')
 49             classid = input('請輸入學生的班級:')
 50             Chinese = float(input('請輸入語文成績:'))
 51             Math = float(input('請輸入數學成績:'))
 52             English = float(input('請輸入英語成績:'))
 53             Physical = float(input('請輸入物理成績:'))
 54             Chemistry = float(input('請輸入化學成績:'))
 55             Biological = float(input('請輸入生物成績:'))
 56             Score = round((Chinese * 3 + Math * 3 + English * 3 + Physical * 2 + Chemistry * 2 + Biological * 2) / 15,2)
 57 
 58             #定義一個新的字典
 59             grade  = {}
 60             grade['姓名'] = name
 61             grade['學號'] = id
 62             grade['班級'] = classid
 63             grade['語文'] = Chinese
 64             grade['數學'] = Math
 65             grade['英語'] = English
 66             grade['物理'] = Physical
 67             grade['化學'] = Chemistry
 68             grade['生物'] = Biological
 69             grade['加權總分'] = Score
 70 
 71             # 將一個字典,添加到列表中
 72             student.append(grade)
 73 
 74             print('你已經成功錄入了一份信息,繼續錄入請按Y,返回菜單請按N')
 75             exit = input()
 76             if exit == 'y':
 77                 continue
 78             else:
 79                 break
 80 
 81 
 82         while int(order) == 2:
 83 
 84             name = input("請輸入你要查找的學生的姓名:")
 85             n += 1
 86             if n > 2:
 87                 print('你已經重覆輸錯三次,請確認姓名再進行查詢操作')
 88                 n = 0
 89                 continue
 90 
 91             t_name = 0#輸入正確標誌位
 92 
 93             for sname in student:
 94                 if name == sname['姓名']:
 95                     print('該同學的記錄是:',sname)
 96                     #print('%s同學的記錄是:學號%s 班級%s 語文%.2f 數學%.2f 英語%.2f 物理%.2f 化學%.2f 生物%.2f '
 97                           #'加權總分%.2f' % (name,sname['學號'],sname['班級'],sname['語文'],sname['數學'],sname['物理'],sname['化學'],sname['生物'],sname['加權總分']))
 98 
 99                     t_name = 1
100 
101                     break
102 
103             if t_name == 0:
104                 exit = input('查詢錯誤,請重確認要查詢的學生姓名,退回主菜單請按N')
105                 if exit == 'n':
106                     break
107                 continue
108             else:
109                 exit = input('查詢成功,輸入名字繼續查詢,退回主菜單請按N')
110                 if exit == 'n':
111                     break
112                 continue
113 
114 
115         while int(order) == 3:
116             name = input("請輸入你要修改信息的學生的姓名:")
117 
118             t_name = 0  # 輸入正確標誌位
119 
120             for sname in student:
121                 if name == sname['姓名']:
122                     id = input('請輸入學生號:')
123                     classid = input('請輸入學生的班級:')
124                     Chinese = float(input('請輸入語文成績:'))
125                     Math = float(input('請輸入數學成績:'))
126                     English = float(input('請輸入英語成績:'))
127                     Physical = float(input('請輸入物理成績:'))
128                     Chemistry = float(input('請輸入化學成績:'))
129                     Biological = float(input('請輸入生物成績:'))
130                     Score = round(
131                         (Chinese * 3 + Math * 3 + English * 3 + Physical * 2 + Chemistry * 2 + Biological * 2) / 15, 2)
132 
133                     grade['姓名'] = name
134                     grade['學號'] = id
135                     grade['班級'] = classid
136                     grade['語文'] = Chinese
137                     grade['數學'] = Math
138                     grade['英語'] = English
139                     grade['物理'] = Physical
140                     grade['化學'] = Chemistry
141                     grade['生物'] = Biological
142                     grade['加權總分'] = Score
143 
144                     t_name = 1
145                     break
146 
147             if t_name == 0:
148                 exit = input('查詢錯誤,請重確認要修改的學生姓名,退回主菜單請按N')
149                 if exit == 'n':
150                     break
151                 continue
152             else:
153                 exit = input('查詢成功,輸入名字繼續查詢,退回主菜單請按N')
154                 if exit == 'n':
155                     break
156                 continue
157 
158 
159         while int(order) == 4:
160 
161             name = input("請輸入你要刪除信息的學生的姓名:")
162 
163             t_name = 0  # 輸入正確標誌位
164 
165             for sname in student:
166                 if name == sname['姓名']:
167                     student.remove(sname)
168                     t_name = 1
169                     break
170             if t_name == 0:
171                 exit = input('查詢錯誤,請重確認要刪除的學生姓名,退回主菜單請按N')
172                 if exit == 'n':
173                     break
174                 continue
175             else:
176                 exit = input('查詢成功,輸入名字繼續刪除,退回主菜單請按N')
177                 if exit == 'n':
178                     break
179                 continue
180 
181         while int(order) == 5:
182             if len(student) == 0:
183                 print('系統裡面沒有數據,請錄數據')
184                 break
185             else:
186                 for s_name in student:
187                     print(s_name)
188             exit = input('預覽成功!按任意鍵返回主菜單\n')
189             break
190 
191         if int(order) == 6:
192             print('感謝你的使用,再見!\n')
193             break
194 
195 
196     else:
197         print('輸入有誤,請輸入序號1~6')
198         m += 1
199         if m > 2:
200             print('你已經重覆輸錯三次,結束本次操作')
201             break
202         continue
View Code

解決問題一的方式:(1)加入一個死迴圈,強制輸入整數

1 while True:
2         order = input('請輸入序號,進行你想要的操作:')
3         try:
4             order = int(order)
5             break
6         except:
7             print("pls enter number")
8             continue上一個

  (2)加入一個字元串檢測:isdigit()函數檢測輸入的字元串是不是數字,是的話返回True,否則繼續上一個迴圈

order = input('請輸入序號,進行你想要的操作:')

if order.isdigit():
    order = int(order)
else:
    print('請輸入正確的數字')
    continue
問題二,跳出for迴圈,在外面在套一層while迴圈,加入標誌位
 1         while int(order) == 1:
 2             valid = 0
 3             while not valid:
 4                 valid = 1
 5                 name = input('請輸入學生的姓名:')# 數據錄入#需要解決重覆錄入的問題
 6                 for stu_name in student:
 7                     if name == stu_name['姓名']:
 8                         stu_id = input('該學生已經錄入信息,請確認是否重覆錄入,並比較學號')
 9                         if stu_id == stu_name['學號']:
10                             print('重覆錄入!請錄入下一個')
11                             valid = 0
12                         break
13 
14             print('請繼續接下來的信息錄入!')

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、場景描述 代理在生活中並不少見,租房子需要找中介,打官司需要找律師,很多事情我們需要找專業人士代理我們做,另一方面,中介和律師也代理了房東、法律程式與我們打交道。 當然,設計模式中的代理與廣義的代理還是有所差別的;A對象調用B對象提供的服務X時,使用代理模式的前提是B對象實現了IB介面,通過介面 ...
  • 前不久需要開闢一個防火牆,所以要畫一個系統圖,其中有個箭頭連線需要設置一下,其它都還簡單算是(托拉拽)。用的是微軟的office-Visio工具: 點home的connector,前提已經選好一條畫好的連接線,然後選擇line下的Arrows的箭頭樣式。 ...
  • Struts1,一個中心控制器,XML定製轉向URL,Action處理邏輯。 Struts2,工作流程,用攔截器攔截用戶請求,把用戶的業務邏輯控制器和Servlet分離,生成控制器代理回調業務控制器的execute方法處理用戶請求,再通過處理用戶請求後的返回值進行用戶視圖呈現。 (拋棄struts1 ...
  • I am having some trouble getting the JSONCPP Library into Visual Studio. I have downloaded the library I am just unsure how to import it into my proje ...
  • 1. 使用方法 synchronized 是 java 中最常用的保證線程安全的方式,synchronized 的作用主要有三方面: 語義上來講,synchronized主要有三種用法: 2. 實現原理 2.1. 監視器鎖 synchronized 同步代碼塊的語義底層是基於對象內部的監視器鎖(mo ...
  • 安裝qrcode庫和PIL庫 ========== 在命令行中分別輸入pip install qrcode 和pip install pillow 導入庫格式如下: 下麵以生成一個帶圖標的二維碼為例 運行效果如下 上面這個例子是我之前看別人的,但是卻運行不了,之後自己修改過後的程式,如有侵犯立刻刪除 ...
  • 學習目的: 解決AJAX請求的爬蟲,網頁解析庫的學習,MongoDB的簡單應用 正式步驟 Step1:流程分析 Step2:實例分析 1. 打開今日頭條搜索頁,搜索“中超”,查看頁面的請求方法為:GET 2. 創建一個Python文件:spider_ajax.py 3.網站url信息獲取 4. 列印 ...
  • Java基礎 首先,來看一下Java基礎知識圖解,以下便是在java學習中我們需要學習設計到的一些知識(當然不是很完全)。 這些都是接下來在以後的學習中我們會學到的一些知識。 1 關鍵字 首次先來學習一下Java中的關鍵字,關鍵字的定義是:被java語言賦予了特殊含義,用作專門用途的一些單詞,其特點 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...