天天看點

整數進制轉換與溫度轉換——字元串格式化format()的用法實踐

題目一    整數的進制轉換

給定一個整數數字0x1010,請依次輸出Python語言中十六進制、十進制、八進制和二進制表示形式,使用英文逗号分隔。

初試錯誤:

print('{:x},{}{:o},{:b}'.format(0x1010))
           
整數進制轉換與溫度轉換——字元串格式化format()的用法實踐

正确結果:

print("0x{0:x},{0},0o{0:o},0b{0:b}".format(0x1010))
           

初試失敗之要點記錄:

1、str.format()方法中的參數索引号要寫進占位符/槽中

2、進制的引導符号需要添加數字前

進制種類 引導符号 聯想記憶
十進制
二進制 0b或0B binary
八進制 0o或0O 橫躺8
十六進制 0x或0X six

‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬題目二   溫度轉換溫度的刻畫有兩個不同體系:攝氏度(Celsius)和華氏度(Fabrenheit)。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬請編寫程式将使用者輸入華氏度轉換為攝氏度,或将輸入的攝氏度轉換為華氏度。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬轉換算法如下:(C表示攝氏度、F表示華氏度)‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

C = ( F - 32 ) / 1.8‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

F = C * 1.8 + 32‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

要求如下:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

(1) 輸入輸出的攝氏度可采用大小寫字母C結尾,溫度可以是整數或小數,如:12.34C指攝氏度12.34度;‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

(2) 輸入輸出的華氏度可采用大小寫字母F結尾,溫度可以是整數或小數,如:87.65F指攝氏度87.65度;‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

(3) 輸出保留小數點後兩位,輸入格式錯誤時,輸出提示:輸入格式錯誤;‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

(4) 使用input()獲得測試用例輸入時,不要增加提示字元串。

初試失敗:

s = input()

#數字結果——!此處的條件語句文法錯誤!
result = eval(s[:-1])*1.8+32 if 'C'or'c'in s else (eval(s[:-1])-32 )/1.8#s[m:n]隻取到n-1
#字元機關
unit = 'F' if 'C'or'c'in s else 'C'#注意機關轉換

print('{0:.2f}{1}'.format(result,unit))
           

定位到 if <條件>文法錯誤,進行修改:清單['C','c']也可以寫作字元串'Cc'

s = input()

#數字結果——!此處的條件語句文法錯誤!
result = eval(s[:-1])*1.8+32 if s[-1] in ['C','c'] else (eval(s[:-1])-32 )/1.8#s[m:n]隻取到n-1
#字元機關
unit = 'F' if s[-1] in ['C','c'] else 'C'#注意機關轉換

print('{0:.2f}{1}'.format(result,unit))
           

添加異常提示,最終正确結果:

s = input()

#數字結果——!此處的條件語句文法錯誤!
result = eval(s[:-1])*1.8+32 if s[-1] in ['C','c'] else (eval(s[:-1])-32 )/1.8#s[m:n]隻取到n-1
#字元機關
unit = 'F' if s[-1] in ['C','c'] else 'C'#注意機關轉換

#仔細審題,注意輸入錯誤時列印提示
print('輸入格式錯誤') if s[-1] not in ['C','c','F','f'] else print('{0:.2f}{1}'.format(result,unit))
           

要點記錄:

1、二分支結構的簡單表達式:<表達式1> if <條件> else <表達式2> 

<表達式2> 中省略指派等式,隻寫值

#注意<表達式2>中 token = 省略
token = "偶數" if s % 2 == 0  else "奇數" 
           

2、str.format() 數字格式化

str.format()方法中的參數可以是字元串或數字格式,但要與占位符/槽中的操作比對。

例如以下代碼中,a隻能取數字,否則報錯:ValueError: Unknown format code 'f' for object of type 'str'

‘{:.2f}’.format(a)
           
print('{0:.2f}{1}'.format(12.345,'米'))
           
整數進制轉換與溫度轉換——字元串格式化format()的用法實踐

注意,這裡四舍五入了!