第1-5节课后拓展题目


#1.1、给一个整数a,统计出a在二进制表示下1的个数
while True:
    try:
        a = int(input("请输入一个整数:"))
        a1 = bin(a)
        break
    except ValueError:
        print("Please input a integer!")
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("Please input a integer!")
print(bin(a).count('1'))
>>
请输入一个整数:333
5
请输入一个整数:333
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")
>>
请输入一段字符串fasdfascaeslllvdsf
SINGLE
>>
请输入一段字符串asfsfdsloveafad
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:
     print("Please input a integer!")
>>
请输入一整型数据:::::2992
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:
    print("Please input a integer!")
>>
请输入需要打印钱数:-1200001200
负壹拾贰亿壹仟贰佰圆

猜你喜欢

转载自blog.csdn.net/sdhotn/article/details/80323402
今日推荐