python數據結構輸入輸出及控制和異常

前言:

python數據類型: python數據結構之數據類型.
今天我們主要來介紹一些內置函數,比如輸入輸出,控制,和異常的用法,尤其是輸出和控制,用的太多瞭,寫算法題,輸出數據格式問題,對以後都會很有幫助。

1. 輸入 input

程序經常需要與用戶進行交互,以獲得數據或者提供某種結果。Python 提供瞭一個函數,它使得我們可以要求用戶輸入數據並且返回一個字 符串的引用。這個函數就是 input

#input案例
a=input("請輸入你的名字:")
print('你的名字是:',a)

需要註意的是,input 函數返回的值是一個字符串,它包含用戶在提示字符串後面輸入的所有字符。如果需要將這個字符串轉換成其他類型,必須明確地提供類型轉換。在下面的語句中, 用戶輸入的字符串被轉換成瞭浮點數,以便於後續的算術處理。

type(a)
#結果為str
a=float(a)
type(a)
#結果為float

2. 輸出 print

2.1 普通輸出

print 函數為輸出 Python 程序的值提供瞭一種非常簡便的方法。它接受零個或者多個參數, 並且將單個空格作為默認分隔符來顯示結果。通過設置 sep 這一實際參數可以改變分隔符。此外,每一次打印都默認以換行符結尾。這一行為可以通過設置實際參數 end 來更改。下面是一些例子。

print('hello')
#結果:hello
print('hello','world')
#結果:hello world
print('hello','world',sep='***')#sep指定特定的分隔符
#結果:hello***world
print('hello','world',end='****')#end 設置結尾參數
#結果:hello world****

2.2 格式化輸出

在這裡插入圖片描述

表達式的左邊部分是模板(也叫格式化字符串),右邊部分則是一系列用於格式化字符串的值。 需要註意的是,右邊的值的個數與格式化字符串中%的個數一致。這些值將依次從左到右地被換入格式化字符串。
格式化字符串可以包含一個或者多個轉換聲明。轉換字符告訴格式化運算符,什麼類型的值會被插入到字符串中的相應位置。在上面的例子中,%s 聲明瞭一個字符串,%d 則聲明瞭一個整數。其他可能的類型聲明還包括 i、u、 f、e、g、c 和%,

具體如下表所示:

在這裡插入圖片描述

可以在%和格式化字符之間加入一個格式化修改符。格式化修改符可以根據給定的寬度對值 進行左對齊或者右對齊,也可以通過小數點之後的一些數字來指定寬度。

格式化修改符表如下:

在這裡插入圖片描述

讓我們來看看一些案例:

name="apple"
price=6 
print("the %s costs %d cent" %(name,price))
#結果:the apple costs 6 cent

print("The %+10s costs %5.2f cents" % (name,price))#+代表右對齊,10代表占用10個字符
#結果:The      apple costs  6.00 cents
print("The %+10s costs %10.2f cents" % (name,price))#10.2代表占用10個字符,並保留2位小數。
#結果:The      apple costs       6.00 cents
itemdict = {"item":"banana","cost":24}#使用字典傳遞參數
print("The %(item)s costs %(cost)7.1f cents" % itemdict)
#結果:The banana costs    24.0 cents

3. 控制語句

算法需要兩個重要的控制結構:迭代和分支。Python 通過多種方式支持這兩種控制結構。程序員可以根據需要選擇最有效的結構。對於迭代,Python 提供瞭標準的 while 語句以及非常強大的 for 語句。while 語句會在給定條件為真時重復執行一段代碼。

count=1
while count<=5:
    print("河南加油!")
    count+=1
#結果如下:
河南加油!
河南加油!
河南加油!
河南加油!
河南加油!

for item in '河南加油!':
    print(item)
# 結果如下
河
南
加
油
!

for i in range(5):
    print(i)
# 結果如下

0
1
2
3
4

#通過for語句輸出單個字符
wordlist = ['cat','dog','rabbit']
letterlist = []
for aword in wordlist:
    for aletter in aword:
        letterlist.append(aletter)
        
letterlist
#結果如下:
['c', 'a', 't', 'd', 'o', 'g', 'r', 'a', 'b', 'b', 'i', 't']

分支語句允許程序員進行詢問,然後根據結果,采取不同的行動。絕大多數的編程語言都提 供兩種有用的分支結構:ifelse if。以下是使用 ifelse 語句的一個簡單的二元分支示例。

import math
n=float(input("請輸入一個數"))
if n < 0:
       print("Sorry,")
else:
       print(math.sqrt(n))
#結果:請輸入一個數 3
# 1.7320508075688772

#多條件分支
score=float(input("請輸入一個數"))
if score >= 90:
       print('A')
elif score >= 80:
       print('B')
elif score >= 70:
       print('C')
elif score >= 60:
       print('D')
else:
       print('F')
# 請輸入一個數 90 A

列表可以通過使用迭代結構和分支結構來創建。這種方式被稱為列表解析式。通過列表解析式,可以根據一些處理和分支標準輕松創建列表。舉例來說,如果想創建一個包含前 10 個完全平方數的列表,可以使用以下的 for 語句。

sqlist = [x*x for x in range(1,11) if x%2 != 0]
# [1, 9, 25, 49, 81]
[ch.upper() for ch in 'comprehension' if ch not in 'aeiou']
#['C', 'M', 'P', 'R', 'H', 'N', 'S', 'N']

4. 異常處理

在編寫程序時通常會遇到兩種錯誤:

  • 第一種是語法錯誤,也就是說,程序員在編寫語句或者表達式時出錯。例如,在寫 for 語句時忘記加冒號。
  • 第二種是邏輯錯誤,即程序能執行完成但返回瞭錯誤的結果。這可能是由於算法本身有錯, 或者程序員沒有正確地實現算法。有時,邏輯錯誤會導致諸如除以 0、越界訪問列表等非常嚴重的情況。這些邏輯錯誤會導致運行時錯誤,進而導致程序終止運行。通常,這些運行時錯誤被稱為異常。

當異常發生時,我們稱程序“拋出”異常。可以用 try 語句來“處理”被拋出的異常。

  • 可以在 try 語句塊中調用 print 函數來處理這個異常。對應的 except 語句塊“捕捉”到 這個異常,並且為用戶打印一條提示消息。
  • except 會捕捉到 sqrt 拋出的異常並打印提示消息,然後會使用對應數字的絕對值來保證 sqrt 的參數非負。這意味著程序並不會終止,而是繼續執行後續語句。
anumber = int(input("Please enter an integer "))
try:
     print(math.sqrt(anumber))
except:
     print("Bad Value for square root")
     print("Using absolute value instead")
     print(math.sqrt(abs(anumber)))

結果如下:

在這裡插入圖片描述

也可以使用 raise 語句來觸發運行時異常。例如,可以先檢查值是否為負,並在值為負時拋出異常,而不是給 sqrt 函數提供負數。下面的代碼段顯示瞭創建新的 RuntimeError 異常的結果。註意,程序仍然會終止,但是導致其終止的異常是由我們自己手動創建的。

anumber=-21
if anumber < 0:
    raise RuntimeError("You can't use a negative number")
else:
    print(math.sqrt(anumber))

結果如下:

在這裡插入圖片描述

參考資料:

  • 《python數據結構與算法》
  • 《大話數據結構》

到此這篇關於python數據結構輸入輸出及控制和異常的文章就介紹到這瞭,更多相關python數據結構內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: