在day08
下创建一个名为11-练习题
的代码文件。
1、数字组合:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
num = 0
for i in range(1, 5):
for j in range(1, 5):
for z in range(1, 5):
if i != j and i != z and j != z:
print(i * 100 + j * 10 + z, end=' ')
num += 1
print(f'符合条件的一共{num}个')
2、A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。 B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 C、D、E依次醒来,也按同样的方法拿鱼。问他们至少捕了多少条鱼?
# A = (total - 1) // 5
# B = ((A * 4) - 1) // 5
# c、d、e同理
fish = 1 # 假设捕了一条鱼,
while True: # 不知道总鱼数,所以使用while循环
total = fish # 找个中间变量代替fish做运算,不然整个循环就在0、1之间循环
for _ in range(5): # for循环写分🐟的操作,一共分了5次(同样的操作进行了5次)
if (total - 1) % 5 == 0: # 减1后能平均分成5份,在这样的情况下才能分🐟
total = (total - 1) // 5 * 4
# 等号是赋值运算符,优先级最低,所以先算等号右边的
# 等号右边的算好后,相当于对fish重新赋值
flag = True
else: # 减1后如果不能平均分成5份
fish += 1 # 说明总鱼数不对
flag = False
break
if flag:
print(f'总鱼数为{fish}条')
break
fish = (fish - 1) // 5
1、2题打印结果为
3、30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
people = [i for i in range(1, 31)] # 形成1-30的编号
while len(people) > 15: # while循环执行
num = 1
for _ in range(9):
if num != 9:
people.append(people.pop(0))
# POP根据下标删除元素,append在末尾追加
# 这就组成一个环形,这个人我们先从开头删掉(数到9)再给他指定到末尾
num += 1 # 如果num不等于9
else: # 如果num等于9
result = people.pop(0)
print(f'下船的人分别是编号为{result}')
打印结果为:9、18、27、6、16、26、7、19、30、12、24、8、22、5、23
4、如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。请找出1000以内所有的阿姆斯特朗数:
例如:1 ** 1 = 1、2 ** 1 = 2、1 ** 3 + 5 ** 3 + 3 ** 3 = 153等。
a.计算这个数字是几位数
b.再次拿到各个位的数字,然后n次幂,求和
for num in range(1, 1000):
lenght = 0 #
i = num # 加一个中间变量来抵消掉赋值
while i != 0:
i //= 10
lenght += 1
# print(f'{num}是一个{lenght}位数')
j = num
total = 0
for _ in range(lenght):
total += (j % 10) ** lenght
j //= 10
if total == num:
print(f'{num}是阿姆斯特朗数')
print('******方法二*****')
for num in range(1, 1000):
lenght = len(str(num))
# 所有的数据类型后面添加小括号,就可以使其变为数据类型转换的方法。(构造器语法)
total = 0
for i in str(num):
total += int(i) ** lenght
if total == num:
print(f'{num}是阿姆斯特朗数')
打印结果为:1、2、3、4、5、6、7、8、9、153、370、371、407
5、判断一个数字是否是丑数
丑数定义:不能被2、3、5以外的其他素数整除的数。
例如:1、2、3、4、5、6、8、9、10、12、15、…….
它在分解质因数之后只存在2、3、5
number = 15
a = number
if number <= 0:
print('输入错误,请重新输入。')
else:
# 15是丑数=1 * 3 * 5
# 12是丑数=1 * 2 * 2
# 9是丑数= 1 * 3 * 3
# 10是丑数=1 * 2 * 5
while True:
if a % 2 == 0:
a //= 2
elif a % 3 == 0:
a //= 3
elif a % 5 == 0:
a //= 5
elif a == 1:
print(f'{number}是丑数')
break
else:
print(f'{number}不是丑数')
break
6、输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)。
#例如:Abc123、A123合法,abc、Abc、123非法
print('******************************************************')
userName = 'Abc123ahs'
flag = False
if 'A' <= userName[0] <= 'Z':
# A123 合法?
for i in userName[1:]:
if '0' <= i <= '9':
flag = True
elif 'a' <= i <= 'z' or 'A' <= i <= 'Z':
continue
else:
print('非法')
break
else:
result = '合法' if flag else '非法'
print(result)
else:
print('非法')
7、获取列表中出现次数最多的元素
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] ----> 3
隐藏条件:nums = [1,2,2,3,3] ----> 2,3
nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
nums = [1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5]
nums = [1, 33, 55, 99, 99, 101]
max_count = 0 # 有一个初始最大值为0
# list1空列表创建的作用就是用来解决隐藏条件的。
list1 = []
for i in nums: # 对列表做遍历
# 此分支用来解决单个元素出现次数最高
if max_count < nums.count(i):
max_count = nums.count(i)
list1.clear()
list1.append(i)
elif max_count == nums.count(i):
# 此分支用来解决多个元素出现次数最多
max_count = nums.count(i)
if i not in list1:
list1.append(i)
print(f'出现次数最多的元素为{list1}')
5、6、7题打印结果为:
在day09
下创建一个名为01-字符串的练习题
的代码文件。
1、输入用户名,判断用户名是否合法(用户名长度6~10位)
userName = '王大锤'
result = '用户名合法' if 6 <= len(userName) <= 10 else '用户名非法'
print(result)
# 这里用的是三目运算符,当然也可以使用input方法单分支结构
name = input('请输入用户名:')
if 6 < len(name) < 10:
print('合法')
else:
print('不合法')
2、输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成) ----> 例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
# 方法一:
userName = 'abc123a'
flag = True
for i in userName: # 对字符串做遍历,因为字符串也是容器,
# 字符串比较大小,本质是编码值比较大小,不用往编码值转换,会自动转
if '0' <= i <= '9' or 'A' <= i <= 'Z' or 'a' <= i <= 'z':
continue
else:
print('用户名不合法')
flag = False # 如果用户名不合法,flag改为False
break
if flag: # if flag == True
print('用户名合法')
for循环有一种特殊语法:for...else...语法
# 方法二:
userName = 'abc123a。'
for i in userName:
# 如果拿到的符号既不是数字也不是字母,
# '0' <= i <= '9' or 'A' <= i <= 'Z' or 'a' <= i <= 'z'的结果为False
# if not False等于if True
if not ('0' <= i <= '9' or 'A' <= i <= 'Z' or 'a' <= i <= 'z'):
print('用户名不合法')
break
else:
print('用户名合法')
1、for...else语法的else什么时候被执行,for循环正常结束时,else语法能够正常执行,且只执行一次。
2、如果for循环意外终止,else语句不会被执行。因为break存在,for循环一定是非正常结束 、
3、for...else语句本身也不建议使用
3、输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母) ----> 例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法 ‘Abc’ — 不合法
print('*************')
userName = 'Abc123ahs'
flag = False
if 'A' <= userName[0] <= 'Z':
# A123 合法?
for i in userName[1:]:
if '0' <= i <= '9':
flag = True
elif 'a' <= i <= 'z' or 'A' <= i <= 'Z':
continue
else:
print('非法')
break
else:
result = '合法' if flag else '非法'
print(result)
else:
print('非法')
4、输入一个字符串,统计字符串中非数字非字母的字符的个数 ----> 例如: 输入’anc2+93-sj胡说’ 输出:4 输入’===’ 输出:3
str1 = 'anc2+93-sj胡说'
count = 0
for i in str1:
if not ('0' <= i <= '9' or 'A' <= i <= 'Z' or 'a' <= i <= 'z'):
count += 1
print(f'非数字非字母的个数为{count}')
打印结果如下:
在day09
下创建一个名为02-课下练习
的代码文件。
1、输入一个小于1000的数字,产生对应的学号
----> 例如: 输入’23’,输出’py1901023’
----> 输入’9’, 输出’py1901009’
----> 输入’123’,输出’py1901123’
n = input('输入一个数:')
print(f'py1901{n:0>3}')
print('py1901' + n.zfill(3))
# str.zfill(width),width -- 指定字符串的长度。原字符串右对齐,前面填充0
# number = input('请输入一个小于1000的数字:')
# if len(number) == 1:
# stuID = 'py190100' + number
# elif len(number) == 2:
# stuID = 'py19010' + number
# elif len(number) == 3:
# stuID = 'py1901' + number
# else:
# print('输入错误')
# print(stuID)
# print(f'学号为:py1901{number:0>3}')
# print(f'学号为:py190{1000 + int(number)}')
2、判断一个数字是否是回文数
什么是回文数,将一个数字反回来依旧是这个数字。例如:12321、456654
n = input('输入一个数:')
if n == n[::-1]:
print('这个数是回文数')
else:
print('这个数不是回文数')
3、输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入’abc1shj23kls99+2kkk’ 输出:‘123992’
n = input('输入一个字符串')
m = ''
for i in n:
if '0' <= i <= '9':
m += i
print(m)
4、输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入’abcd1234’ 输出’bd24’
n = input('输入一个字符串:')
print(n[1::2])
# str4 = ''
# for i in range(len(str3)):
# if i % 2 != 0:
# str4 += str3[i]
# print(str4)