210129

210129

一,前情回顾

1.元组(tuple)

不可变的列表

语法:(元素1, 元素2,)

不可变;有序

元素:任何类型的数据

t1 = (78,)
t2 = 10, 89, 78, 34
t3 = (80, 100)
x, y = t3
x, *y = t2

2.集合

可变、无序

s1 = {1, 23, 4}
s2 = set()

交集(&)、并集(|)、差集(-)、对称差集(^)

子集(>=、<=)、真子集(>、<)

s1 = {100, 200, 300, 400}
s2 = {1, 2}
print(s1 > s2)    # False  (>不是在判断大小)

s1 = {100, 200, 300, 1, 2}
s2 = {1, 2}
print(s1 > s2)    # True
print(s1 >= s2)   # True

s1 = {100, 200, 300, 1, 2}
s2 = {1, 2, 3}
print(s1 > s2)    # False

s1 = {1, 2, 3}
s2 = {1, 2, 3}
print(s1 > s2)    # False
print(s1 >= s2)   # True

3.字符串

‘’、""、’’’’’’、""""""

不可变;有序

普通字符和转义字符

\n、\t、"、’、\ (任何转义字符的长度都是1)

\u4位的16进制编码值 - 编码字符

4.字符编码

ASCII和Unicode

4e00 ~ 9fa5

print('\u4eff')
print(chr(89))
print(ord('二'))   # 20108
print('azzzz' > 'b')   # False

获取字符

二,作业解析

1.输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)

# 例如: 输入'abcd1234 ’  输出‘bd24’
str1 = 'abcd1234'
print(str1[1::2])    # bd24

2.输入用户名,判断用户名是否合法(用户名长度6~10位)

user_name = 'hs234s42js'
if 6 <= len(user_name) <= 10:
    print('合法')
else:
    print('不合法')

3.输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)

user_name = 'hs234s42js'
for x in user_name:
    if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'):
        print('不合法')
        break
else:
    print('合法')

4.输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

例如: 'abc'  — 不合法    '123'  — 不合法   'abc123'  — 不合法    'Abc123ahs'  — 合法
user_name = 'hs234s42js'
if 'A' <= user_name[0] <= 'Z':
    num_count = 0
    for x in user_name[1:]:
        if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'):
            print('不合法')
            break
        else:
            if '0' <= x <= '9':
                num_count += 1
    else:
        if num_count > 0:
            print('合法')
        else:
            print('不合法')
else:
    print('不合法')    

5.输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串

str1 = 'abc1shj23kls99+2kkk'
new_str1 = ''
for x in str1:
    if '0' <= x <= '9':
        new_str1 += x
print(new_str1)   # '123992'

6.输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)

# 方法一
str1 = 'a2h2klm12+'
new_str1 = str1.upper()
print(new_str1)    # A2H2KLM12+
# 方法二
A: 65   a: 97     32
B: 66   b: 98     32
C: 67   c: 99     32
# 小写字母的编码值 - 32  == 对应的大写字母的编码值
str1 = 'a2h2klm12+'
new_str1 = ''
for x in str1:
    if 'a' <= x <= 'z':
        u_code = ord(x) - 32
        u = chr(u_code)
        new_str1 += u
    else:
        new_str1 += x
print(new_str1)   # A2H2KLM12+

7.输入一个小于1000的数字,产生对应的学号

例如: 输入'23',输出'py1901023'    输入'9', 输出**'py1901009'     输入'123',输出'py1901123'

23 -> 023;  9->009; 123->123

45 -> 045;  1->001; 234->234

方法一:

print('abc'*3)   # abcabcabc
print('0'*3)    # 000

num = input('请输入1000以内的数字:')

num = '1'
result = 'py1901' + (3 - len(num)) * '0' + num
print(result)

方法二:

result = 'py1901' + num.zfill(3)
print(result)   # py1901023

8.输入一个字符串,统计字符串中非数字字母的字符的个数

str1 = 'anc2+93-sj胡说'
count = 0
for x in str1:
    if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'):
        count += 1
print(count)

9.输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串

'abc123'  ->  '+bc12+'
str1 = 'abc123'
result = '+'+str1[1:-1]+'+'
print(result)    # +bc12+

10.输入字符串,获取字符串的中间字符

# 偶数个: N//2-1, N//2
# 奇数个: N//2
str1 = 'abc123'
l = len(str1)
if l & 1:
    print(str1[l//2])
else:
    print(str1[l//2-1: l//2+1])

11.写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)

print('abbcd'.find('b'))    # 1
print('abbcd'.find('bc'))   # 2
print('abbcd'.index('bd'))   # 报错
print('abbcd'.find('bd'))   # -1
str1 = 'how are you? i am fine! and you?'
str2 = 'you'
n = len(str2)
for x in range(len(str1) - n + 1):
    if str1[x:x+n] == str2:
        print(x)
        break
else:
    print('没有!')

12.获取两个字符串中公共的字符

str1 = 'aabc123'
str2 = 'huak3'
str3 = ''
for x in str1:
    if x in str2 and x not in str3:
        str3 += x
print(str3)    # 'a3'

print('a' in 'abc')    # True
print('ab' in 'abc')   # True
print('ac' in 'abc')   # False

三,字符串格式化

语法:包含格式占位符的字符串 % (数据1,数据2,数据3,…)
注意:a.数据必须和占位保持一致 b.当只需要一个数据的时候,()可以省略的
%s - 字符串(任何类型的数据都可以使用%s占位)
%d - 整数
%f - 浮点数
%.Nf

name = input('请输入姓名:')

name = '小明'

age = int(input('请输入年龄:'))

age = 18

message = 'xxx今年xx岁'

# 方法一: 字符串拼接

message = name+'今年'+str(age)+'岁'
print(message)

# 方法二:字符串格式占位符

money = 165263.9878
message = '%s今年%d岁, 月薪:%.2f' % (name, age, money)
print(message)

# 方法三:f-string

message = f'{name}今年{age}岁,月薪:{money}'
print(message)

num = 10
message = f'{num * 10}abc'
print(message)

# 格式1: :.nf   -  控制浮点数保留n位小数

message = f'月薪:{money:.2f}'
print(message)

# 格式2: :字符>长度  -  将数据通过前面加指定字符填充到指定长度

num = 19
message = f'学号:{num:0>4}'
print(message)   # 学号:0019

message = f'{num:a>5}'
print(message)   # aaa19

message = f'{num:a<5}'
print(message)    # 19aaa

message = f'{num:0>8.2f}'
print(message)   # 00019.00

# 1000,000,000,000

money = 1829300000
message = f'{money:,}'
print(message)    # 1,829,300,000

num = 0.45
message = f'{num:%}'
print(message)    # 45.000000%

message = f'{num-0.1:.2%}'
print(message)    # 45.00%
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值