目录
引子
现在计算机还是以数值计算为主,但有些时候我们存储的方式使用文本形式进行存储,因此我们需要了解字符串。
字符串
-
单引号
-
双引号
-
三个双引号
-
三个单引号
\ 转义字符,后面还可以跟进制 ,如果不希望\表示转义字符 可以在前面加上r
字符串的运算
- +
- *
- [:] 切片
- in not in
格式化输出 三种方式
举例
-
print('%d:%d:%d' % (hour, minute, second))
-
print('{0}:{1}:{2}'.format(hour,minute,second))
-
print(f'{hour}:{minute}:{second}')
列表list
其中遍历列表的方式(三种方式):
- for index in range(len(list))
- print(list[index])
- for elem in list:
- print(elem)
- #使用enumerate()函数来访问列表的下标和对应的数据
- for index, elem in enumerate(list):
- print(index, elem)
- list.append()
- list.insert()
- list.extend()
- list.remove()
- list.pop()
- list.clear()
- 切片
- list.sort()
- list.sorted()
生成式+列表,和生成器
具体例子:
-
f = [x for x in range(1, 10)
-
g = [x + y for x in 'ABCDE' for y in '1234567'】
-
生成器的关键字yield
元组tuple
大部分和列表类似,但是一点重要的区别,元组不能够修改,因此在一些不能修改的地方就需要使用。元组在创建时间和占用空间上都是优于列表。
集合set
集合中没有重复元素,也就是元素只出现一次
-
set.add()
-
set.update()
-
set.discard()
-
set.pop()
-
set.remove()
两个集合可以做交集,并集,差集等运算
字典dict
是由key:value组成
以上四种数据类型的使用还需要多多练习
练习
- 在屏幕上显示跑马灯文字
- 设计一个函数产生指定长度的验证码,验证码由大小写字母和数字构成。
- 设计一个函数返回给定文件名的后缀名。
- 设计一个函数返回传入的列表中最大和第二大的元素的值。
- 计算指定的年月日是这一年的第几天。
- 打印杨辉三角。
- 双色球选号。
- 约瑟夫环问题。
- 井字棋游戏。
1.
#在屏幕上显示跑马灯文字
import os
import time
def main():
content = '欢迎学习Python! '
while True:
os.system('cls') #清除屏幕上的输出
print(content)
time.sleep(0.2) #休眠200毫秒
#实现跑马灯功能
content = content[1:] + content[0]
if __name__ == '__main__':
main()
2.
#设计一个函数产生指定长度的验证码,
#验证码由大小写字母和数字构成
#不区分大小写验证
import random
def generate_code(code_len):
all_chars = '0123456789zbcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
last_pos = len(all_chars) - 1
code = ''
for _ in range(code_len):
index = random.randint(0, last_pos)
code += all_chars[index]
return code
if __name__ == '__main__':
new_code = generate_code(4)
print(new_code)
input_code = str(input())
if new_code.upper() == input_code.upper():
print('验证码输入正确')
"""
3.
#输出文件的后缀名
def get_suffix(filename, has_pot = False):
pos = filename.rfind('.') #找到'.'的位置
#print(pos)
if 0 < pos < len(filename) - 1:
index = pos if has_pot else pos + 1
return filename[index :]
else:
return ''
if __name__ == '__main__':
print(get_suffix('bb.py'))
print(get_suffix('aa.c'))
print(get_suffix('a.html112'))
4.
#函数:返回传入列表中的最大和第二大的元素的值
#其中列表中元素必须多于1个
def max2(x):
if (len(x) < 2):
return 'invalid list'
else:
m1 ,m2 =(x[0], x[1]) if x[0] > x[1] else (x[1], x[0])
for index in range(2, len(x)):
if x[index] > m1:
m2 = m1
m1 = x[index]
elif x[index] > m2:
m2 = x[index]
return m1, m2
if __name__ == '__main__':
a = [1,4,58,1,245,206,6,7,51,225,2]
b = [1,0]
c = [1]
print(max2(a))
print(max2(b))
print(max2(c))
5.
#计算指定的年月日时这一年的第几天
def is_leap(year):
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0) :
return True
else:
return False
def cal_day(year, month , day):
day_of_month1 = [31,28,31,30,31,30,31,31,30,31,30,31]
day_of_month2 = [31,29,31,30,31,30,31,31,30,31,30,31]
total = 0
if is_leap(year):
for index in range(month - 1):
total += day_of_month2[index]
else:
for index in range(month - 1):
total += day_of_month1[index]
return total + day
def main():
print(cal_day(2000,8,6))
print(cal_day(1852,1,1))
print(cal_day(1999,8,6))
print(cal_day(2017,12,31))
print(cal_day(1000,8,6))
if __name__ == '__main__':
main()
6.
#输出杨辉三角
def main():
num = int(input('Number of rows:'))
yh = [[]] * num
for row in range(len(yh)):
yh[row] = [None] * (row + 1)
for col in range(len(yh[row])):
if col == 0 or col == row:
yh[row][col] = 1
else:
yh[row][col] = yh[row-1][col] + yh[row-1][col-1]
print(yh[row][col], end='\t')
print()
if __name__ == '__main__':
main()
7.
#双色球自动随机选号
import random
#选择6个红球和1个蓝球
def ball_selected():
redball = [x for x in range(1,34)]
selected = []
#random中内置的sample函数来选择列表中不重复的n个元素
selected = random.sample(redball, 6)
selected.sort()
#选择一个篮球
selected.append(random.randint(1,17))
#print(selected)
return selected
#显示输出的样式
def display(balls):
#遍历数据对象,返回下标和数据,
for index, ball in enumerate(balls):
if index == len(balls) - 1:
print('||', end=' ')
print('%02d' % ball, end=' ')
print()
def main():
n = int(input('机选几注:'))
for _ in range(n):
display(ball_selected())
if __name__ == '__main__':
main()
8.
#约瑟夫环问题
def main():
#人的状态只有两种情况,留下和离开,所以用ture和false
persons = [True] * 30
counter, index, number = 0, 0, 0
while counter < 15:
if persons[index]:
number += 1
if number == 9:
persons[index] = False
counter += 1
number =0
index += 1
#到29就从0开始数
index %= 30
print(index, number, counter)
for number,person in enumerate(persons):
print(str(number+1)+'基督教徒' if person else str(number+1)+"非基督教", end = '\t')
if __name__ == '__main__':
main()
9.
#井字棋游戏
import os
#输入棋盘的模样
def print_board(board):
print(board['TL'] + '|' + board['TM'] + '|' + board['TR'])
print('-+-+-')
print(board['ML'] + '|' + board['MM'] + '|' + board['MR'])
print('-+-+-')
print(board['BL'] + '|' + board['BM'] + '|' + board['BR'])
def main():
init_board = {
'TL':' ', 'TM':' ', 'TR':' ',
'ML':' ', 'MM':' ', 'MR':' ',
'BL':' ', 'BM':' ', 'BR':' '
}
begin = True
while begin:
#使用copy这样不改变原来的棋盘模样
curr_board = init_board.copy()
begin = False
turn = 'x'
counter = 0
#清除屏幕
os.system('cls')
print_board(curr_board)
while counter < 9:
#输入TL,TM,TR,ML,MM,MR,BL,BM,BR,来作为位置信息
move = input('轮到%s走棋,请输入位置:' % turn)
if curr_board[move] == ' ':
counter += 1
curr_board[move] = turn
if turn == 'x':
turn = 'o'
else:
turn = 'x'
os.system('cls')
print_board(curr_board)
choice = input('在玩一局?(Y | N)')
begin = choice == 'Y'
if __name__ == '__main__':
main()