# 第1-5节课后拓展题目

#1.1、给一个整数a,统计出a在二进制表示下1的个数
while True:
try:
a = int(input("请输入一个整数："))
a1 = bin(a)
break
except ValueError:
count = 0
for i in range(len(a1)):
if a1[i] == '1':
count +=1
else:
continue
print(count)

#1.2、给一个整数a,统计出a在二进制表示下1的个数
while True:
try:
a = int(input("请输入一个整数："))
break
except ValueError:
print(bin(a).count('1'))
>>

5

5

#2、单身情歌
a = input("请输入一段字符串")
#循环遍历
for i in range(len(a)-3):
#出现L或l字符，开始查询
if a[i] == 'L' or a[i] == 'l':
#匹配字符
if a[i:i+4] == 'LOVE'or a[i:i+4] == 'love':
print("LOVE")
exit()
else:
continue
else:
continue
#未匹配到字符
print("SINGLE")
>>

SINGLE
>>

LOVE
#统计山峰个数问题
h = [0.9,1.2,1.22,1.1,1.6,0.99,2,2,2,2,1,0.9]
count =0
#消除重叠相邻数据
i = 0
while i<(len(h)-1):
if h[i] != h[i+1]:
i+=1
else:
h.pop(i+1)
print("h[]:",h)
#统计无重叠数据的山峰个数
for j in range(1,len(h)-2):
if h[j]>h[j-1] and h[j]>h[j+1]:
count +=1
else:
continue
print("count:",count)
>>
h[]: [0.9, 1.2, 1.22, 1.1, 1.6, 0.99, 2, 1, 0.9]
count: 3

"""-------------------------------------------"""
#定义函数，sum_digit()
"""求输入整形数字及相应进制，求各位数字之和"""
def sum_digit(number, number_scale):
sum = 0
while True:
if number > number_scale:
sum = sum + (number % number_scale)
number = int((number / number_scale))
else:
sum += number
break
return sum
#4、判断是否是Py类型数据（16、12、10进制数位之和相等）
try:
n = input("请输入一整型数据:::::")
digit_solu = int(n)
print(digit_solu)
sum_int = 0
sum_duo = 0
sum_hex = 0
sum_int = sum_digit(digit_solu,12)
sum_duo = sum_digit(digit_solu,10)
sum_hex = sum_digit(digit_solu,16)
if sum_int == sum_duo == sum_hex:
print("Yes")
else:
print("No")
except ValueError:
>>

2992
Yes
0位单位不显示，位阶中不为0，显示位阶单位，如：单位，万、亿

#借鉴上题4中思路
"""求输入整形数字，求其相应进制数，无符号返回,最高支持到16进制"""
def scale_digit(number,number_scale):
newscale_number = []
sig = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F']
while True:
if number > number_scale:
newscale_number.append(sig[number % number_scale])
number = int(number / number_scale)
else:
newscale_number.append(sig[number])
newscale_number.reverse()
break
return newscale_number
#5、银行的秘密
capital=[u'拾',u'佰',u'仟',u'万',u'拾',u'佰',u'仟',u'亿',u'拾',u'佰',u'仟',u'']
bytes = [u'',u'壹',u'贰',u'叁',u'肆',u'伍',u'陆',u'柒',u'捌',u'玖']
digit = []
digit_reversed = []
try:
money = []
money_number = []
money_number1 = input("请输入需要打印钱数:")
#判断输入是否为负数，是进行去符号处理
#如果输入是负数，先去符号处理
if money_number1[0] == '-':
money_number = money_number1[1:]
money_number = int(money_number)
else:
money_number = int(money_number1)
#求十进制各位数值的列表
digit = scale_digit(money_number,10)
digit_reversed = digit[::-1]
#enumerate()将数据对象组合为数据和数据下标的索引序列；
#实现大写内容的按序排列
for ide,cell in enumerate(digit_reversed):
#实现有位数为0时，该位单位的不显示
if cell !=0:
money.append(capital[ide - 1])
money.append(bytes[cell])
elif cell == 0 and (ide%4 == 0):
#位阶全为零时，消除位阶单位的显示：eg:1200001200 壹拾贰亿万壹仟贰佰圆
for i in digit_reversed[ide:ide+4]:
#判断位阶开始起的4位是否全为0，是则不增加位阶单位
if i == 0:
continue
#否，则增加
else:
money.append(capital[ide-1])
break
else:
continue
#增加最后‘圆的显示’
money[0:0] = (u'圆')
#判断输入是负数，最后增加符号位标志
if money_number1[0] == '-':
money.append(u'负')
#输出显示
for i in money[::-1]:
print(i,end='')
except ValueError: