second_week_assignment

题目一:判断数字打印

输入一个十进制的正整数数字

1、lstrip(‘0’)解决输入数字左边全部为0的问题
2、通过len()函数判断位数,len()函数时间复杂度O(1)
3、打印每一位数字及其重复的次数的解题思路:详情见题目六
4、尾部打印,解决字符串从低位到高位的问题

# 判断数字并打印
string = str(input('Please input a number: ')).lstrip('0')   #'01223334048342342'
length = len(string)
print('this number of the length is {}'.format(length))

lst = [1] * length
print()

for i in range(length-1):     
    for j in range(i,length-1):   
        if lst[j+1] == 1:     # **注意这个条件,其他条件有误  
            if string[i] == string[j+1]:  
                lst[i] += 1     
                lst[j+1] = 0   
                
for i in range(length):
    if lst[i] > 1:
        print('{} is repeat,reprtition of this nubmer is {}'.format(string[i],lst[i]))
        
for i in range(length):    
    if lst[i] ==1:
        print('{} not\'s repeat, only one'.format(string[i]))
print()

lst = []
for i in range(-1,-length-1,-1):
    lst.append(int(string[i]))
     
print('this number goes from low to high {}'.format(lst))

题目二:判断数字并排版打印

输入5个十进制正整数数字

1、len()函数,打印每个数字的位数
2、升序排列(冒泡法、‘简单选择排序’)

#判断数字位数并排序打印
lst = []

while len(lst) < 5:
    s = str(input('Please input number:')).strip('0')
    lst.append(s)

for i in lst:
    print('the length of the {}:'.format(i),len(i))

length = len(lst)
lst = list(map(int,lst))

for i in range(length-1):
    maxindex = 0
    for j in range(length-i-1):
        #print(lst[maxindex])
        if lst[maxindex] < lst[j+1]:
            maxindex = j + 1
    lst[maxindex],lst[-i-1] = lst[-i-1],lst[maxindex]
                        
# for i in range(length-1):
#     flag = False
#     for j in range(length-i-1):
#         if lst[j] > lst[j+1]:
#             lst[j],lst[j+1] = lst[j+1],lst[j]
#             flag = True
        
#     if not flag:
#         break

print(lst)          

题目三:猴子吃桃

1、假设第一天摘了n个桃子,当天剩余 n = n // 2 -1
2、第二天剩余 n = n // 2 -1
3、第三天剩余 n = n // 2 -1

9、第九天剩余 n = n // 2 -1 实际上第9天已经剩余1,n = n // 2 -1
10、第十天剩余 n = 1 逆向换算 n = n // 2 -1 > n + 1 = n // 2 > 前一天n = (n + 1) * 2

# 猴子吃桃  
n = 1
for _ in range(9):
    n = (n + 1) * 2     # 错误:掉入了逻辑陷阱  n += (n+1) *)
print('The number of peaches the monkey picked is {}' .format(n))

题目四:杨辉三角前n项打印

1、根据杨辉三角的特性,直接生成所有需要的列表 -lst
2、生成的list,全部由1组成,解决head、tail为1的问题
3、从lst[1]开始,lst[0]和lst[1]相加,并且将和值赋值给lst[1][1],依次类推
4、从lst[1]开始,将和值依次赋值给下一项的[1,-1)

# 杨辉三角
triangle = int(input('Please input the length of triangle:'))
temp_lst = [1]
lst = []

for i in range(1,triangle+1):
    lst.append(temp_lst * i)
    
length = len(lst)

for i in range(1,length-1):   # length 超界,需要减1
    for j in range(i):  # 通过i控制j的左边界
        lst[i+1][j+1] = lst[i][j] + lst[i][j+1]

for i in range(length):   # 容器使用format居中打印会出错
    print(lst[i])

题目五:杨辉三角第n行第m个元素

1、C(n-1,m-1) = (n -1)! / ((m - 1)! * (n - m)!
2、将1 ~ n之间的所有阶乘放入列表,index从0开始,引用上一次的计算结果
3、列表index从0开始,n 和 m 需要减 1 ,使 n、m一一对应list里面的阶乘

# 杨辉三角第m行的第k个元素
n = int(input('Please input line of triangles:'))
m = int(input('Pleasa input the element of the n line'))
n = n - 1
m = m - 1
product = 1  # (n-1)!/(m-1)!*(n-1-m+1)!  -> (n-1)!/(m-1)!*(n-m)!
lst = []

for i in range(1,n+1):   # 如何利用到上一次的计算结果
    product *= i
    lst.append(product)

element_m = lst[n-1] / (lst[m-1] * lst[n-m-1])  
print(element_m)

题目六:随机产生10个数字

1、import random
通过循环random.randint() 前闭后闭 or random.randrange() 前闭后开
random.sample()抽取的样本不重复
2、重复数字解题思路:
a、生成辅助列表count_lst纪律数字重复次数 ,和lst一一对应,通过索引形成对应
b、因为数字肯定有本身,故初始count_lst的值全为1
c、第一位数字依次和后面的数字比较,如果相等,则该数字对应count_lst里面的计数加比较的数字计数减1,依次类推。
d、设定条件:下一个值的计数是否等于0,进入计数增减。否则,不进入,减少比较次数
e、设定条件 : 计数 > 1,重复。计数 == 1,不重复。计数为0,pass。以实现重复、不重复数字的打印

#随机产生10个数字
import random

lst = [1] * 10
count_lst = lst.copy()
length = len(lst)

for i in range(10):
    lst[i] = random.randint(1,20)

for i in range(length-1):
    for j in range(i,length-1):   # 注意左边界为i
        if count_lst[j+1] == 1:
            if lst[i] == lst[j+1]:
                count_lst[i] += 1
                count_lst[j+1] = 0

dup = 0
temp_lst1 = []
temp_lst2 = []
for i in range(length):
    if count_lst[i] > 1:
        temp_lst1.append(lst[i])
        temp_lst2.append(count_lst[i])
        dup += 1

print('The number of duplicate number is ',dup)
print('The duplicate numbers is {}'.format(temp_lst1))
print('The number of duplicate numbers {} '.format(temp_lst2))
print()

dup = 0
temp_lst1.clear()
temp_lst2.clear()

for i in range(length):
    if count_lst[i] == 1:
        temp_lst1.append(lst[i])
        temp_lst2.append(count_lst[i])
        dup += 1
        
print('numbers are not repeated ',dup)
print('number of numbers that are not repeated {}'.format(temp_lst1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值