1. 將用戶輸入的所有數字相乘之后對20取余數
用戶輸入的數字個數不確定
2,編寫函數,檢查傳入列表的長度,如果大於2,那么僅僅保留前兩個長度的內容,並將新內容返回
3, 定義一個函數,傳入一個字典和字符串,判斷字符串是否為字典中的值,如果字符串不在字典中,則添加到字典中,並返回新的字典
4, 通過定義一個計算器函數,調用函數傳遞兩個參數,然后提示選擇【1】加 【2】減【3】乘 【4】除 操作,選擇之后返回對應操作的值。
5, 一個足球隊在尋找年齡在15歲到22歲的女孩做拉拉隊員(包括15歲和22歲)加入。編寫一個程序,詢問用戶的性別和年齡,然后顯示一條消息指出這個人是否可以加入球隊,詢問10次后,輸出滿足條件的總人數。
# return注意點、位置參數、關鍵字參數、默認參數、位置參數不定長、關鍵字參數不定長
# TODO 什么時候封裝函數?
# 1.過程比較復雜,封裝成函數。
# 2.多個地方會同時使用某一段程序,ctrl+c
# 3.封裝成函數要不要參數??一般有參數的。也可以不傳入參數(過程比較復雜)。
# 4.函數封裝返回值一般是確定的,是根據參數確定的。
# 5.最好不要把input放在函數體里。
"""
1205-函數2
截至:12月10日 18:00
1. 將用戶輸入的所有數字相乘之后對20取余數
用戶輸入的數字個數不確定
"""
# 用戶輸入不確定,使用*args;輸入數字;取余;
def my_input(*my_data):
"""
這是一個將用戶輸入的所有數字相乘然后對20取余數的函數
首先輸入數字個數不確定,使用*args接收不定長參數;使用for遍歷該不定長參數;
*= 有坑,需要再先定義另一個變量1,來求乘積。
然后定義一個變量來接收對20取余
:param my_data: 傳入的不定長參數
:return:
"""
# 定義一個全局變量,用來接收乘積值,不能寫在函數體內部,否則每次循環都會重新賦值
count = 1
for i in my_data: # 循環遍歷用戶輸入的不定長參數
count *= i # 將每次取得的元素與count相乘並賦值給count
my_data = count % 20 # 在循環外,最終的乘積對20取余賦值給變量,用來返回
return count, my_data # 返回最終的乘積,取余后的結果,方便驗證結果
test_1 = [1, 2, 3, 4, 5, 7] # 定義一個列表,傳遞參數,也可使用元祖來傳遞
a = my_input(*test_1) # 將return的元祖賦予一個變量,用來取值
print("輸入一連串數字為{},其乘積為{},對20取余的結果為{}".format(test_1, a[0], a[1])) # 打印輸入內容,乘積值,取余的結果
print("~" * 50, "上面是第一題答案", "~" * 50)
print()
"""
"""
# 題目分析,用戶輸入的數字個數不確定
# num = input("請輸入數字:")
# 用,或者其他符號 *。注意分隔的逗號要與split里的一致
num = input("請輸入數字,用逗號隔開:")
# 保存多個數據,用列表存儲
# TODO 字符串轉化成列表,用,分隔,使用split
num_list = num.split(",") # 注意輸入數字的時候,使用的什么模式下的逗號,split里就得是什么模式下的逗號
# 取余數,邏輯稍微復雜一點的,封裝成函數。get_mod()
# 方式:1,列表作為參數 方式2.不定長參數*args
def get_mod(*args):
# def get_mod(args):
product = 1
for arg in args:
product *= float(arg) # todo 為啥用數據轉化呢。因為字符串分割成列表的是字符串。
return product % 20
print(get_mod(*num_list)) # 這樣寫運行會報錯,num_list與*args不匹配,需要在num_list前面加入一個*,來解包
# print(get_mod(num_list)) # 這里的num_list是一個列表
# 可以把*args與*num_list前面的*去掉,就代表輸入的是一個列表作為參數。
"""
2,編寫函數,檢查傳入列表的長度,如果大於2,那么僅僅保留前兩個長度的內容,並將新內容返回
"""
# 傳入列表,使用*args接收; 長度使用len(); 大於2,判斷使用if; 保留前2個長度的內容,切片; 使用return返回內容
# 先寫函數主流程。再寫邏輯
def my_return(my_list):
"""
這是一個判斷列表長度的函數,如果長度大於2,則返回前2個元素的值
定義一個變量接收列表的長度,if判讀長度,長度大於2切片取前兩位返回,小等於2則讓重新傳值
:param my_list: 傳入的參數值
:return: 返回值
"""
my_length = len(my_list) # 將輸入的長度賦值給變量
if my_length <= 2: # 判斷列表長度小於等於2的情況
print("您輸入的列表{}長度不夠哦,返回前2個長度的內容為空哦".format(my_list))
else: # 列表長度大於2的情況
return my_list[:2]
# 給定一個列表
b = ["name", "age", 1, 2, 3]
# 定義一個變量接收返回的值
a = my_return(b)
print("輸入的列表為{},返回的前2個長度的內容為{}".format(b, a)) # 打印列表及前2個長度的內容
print("~" * 50, "上面是第二題答案", "~" * 50)
print()
"""
"""
# 下面是答案
def remain_two(mlist):
if len(mlist) > 2:
return mlist[:2]
return mlist
# todo 新知識 三目運算,三元表達式
def remain_two2(mlist):
return mlist[:2] if len(mlist) > 2 else mlist
"""
3, 定義一個函數,傳入一個字典和字符串,判斷字符串是否為字典中的值,如果字符串不在字典中,則添加到字典中,並返回新的字典
"""
# 字符串為字典中的值,字符串元素須為成對的元祖類型。
def my_dict(my_str, dic):
"""
這是一個判斷是否往字典中傳入內容的函數。
判斷輸入的字符串是否在字典的value()中,如果在則不返回,如果不在則添加到字典,key取my_str,值為my_str的值
:param my_str: 傳入的字符串值
:param dic: 傳入的字典值
:return:
"""
if my_str in dic.values(): # 判斷字符串是否在字典的值當中,在則返回1
return 1
else: # 字符串不在字典中,則根據鍵值對添加到字典中
dic[my_str] = my_str
return dic
# 定義一個字符串
a = "gender"
# 定義一個字典
b = {"name": "lucky", "age": 18}
# 定義一個變量接收返回值
c = my_dict(a, b)
# print("輸入的字符串為{},輸入的字典為{},返回的新字典為{}".format(a, b, c)) # 打印輸入值與返回值,此處注意字典已變化
print("返回的新字典為{}".format(c)) # 打印返回值,此處注意字典已變化
print("~" * 50, "上面是第三題答案", "~" * 50)
print()
"""
# 下面是答案及分析
分析題目。缺少key,只需要key保持不可變類型,並且是唯一的即可
可以使用random隨機生成key值
"""
# TODO 使用隨機數作為key值。
def add_element(e, mdict={}):
# TODO 不要把mdict={} 當成默認參數
if e not in mdict.values():
# e 作為key
mdict[e] = e
return mdict
import random
def add_element3(e, mdict={}):
# TODO 不要把mdict={} 當成默認參數
if e not in mdict.values():
# 使用隨機數 作為key
while True:
key = random.randint(1, 9999)
# TODO 必須判斷key是否在mdict.keys(),因為字典里的key必須是不可變數據類型且唯一
if key not in mdict.keys():
mdict[key] = e
break # 賦值成功,終止循環,此步不能少
return mdict
print(add_element("lucky", {"name": "xiaohong", "age": 18}))
# 方法2
# TODO 使用time作為key值
import time
def add_element2(e, mdict={}):
# TODO 不要把mdict={} 當成默認參數
if e not in mdict.values():
# e 作為key
mdict[int(time.time())] = e
return mdict
print(add_element2("lucky", {"name": "xiaohong", "age": 18}))
# TODO 有沒有什么key 永遠都不可能重復,時間
# import time
# int(time.time()) # 或int(datatime.now()) 自己需要練習。
"""
4, 通過定義一個計算器函數,調用函數傳遞兩個參數,然后提示選擇【1】加 【2】減【3】乘 【4】除 操作,選擇之后返回對應操作的值。
"""
# 傳遞2個參數,用戶選擇1、2、3、4對應加減乘除操作,使用鍵值對。根據選擇的操作返回對應操作的值。
def my_calc(x, y):
"""
這是一個根據選擇進行計算器中2個數加減乘除的函數
使用字典存儲用戶選擇
:param x: 第一個參數
:param y: 第二個參數
:return: 返回值
"""
# 定義一個用戶選擇的操作,根據用戶選擇的key值取用戶想進行的操作
dict_1 = {"1": "+", "2": "-", "3": "*", "4": "/"}
# print(dict_1.keys()) # dict_keys(['1', '2', '3', '4']) # TODO 注意此處key的值為字符串,不需要轉換input的類型
while True:
# 讓用戶選擇要進行的操作
choose = input("請選擇你想進行的操作【1】加 【2】減【3】乘 【4】除 ,輸入對應的數字:")
if choose not in dict_1.keys(): # 用戶輸入的內容不再可操作范圍內,讓用戶重新選擇
print("您選擇的操作有誤,請重新選擇")
elif choose == "1": # 用戶選擇加法操作
print("您想進行的操作為{}".format(dict_1[choose]))
return dict_1[choose], x + y # 取出對應的操作,返回2個值操作后的值
elif choose == "2": # 用戶選擇減法操作
print("您想進行的操作為{}".format(dict_1[choose]))
return dict_1[choose], x - y
elif choose == "3": # 用戶選擇乘法操作
print("您想進行的操作為{}".format(dict_1[choose]))
return dict_1[choose], x * y
else: # 用戶選擇除法操作
print("您想進行的操作為{}".format(dict_1[choose]))
return dict_1[choose], x / y
# 定義2個傳入的值
m = 8
n = 2
# 定義一個變量接收返回值
res = my_calc(m, n)
print("用戶輸入的值是{},{},用戶選擇的操作是{},操作后得到的結果為{}".format(m, n, res[0], res[1])) # 打印用戶選擇的操作,操作后的值
print("~" * 50, "上面是第四題答案", "~" * 50)
# 下面是答案及分析,騷操作
"""
分析,需要傳入2個參數,1個參數判斷加減乘除
"""
methods = {"1": "+", "2": "-", "3": "*", "4": "/"}
def calc(x, y, method):
# methods['1'] = + - * /
method_f = methods[method]
# eval函數是將字符串轉化成可以運行的python代碼
return eval("{} {} {}".format(x, method_f, y))
print(calc(1, 2, 3))
"""
5, 一個足球隊在尋找年齡在15歲到22歲的女孩做拉拉隊員(包括15歲和22歲)加入。編寫一個程序,詢問用戶的性別和年齡,然后顯示一條消息指出這個人是否可以加入球隊,詢問10次后,輸出滿足條件的總人數。
"""
# 讓用戶輸入性別、年齡。對年齡進行判斷,共判斷10次,在[15,22],則count值加1(count默認為0),最后返回count值
# 定義一個函數存儲用戶輸入,存儲到字典,判斷性別女&年齡,符合則計數,不符合不計數,最后返回計數值。
def my_register(gender, age):
"""
這是一個判斷能否成為啦啦隊一員的函數
:param gender: 性別參數
:param age: 年齡參數
:return:
"""
if gender == "女" and 15 <= age <= 22: # 判斷符合啦啦隊的要求
print("恭喜你成為啦啦隊的一員,登記信息為性別{},年齡{}".format(gender, age))
return 1 # 返回true
else: # 不符合啦啦隊的要求。不處理
pass
def my_count():
"""
這是統計10次中有多少個女孩能成為拉拉隊成員的函數
:return:
"""
# 定義變量,計數
count = 0
for i in range(10): # 判斷10次
your_gender = input("請輸入你的性別:") # 輸入性別,數據類型為str
your_age = int(input("請輸入你的年齡:")) # 輸入年齡,數據類型為str,需要轉換為int,方便比較
if my_register(your_gender, your_age): # 如果my_register函數返回的True則表示符合拉拉隊的要求
count += 1 # 符合要求,招募名額加1
else: # my_register返回False,則告知不符合拉拉隊的要求
print("很抱歉,您不符合啦啦隊的要求,拉拉隊的要求是女生且年齡在15-22歲,包含15和22歲!")
return count # 返回統計的符合條件的個數
# 定義一個變量來接收計數值
result = my_count()
print("總共詢問了10次,共招募了{}個啦啦隊隊員".format(result))
# 精簡
def join_team(age):
"""是否 可以加入足球隊"""
if 15 <= age <= 22:
return True
return False
def main():
"""主程序"""
num = 0
for i in range(10):
age = input("輸入年齡:")
if not age.isdigit():
print("輸入不合法")
continue
joined = join_team(int(age))
if joined:
num += 1
print(num)
