字符串相关练习题

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)
打印结果如下:

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值