掉进悬崖的小白,开始学习列表,继续向基础进军,列表操作,趣味游戏继续走起~
列表
列表概念及存储方式:
1.一个可变长的存储一系列数据的顺序集合
2.列表是通过索引来访问的
3.由连续的内存位置组成的
定义列表:
列表标识:[]
定义空列表
empty_list = []
定义同类型存储的列表:
str_list = [“程咬金”,“亚瑟”,“曹操”]
int_list = [1,23,66,27,8]
定义混杂类型存储的列表:
list = [“张三”,23,“男”,“13838383388”]
定义一个重复出现n次元素的列表:*
重要的事情说三遍
list = [“我要学Python!”] * 3
列表的基本操作:
nums = [1, 2, 3, 4, 5, 6, 7]
数据:1 2 3 4 5 6 7
索引:0 1 2 3 4 5 6
1.索引默认从0开始,访问列表元素:nums[0]、nums[1]。
2.获取列表元素数:len(nums):7
3.遍历:
for i int range(len(nums)):
print(nums[i])
列表其他操作:
添加元素至末尾:
nums.append(8)
插入元素到指定位置,位置可以为负:
nums.insert(1, 9)
追加列表:
nums.extend([8, 9, 10, 11])
删除:
删除位置上的数据:del nums[2]
删除某个数据(只删除找到的第一个):nums.remove(7)
修改:
nums[0] = 0
查询:找不到会报错
会找到第一个6的索引
index = nums.index(6)
反序
nums.reverse()
[7, 6, 5, 4, 3, 2, 1]
目前前提:列表数据是同类型的,才可以求最大和最小
求最大:max(nums):7
求最小:min(nums):1
合并:+
nums1 = [1, 2, 3]
nums2 = [4, 5, 6]
nums3 = nums1 + nums2
[1, 2, 3, 4, 5, 6]
打乱(随机洗牌)
random.shuffle(nums1)
将num1中的元素随机打乱,打印出[2,1,3]
列表练习小游戏
公交报站系统
# 2、公交报站系统,每经过一站,报出该站名称,若乘客在该站下车,
# 在出站口提示“一共乘坐x站”。用while循环实现以上程序
#
list_stand = ["人民路","幸福路","长寿街","富民街"]
list_choose1 = []
num_stands = 0
while "y" not in list_choose1 :
num_stands += 1
if num_stands >=len(list_stand):
print(f"终点站{list_stand[num_stands - 1]}到了,一共乘坐{len(list_stand) }站,请下车")
break
list_choose1.append(input(f"第{num_stands}站{list_stand[num_stands - 1]}到了,是否下车:"))
else:
print(f"一共乘坐{num_stands }站")
电文译码(解码)
# 3、有一电文,已按下列规律译成译码:
# A→Z a→z
# B→Y b→y
# C→X c→x
# … …
# 即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。
# 非字母字符不变。编写一个程序将密码译成原文,并输出密码和原文。
#
#
list_a_z = [chr(i) for i in range(97,123)]
# list_z_a = [chr(i) for i in range(122,96,-1)]
list_A_Z = [chr(i) for i in range(65,91)]
# list_Z_A = [chr(i) for i in range(90,64,-1)]
print(list_a_z)
print(list_A_Z )
# print(list_Z_A )
# print(list_z_a )
list_text = list(input("请输入原文:"))
print(f"原文:{list_text}")
for i in range(len(list_text)):
if list_text[i] in list_a_z :
list_text[i] = list_a_z[25-list_a_z.index(list_text[i])]
if list_text[i] in list_A_Z:
list_text[i] = list_A_Z[25-list_A_Z.index(list_text[i])]
print(f"译文:{list_text}")
模仿QQ登录,3次有误锁定
# 10、登录QQ时,QQ号和密码必须正确并且匹配才能够登录成功。
# 假设最多只允许用户输入三次,中间任何一次输入正确,则给出提示:登录成功。
# 如第一次输入信息有误,则给出提示:QQ号或密码输入有误,请重新输入,您还有2次机会。
# 第二次还输入有误,则给出:QQ号或密码输入有误,请重新输入,您还有1次机会。
# 第三次如输入还有误,则给出提示:您三次输入都有误,请与管理员联系。
#
def register():
in_next = 3
for i in range(3):
user_name = input("请输入用户名:")
user_pwd = input("请输入密码:")
if user_name != "admin" or user_pwd != "88888":
print(f"QQ号或密码输入有误,请重新输入,您还有{2 - i}次机会。") if i != 2 else print("您三次输入都有误,请与管理员联系")
else:
print("登录成功")
return
register()
两个数的最大公约数和最小公倍数
def common_num(a,b):
c= a if a<b else b
for i in range(c,a*b+1):
if i%a==0 and i%b ==0:
# common_multiple= i
print(f"最小公倍约数:{i}")
break
for j in range(c,0,-1):
if a%j==0 and b%j ==0:
# common_divisor= j
print(f"最大公约数:{j}")
break
common_num(in_int(),in_int())
定义in_int()函数,提示用户一直输入,直到输入正确的整数为止
# 定义in_int()函数,提示用户一直输入正确的整数为止
def in_int():
while True:
num = input("请输入整数:")
if num.isdigit():
return int(num)
print("重新输入!")
规则转换,递归游戏
# 1、输入一段字符判断是大写,还是小写。若是小写,转换为大写,若是大写,转换为小写
#
list_a_z = [chr(i) for i in range(97, 123)]
list_A_Z = [chr(i) for i in range(65, 91)]
def in_char():
while True:
list_char = list(input("请输入一段字符:"))
for i in range(len(list_char)-1):
if list_char[i] in list_a_z:
list_char[i]= list_A_Z[list_a_z.index(list_char[i])]
if list_char[i] in list_A_Z:
list_char[i] = list_a_z[list_A_Z.index(list_char[i])]
print(str(list_char))
return
# in_char()
# 2、一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数
# 是多少, 用递归算法实现。
#
list_2 = [1,1,2,3,5,8,13,21,34]
for i in range(30-len(list_2)):
list_2.append(list_2[-1] + list_2[-2])
print(list_2)
# 3、请编程实现对一个数组的排序,结果从大到小
#
def int_rank():
num_list = [1,8,4,3,9]
rank_list=[]
num_list.append(in_int())
for i in range(len(num_list)):
rank_list.append(max(num_list))
num_list.remove(max(num_list))
print(rank_list)
# int_rank()
最有趣的画规则图形小游戏它又来了!
# 4、接收一个整数(1-26之间),打印A-Z之间图形。如接收26,则打印如下图形
# (char)65-->A (char)66-->B
# 以此类推
# A
# BBB
# CCCCC
# DDDDDDD
# EEEEEEEEE
# FFFFFFFFFFF
# GGGGGGGGGGGGG
# HHHHHHHHHHHHHHH
# IIIIIIIIIIIIIIIII
# JJJJJJJJJJJJJJJJJJJ
# KKKKKKKKKKKKKKKKKKKKK
# LLLLLLLLLLLLLLLLLLLLLLL
# MMMMMMMMMMMMMMMMMMMMMMMMM
# NNNNNNNNNNNNNNNNNNNNNNNNNNN
# OOOOOOOOOOOOOOOOOOOOOOOOOOOOO
# PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
# QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
# RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
# SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
# TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
# UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
# VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
# WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
# ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
#
def in_1_26():
while True:
score = input("请输入1-26(打印行数):")
if score.isdigit() and 1 <= int(score) <= 26:
return int(score)
print("重新输入!")
def figure_A_Z():
n = in_1_26()
for i in range(1, n + 1):
print(" " * (n - i) + chr(64 + i) * (2 * i - 1))
figure_A_Z()
5. 键盘输入一个整数(0-9之间),显示如下图形(n=5)
# 12345
# 2345
# 345
# 45
# 5
#
# def figure_0_9():
# n_5 = in_int()
# if n_5 >9 or n_5<0:
# print("暂只能满足0-9之间打印!")
# else:
# for j in range(5):
# for i in range(j, 6):
# if i <= j:
# print(" " * j, end="")
# else:
# print(chr(48 + i), end="")
# print()
# figure_0_9()
# 6、输入一个奇数显示以下图型(如:num=5)
# ***** " ",0,*,5
# *** " ",1,*,3
# * " ",2,*,1
# *** " ",1,*,3
# ***** " ",0,*,5
# def figure_odd():
# n_11 = in_int()
# if n_11 % 2 == 0:
# print("输入值非奇数无法打印!")
# else:
# for i in range(n_11):
# if i <= n_11 // 2:
# print(" " * i + "*" * (n_11 - i * 2))
# else:
# print(" " * (n_11 - i - 1) + "*" * (i * 2 - n_11 + 2))
# pass
# pass
# 编程实现如下图列出的图形。(放在此处作为上题参考!)
# *
# ***
# *****
# *******
# *****
# ***
# *
# n_11 = int(input("请输入奇位行数:"))
# if n_11 % 2==0:
# print("无法打印!")
# else:
# for i in range(n_11):
# if i <= n_11 // 2:
# print(" " * (n_11 // 2 - i) + "*" * (2 * i + 1))
# else:
# print(" " * (i - n_11 // 2) + "*" * ((n_11 - i) * 2 - 1))
# pass
# pass