掉進懸崖的小白,開始學習列表,繼續向基礎進軍,列表操作,趣味遊戲繼續走起~
列表
列表概念及存儲方式:
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