pythonrgb高精度浮点运算类型_python实现RGB字符串,按24位对齐后输出对应Integer行数字...
題目來源:
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
參考:參考博客
總結
以上是生活随笔為你收集整理的pythonrgb高精度浮点运算类型_python实现RGB字符串,按24位对齐后输出对应Integer行数字...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ccs读取dat文件c语言程序,TMS3
- 下一篇: C++面向对象思想 两条直线交点计算