题目一:判断数字打印
输入一个十进制的正整数数字
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))