題目來源:
2021屆位元組跳動演算法崗筆試題
題目描述:
實作一個RGB字串(如:rgb(0, 50,255) ),按24位數字對齊后輸出對應Integer型數字,R為高位,B為低位,
例如:輸入 rgb(0, 50,255) ,輸出13055
輸入描述:
字串(如:rgb(0, 50,255) )
輸出描述:
輸出 number (如:11111)
示例1
輸入
rgb(192, 192, 192)
輸出
12632256
代碼
話不多說直接上代碼
思路:題目要求按24位對齊轉換,由此想到先把對應r,g,b位的Integer數字轉換成16進制,因為r,g,b的取值范圍是0-255,大于255也會按255算,正好對應十六進制0x00-0xff,一位16進制又對應4位二進制,六個16進制剛好是24位,之后把轉換好的16進制轉換為int型就可以了,
當然你也可以把r,g,b位的Integer數字直接轉換成三個8位的二進制這樣來算,
小提示:
格式化輸出 %
%o —— oct 八進制
%d —— dec 十進制
%x —— hex 十六進制
% 不支持二進制轉換,
要想實作直接輸出二進制可使用 format 函式來實作,或者自己根據需求撰寫個二進制轉換函式,
def RGB_to_Int(Red,Green,Blue):
r, g, b = (Red, Green, Blue)
packed = int('%02x%02x%02x' % (r, g, b), 16)
print(packed)
if __name__ == "__main__":
arr = input("輸入陣列:")
#截取字串
str=arr[4:-1]
#獲取其中的數字
str2=str.split(',')
#把str轉為int,.strip()去除字串首尾空格
Red=int(str2[0].strip())
Green=int(str2[1].strip())
Blue=int(str2[2].strip())
#呼叫
RGB_to_Int(Red,Green,Blue)

參考:RGB Int to RGB - Python
容易有疑問的地方
1.字串中 百分號02x 是什么意思
1)首先該結構符合字串格式化輸出的形式:
- “%x%x%x” % (r,g,b)
- 其中 %x 是十六進制整數
2)其次 %02x 是對 %x 的進一步補充:
% 作為格式化輸出的格式符,可以用如下的方式進一步控制:
- %[(name)][flags][width].[precision]typecode
- (name)為命名;
- flags可以有+,-,’ ‘或0,+表示右對齊,-表示左對齊,’
'為一個空格,表示在正數的左側填充一個空格,從而與負數對齊,0表示使用0填充; - width表示顯示寬度;
- precision表示小數點后精度;
所以此處 %02x 表示寬度為 2 的十六進制整數、不夠 2 位用 0 填充
3)再回顧整體的 “#%02x%02x%02x” 其實就是類似 “#b7bb96” 等 rgb 顏色資料
參考:參考博客
2.%02x與%2x 之間的區別
1)輸出最小寬度
- 用十進制整數來表示輸出的最少位數,若實際位數多于定義的寬度,則按實際位數輸出,若實際位數少于定義的寬度則補以空格或0(當最小寬度數值以0開頭時),
- X 表示以十六進制形式輸出
- 02 表示不足兩位,前面補0輸出;如果超過兩位,則實際輸出
舉例:
printf("%02X", 0x345); //列印出:345
printf("%02X", 0x6); //列印出:06
- 而如果直接寫為 %2x,資料不足兩位時,實際輸出,即不額外補0輸出; 如果超過兩位,則實際輸出,
printf("%2X", 0x345); //列印出:345
printf("%2X", 0x6); //列印出:6
參考:參考博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/193724.html
標籤:其他
