05-集合&字符串&排序算法

一皂股、set集合【了解】

1.概述

和數(shù)學(xué)上的集合基本是一樣的荷辕,

特點(diǎn):不允許有重復(fù)元素途戒,可以進(jìn)行交集坑傅,并集,差集的運(yùn)算

本質(zhì):無(wú)序喷斋,無(wú)重復(fù)元素的集合

2.創(chuàng)建

set(列表或者元組或者字典)

代碼演示:

#注意:set的創(chuàng)建需要借助于list和tuple

#1.通過(guò)list創(chuàng)建set
list1 = [432,5,5,46,65]
s1 = set(list1)
print(list1)
print(s1)

#注意1:set中會(huì)自動(dòng)將重復(fù)元素過(guò)濾掉

#2.通過(guò)tuple創(chuàng)建set
tuple1 = (235,45,5,656,5)
s2 = set(tuple1)
print(tuple1)
print(s2)

#3.通過(guò)dict創(chuàng)建set
dict1 = {1:"hello",2:"good"}
s3 = set(dict1)
print(dict1)   #{1: 'hello', 2: 'good'}
print(s3)   #{1, 2}

#注意2:set跟dict類似唁毒,都使用{}表示,但是與dict之間的區(qū)別在于:set中相當(dāng)于只存儲(chǔ)了一組key星爪,沒(méi)有value

3.操作

3.1添加

代碼演示:

#1.添加
#add()   在set的末尾進(jìn)行追加
s1 = set([1,2,3,4,5])
print(s1)
s1.add(6)
print(s1)

#注意:如果元素已經(jīng)存在浆西,則添加失敗
s1.add(3)
print(s1)
#print(s1.add(3))

#s1.add([7,8,9])   #TypeError: unhashable type: 'list'  list是可變的,set中的元素不能是list類型
s1.add((7,8,9))
#s1.add({1:"a"})  #TypeError: unhashable type: 'dict'  顽腾,dict中的鍵值對(duì)可以改變近零,set中的元素不能是dict類型
print(s1)

#update()   插入【末尾添加】,打碎插入【直接將元組,列表中的元素添加到set中久信,將字符串中的字母作為小的字符串添加到set中】
s2 = set([1,2,3,4,5])
print(s2)
s2.update([6,7,8])
s2.update((9,10))
s2.update("good")
#注意:不能添加整型窖杀,因?yàn)檎筒荒苁褂胒or循環(huán)遍歷
#s2.update(11)   #TypeError: 'int' object is not iterable
print(s2)
3.2刪除

代碼演示:

#2.刪除
#remove()
s3 = set([1,2,3,4,5])
print(s3)
s3.remove(3)
print(s3)
3.3遍歷

代碼演示:

#3.set的遍歷
s4 = set([1,2,3,4,5])
for i in s4:
    print(i)

#注意:set是沒(méi)有索引的,所以不能通過(guò)s4[2]獲取元素裙士,原因:set是無(wú)序的
#print(s4[2])  #TypeError: 'set' object does not support indexing

#注意:獲取的是編號(hào)和元素值
for i,num in enumerate(s4):
    print(i,num)
3.4交集和并集

代碼演示:

#4.交集和并集
s4 = set([1,2,3])
s5 = set([4,5,3])

#交集:&【按位與】    and
r1 = s4 & s5
print(r1)
print(type(r1))

#并集:|【按位或】   or
r2 = s4 | s5
print(r2)

三入客、簡(jiǎn)單算法【掌握】

代碼演示:

#需求:求列表中元素的最大值,不能借助于系統(tǒng)功能
list1 = [5,54,6,774,43,44]

#方式一
#定義一個(gè)變量腿椎,用于記錄最大值【參照物】
#思路:如果要操作列表痊项,初始值一般使用列表的第一個(gè)元素
maxValue = list1[0]
for num in list1:
    if num > maxValue:
        #給maxValue重新賦值
        maxValue = num
print(maxValue)

#方式二
maxValue1 = list1[0]
for index in range(1,len(list1)):
    if list1[index]  > maxValue1:
        maxValue1 = list1[index]

print(maxValue1)

#需求升級(jí):獲取最大值以及最大值對(duì)應(yīng)的下標(biāo)
maxValue2 = list1[0]
maxIndex = 0
for index in range(1, len(list1)):
    if list1[index] > maxValue2:
        maxValue2 = list1[index]
        maxIndex = index

print(maxValue2,maxIndex)

1.排序

1.1冒泡排序

排序思路:比較兩個(gè)相鄰下標(biāo)對(duì)應(yīng)的元素,如果以升序?yàn)槔脑捤址蹋瑒t最大值出現(xiàn)在最右邊

代碼實(shí)現(xiàn):

list1 = [34,5,46,23,23,54,65,54]

#升序排序:冒泡
#外層循環(huán):控制比較的輪數(shù)
for out in range(0,len(list1) - 1):
    #內(nèi)層循環(huán);控制每一輪比較的次數(shù)鞍泉,兼顧參與比較的下標(biāo)
    for inner in range(0,len(list1) - out - 1):
        if list1[inner] > list1[inner + 1]:
            #方式一
            temp = list1[inner]
            list1[inner] = list1[inner + 1]
            list1[inner + 1] = temp

            #方式二:簡(jiǎn)寫(xiě)
            #list1[inner],list1[inner + 1] = list1[inner + 1],list1[inner]
print(list1)

""""
for inner in range(0,len(list1) - out):
IndexError: list index out of range

原因分析:當(dāng)out取值為0的時(shí)候,inner的取值范圍為0~len(list1) - 1
          當(dāng)使用if list1[inner] > list1[inner + 1]:肮帐,當(dāng)inner取值為len(list1) - 1咖驮,此時(shí)inner+1變成了len(list1)
解決辦法:for inner in range(0,len(list1) - out - 1):
        當(dāng)out取值為0的時(shí)候,此時(shí)inner的取值范圍:0~len(list1) - 2
        假設(shè)元素個(gè)數(shù)為5训枢,inner當(dāng)取值為3的時(shí)候托修,inner+1取值為4,正好是索引的最大值的邊界
"""
1.2選擇排序

排序思路:固定一個(gè)下標(biāo)恒界,然后拿這個(gè)下標(biāo)對(duì)應(yīng)的元素和其他的元素依次進(jìn)行比較睦刃,最小值出現(xiàn)在最左邊

代碼演示:

list1 = [34,5,46,23,23,54,65,54]

#排序方式:選擇排序

#外層循環(huán):控制比較的輪數(shù)
for out in range(0,len(list1) - 1):
    #內(nèi)層循環(huán):控制每一輪比較的次數(shù),兼顧參與比較的下標(biāo)
    for inner in range(out + 1,len(list1)):
        """
            0-1  0-2  0-3  0-4
            1-2  1-3  1-4
            2-3  2-4
            3-4
        """
        #out表示小的下標(biāo)十酣,inner的最小值out+1
        if list1[out] > list1[inner]:
            temp = list1[out]
            list1[out] = list1[inner]
            list1[inner] = temp
print(list1)

#注意:注意區(qū)分冒泡和選擇的邊界問(wèn)題

三涩拙、String字符串【1】

1.概述

由多個(gè)字母,數(shù)字耸采,特殊字符組成的有限序列

在Python中兴泥,使用單引號(hào)或者雙引號(hào)都可以表示字符串

注意:沒(méi)有單符號(hào)的數(shù)據(jù)類型

'a' "a"

2.創(chuàng)建字符串

代碼演示:

str1 = "hello"

str2 = "abc1234"

str3 = "***fhhg%%%"

str4 = "中文"

3.字符串運(yùn)算

代碼演示:

#1.+   字符串連接
s1 = "welcome"
s2 = " to China"
print(s1 + s2)

#注意:在Python中,使用+虾宇。只能是字符串和字符串之間搓彻。和其他數(shù)據(jù)類型使用的話不支持
#print("abc" + 10)
#print("123" + 1)
#print(1 + "12" + 12)
#print("hello" + True)

#2. *   字符串重復(fù)
s3 = "good"
print(s3 * 3)

#3.獲取字符串中的某個(gè)字符
"""
類似于列表和元組的使用,通過(guò)索引來(lái)獲取指定位置的字符
注意索引的取值范圍【0~長(zhǎng)度 - 1】嘱朽,同樣會(huì)出現(xiàn)索引越界
訪問(wèn)方式:字符串名稱[索引]
"""
s4 = "abcdef"
print(s4[1])
#print(s4[10])  #IndexError: string index out of range

#獲取字符串的長(zhǎng)度:len()
#遍歷字符串,和list旭贬,tuple的用法完全相同
for element in s4:
    print(element)
for index in range(0,len(s4)):
    print(s4[index])
for index,str in enumerate(s4):
    print(index,str)

#4.截取字符串【切片】
str1 = "hello world"
#指定區(qū)間
print(str1[3:7])
#從指定位置到結(jié)尾,包含指定位置
print(str1[3:])
#從開(kāi)頭到指定位置搪泳,但是不包含指定位置
print(str1[:7])

str2 = "abc123456"
print(str2[2:5]) #c12
print(str2[2:])  #c123456
print(str2[2::2])  #c246
print(str2[::2])   #ac246
print(str2[::-1])  #654321cba   倒序
print(str2[-3:-1])  #45   -1表示最后一個(gè)字符

#5.判斷一個(gè)子字符串是否在原字符串中
#in  not in
str3 = "today is a good day"
print("good"  in str3)
print("good1"  not in str3)

4.格式化輸出

通過(guò)%來(lái)改變后面字母或者數(shù)字的含義稀轨,%被稱為占位符

%d 整數(shù)

%f 浮點(diǎn)型,特點(diǎn):可以指定小數(shù)點(diǎn)后的位數(shù)

%s 字符串

代碼演示:

#6.格式化輸出
num = 10
string1 = "hello"
print("string1=",string1,"num=",num)
#注意:變量的書(shū)寫(xiě)順序盡量和前面字符串中出現(xiàn)的順序保持一致
print("string1=%s,num=%d"%(string1,num))

f = 12.247
print("string1=%s,num=%d,f=%f"%(string1,num,f))
#需求:浮點(diǎn)數(shù)保留小數(shù)點(diǎn)后兩位
print("string1=%s,num=%d,f=%.2f"%(string1,num,f))    #round(12.247,2)

5.常用轉(zhuǎn)義字符

通過(guò)\來(lái)改變后面字母或者特殊字符的含義

\t 相當(dāng)于tab鍵

\n 相當(dāng)于enter鍵

\b 相當(dāng)于backspace

代碼演示:

#7.轉(zhuǎn)義字符
string2 = "hello\tworld"
string21 = "hello   world"
print(string2)
print(string21)

#換行:\n    多行注釋
string3 = "hello\nPython"
string31 = """hello
python2354623
"""
print(string3)
print(string31)

#需求:"hello"
print("\"hello\"")

#C:\Users\Administrator\Desktop\SZ-Python1805\Day6\視頻
print("C:\\Users\\Administrator\\Desktop")
#注意;如果一個(gè)字符串中有多個(gè)字符需要轉(zhuǎn)義森书,則可以在字符串的前面添加r,可以避免對(duì)字符串中的每個(gè)特殊字符進(jìn)行轉(zhuǎn)義
print(r"C:\Users\Administrator\Desktop")

四靶端、String字符串【2】

1.常用功能

1.1獲取長(zhǎng)度和次數(shù)

代碼演示:

#1.計(jì)算字符串長(zhǎng)度  len
#類似于list和tuple的中獲取長(zhǎng)度的用法
str1 = "hfufhja"
l = len(str1)
print(l)

#2,計(jì)算某個(gè)字符或者子字符串在原字符串中出現(xiàn)的次數(shù)   count
str2 = "this is a good day good day"
#count(str,[start,end])
#在整個(gè)字符串中進(jìn)行查找
print(str2.count("day"))
#在指定區(qū)間內(nèi)進(jìn)行查找
print(str2.count("day",3,10))
1.2大小寫(xiě)轉(zhuǎn)換

代碼演示:

#注意:使用字符串中的功能谎势,一般情況下,都是生成一個(gè)新的字符串杨名,原字符串沒(méi)有發(fā)生任何變化
#3.大小寫(xiě)字母轉(zhuǎn)換
#lower()   將字符串中的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)
str31 = "Today Is a Good day"
astr31 = str31.lower()
print(astr31)

#uppper()   將字符串中小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)
str32 = "Today Is a Good day"
astr32 = str2.upper()
print(astr32)

#swapcase()     將字符串中小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)脏榆,大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)
str33 = "Today Is a Good day"
astr33 = str33.swapcase()
print(astr33)

#capitalize()   將一句英文中首單詞的首字母轉(zhuǎn)化為大寫(xiě),其他小寫(xiě)
str34 = "today Is a Good day"
astr34 = str34.capitalize()
print(astr34)

#title()       將一句英文中每個(gè)單詞的首字母大寫(xiě)
str35 = "today is a good day"
astr35 = str35.title()
print(astr35)
1.3整數(shù)和字符串轉(zhuǎn)換

代碼演示:

4.字符串和數(shù)字之間的轉(zhuǎn)換
#int()     float()      str()
#eval(str)   將str轉(zhuǎn)換為有效的表達(dá)式台谍,參與運(yùn)算须喂,并返回運(yùn)算結(jié)果
num1 = eval("123")
print(num1)
#print("123")
print(type(num1))
print(int("123"))

#eval和int將+和-當(dāng)做正負(fù)號(hào)處理
print(eval("+123"))
print(int("+123"))
print(eval("-123"))
print(int("-123"))

#將12+3字符串轉(zhuǎn)換為了有效的表達(dá)式,并運(yùn)算了結(jié)果
print(eval("12+3"))    #15
#不成立
#print(int("12+3"))   #ValueError: invalid literal for int() with base 10: '12+3'

print(eval("12-3"))   #9
#print(int("12-3"))    #ValueError: invalid literal for int() with base 10: '12-3'

#print(eval("a123"))  #NameError: name 'a123' is not defined
#print(int("a123"))  #ValueError: invalid literal for int() with base 10: 'a123'

#總結(jié):注意區(qū)分eval和int【eval:轉(zhuǎn)換有效的表達(dá)式   int:將字符串轉(zhuǎn)換為整型】
1.4填充

代碼演示:

#5.填充【了解】
#center(width[,fillchar])  返回一個(gè)指定寬度的居中字符串趁蕊,width是填充之后整個(gè)字符串的長(zhǎng)度坞生,fillchar為需要填充的字符串,默認(rèn)使用空格填充
str1 = "hello"
print(str1.center(20))
print(str1.center(10,"*"))

#ljust(width[,fillchar]) 返回一個(gè)指定寬度的字符串掷伙,將原字符串居左對(duì)齊是己,width是填充之后整個(gè)字符串的長(zhǎng)度
print(str1.ljust(40,"%"))

#rjust width[,fillchar])  返回一個(gè)指定寬度的字符串,將原字符串居右對(duì)齊任柜,width是填充之后整個(gè)字符串的長(zhǎng)度
print(str1.rjust(40,"%"))

#zfill(width)   返回一個(gè)指定寬度的字符串,將原字符串居右對(duì)齊,剩余的部分使用的數(shù)字0填充
print(str1.zfill(40))
1.5查找

代碼演示:

#6.查找【掌握】
str2 = "abcdefhello123hello"
#find(str[,start,end])  從左到右依次檢測(cè)卒废,str是否在原字符串中,宙地,也可以指定查找的范圍
#特點(diǎn);得到的子字符串第一次出現(xiàn)的開(kāi)始字符的下標(biāo)摔认,如果查找不到則返回-1
print(str2.find("hello"))    #6
print(str2.find("e"))
print(str2.find("yyy"))    #-1
print(str2.find("e",3,10))

#rfind(str[,start,end])   類似于find,從右向左進(jìn)行檢測(cè)
print(str2.rfind("hello"))  #14

#index   和find的使用基本相同宅粥,唯一的區(qū)別在于如果子字符串查找不到参袱,find返回-1,而index則直接報(bào)錯(cuò)
print(str2.index("hello"))
#print(str2.index("yyy"))   #ValueError: substring not found

#rindex  和rfind的使用基本相同

#max(str)   獲取str中最大的字母【在字典中的順序】
#"abcdefhello123hello"
print(max(str2))

str3 = "46732647"
print(max(str3))

#min(str)  獲取str中最小的字母【在字典中的順序】
1.6提取

代碼演示:

#7.提取字符串
#strip(str)    使用str作為條件提取字符串秽梅,除了兩頭指定的字符串
str1 = "********today is *********a good day*******"
print(str1.strip("*"))   #today is *********a good day

#lstrip(str)    提取字符串抹蚀,除了左邊的指定字符串
str11 = "********today is *********a good day*******"
print(str11.lstrip("*"))

#rstrip()
str12 = "********today is *********a good day*******"
print(str12.rstrip("*"))
1.7分割和合并

代碼演示:

#8.分割和合并【掌握:正則表達(dá)式】
#split(str[,num)]   將str作為分隔符切割原字符串,結(jié)果為一個(gè)列表,如果制定了num风纠,則僅使用num個(gè)字符串截取原字符串
str3 = "today is a good day"
print(str3.split(" "))   #['today', 'is', 'a', 'good', 'day']
print(str3.split(" ",2))   #['today', 'is', 'a good day']

#splitlines(flag)   按照換行符【\n况鸣,\r,\r\n】分隔牢贸,結(jié)果為列表
#flag:False或者不寫(xiě)竹观,則表示忽略換行符;如果True潜索,則表示保留換行符
str4 = """today
is
a
good
day
"""
print(str4.splitlines(True))   #['today', 'is', 'a', 'good', 'day']    ['today\n', 'is\n', 'a\n', 'good\n', 'day\n']

#join(list)    將原字符串作為連接符號(hào)臭增,將列表中的元素分別連接起來(lái),結(jié)果為字符串竹习,作用和split是相反的
str5 = "*"
list1 = ["shangsan","lisi","jack"]
print(str5.join(list1))
1.8替換

代碼演示:

#9.替換
#replace(old,new[,max])   用new的字符串將old的字符串替換掉.max表示可以替換的最大次數(shù)【從左到右】
str1 = "this is a easy test test test test"
print(str1.replace("test","exam"))
print(str1.replace("test","exam",2))

#使用場(chǎng)景:在一定情境下誊抛,可以實(shí)現(xiàn)字符串的簡(jiǎn)單加密,加密規(guī)則可以自定義
#maketrans()   創(chuàng)建字符映射的轉(zhuǎn)換表,結(jié)果為字典整陌,通過(guò)key:value的方式
#translate(table)

t = str.maketrans("aco","123")
print(t)   #{97: 49, 99: 50, 111: 51}

str2 = "today is a good day"
print(str2.translate(t))  #t3d1y is 1 g33d d1y
1.9判斷

代碼演示:

#10.判斷
#isalpha()   如果字符串中至少包含一個(gè)字符并且所有的字符都是字母拗窃,才返回True
print("".isalpha())
print("abc".isalpha())
print("abc123".isalpha())   #False

#isalnum   如果字符串中至少包含一個(gè)字符并且所有字符都是字母或者數(shù)字的時(shí)候才返回True
print("".isalnum())   #False
print("abc".isalnum())
print("abc123".isalnum())
print("123".isalnum())
print("1abc".isalnum())
print("1abc¥".isalnum())  #False

#isupper  如果字符串中至少包含一個(gè)字符并且出現(xiàn)的字母必須是大寫(xiě)字母才返回True瞎领,數(shù)字的出現(xiàn)沒(méi)有影響
print("".isupper())
print("aBC".isupper())
print("123A".isupper())   #True
print("abc".isupper())

#islower

#istitle   每個(gè)單詞的首字母必須全部大寫(xiě)才返回True
print("Good Day".istitle())
print("good Day".istitle())

#isdigit() 【掌握】   如果字符串中只包含數(shù)字,則返回True
print("abc123".isdigit())
print("2364".isdigit())

#需求:將用戶從控制臺(tái)輸入的字符串轉(zhuǎn)化為整型【全數(shù)字】
str = input()
if str.isdigit():
    int(str)
    print("yes")

1.10前綴和后綴

代碼演示:

#11.前綴和后綴【掌握】  子字符串是連續(xù)的
#startswith
str1 = "helloPython"
print(str1.startswith("hello"))

#endswith
print(str1.endswith("on"))
1.11編解碼

代碼演示:

#12.字符串編碼和解碼
#注意:主要針對(duì)的是中文
#encode()   默認(rèn)的編碼格式為utf-8
str2 = "this is 千鋒教育"
print(str2.encode())
print(str2.encode("utf-8"))
print(str2.encode("gbk"))

#decode()   bytes對(duì)象
#\xe5\x8d\x83\xe9\x94\x8b\xe6\x95\x99\xe8\x82\xb2
#print(r"\xe5\x8d\x83\xe9\x94\x8b\xe6\x95\x99\xe8\x82\xb2".decode())    錯(cuò)誤
1.12ASCII碼轉(zhuǎn)換

代碼演示:

#13随夸。ASCII嗎的轉(zhuǎn)換
#ord()
print(ord("A"))
print(ord("0"))

#chr()
print(chr(65))
print(chr(110))

2.練習(xí)

需求一:

#需求1:統(tǒng)計(jì)下面字符串中每個(gè)單詞的出現(xiàn)次數(shù)九默,并生成一個(gè)字典,單詞為key宾毒,次數(shù)為value
"""
實(shí)現(xiàn)思路:
1.以空格為切割符切割字符串
2.遍歷第一步中得到的list
3.將單詞提取出來(lái)驼修,去一個(gè)字典中判斷
4.如果單詞不存在,就以該單詞作為key诈铛,1作為value存儲(chǔ)到字典中
5.如果單詞存在乙各,將對(duì)應(yīng)key的value遞增1【修改指定key的value】
"""
str1 = "tomorrow is sunny day tomorrow is sunny day tomorrow is wind day"
dict1 = {}    #創(chuàng)建一個(gè)空字典,備用
list1 = str1.split(" ")    #切割字符串
#方式一:get()
"""
for word in list1:      #遍歷列表
    value = dict1.get(word)    #None
    if value == None:
        dict1[word] = 1      #往字典中添加鍵值對(duì)
    else:
        dict1[word] += 1     #給字典中指定key的value修改值

print(dict1)
"""
#方式二:成員運(yùn)算符
for word in list1:      #遍歷列表
    if word not in dict1:
        dict1[word] = 1
    else:
        dict1[word] += 1
print(dict1)

需求二:

#需求2:從控制臺(tái)輸入一個(gè)字符串幢竹,表示時(shí)間耳峦,編寫(xiě)程序,獲取這個(gè)時(shí)間的下一秒
#例如輸入:12:23:33    輸出12:23:34
"""
思路分析:
1.將字符串切割焕毫,得到時(shí)分秒的數(shù)據(jù)
2.得到時(shí)間的下一秒:給秒加1
3.12:23:59----》12:24:00    當(dāng)秒數(shù)增加完之后為60的時(shí)候妇萄,分鐘需要增加1,秒數(shù)應(yīng)該置為0
4.12:59:59----》13:00:00   當(dāng)分鐘增加完之后為60的時(shí)候咬荷,時(shí)鐘需要增加1冠句,分鐘置為0
5.當(dāng)時(shí)鐘增加完之后為24的時(shí)候,時(shí)鐘置為0
"""
timeStr = input("請(qǐng)輸入正確格式的時(shí)間:")

timeList = timeStr.split(":")
h = int(timeList[0])
m = int(timeList[1])
s = int(timeList[2])

s += 1

if s == 60:
    m += 1
    s = 0
    if m == 60:
        h += 1
        m = 0
        if h == 24:
            h = 0

print("%.2d:%.2d:%.2d"%(h,m,s))

#%.2f

需求三:

#需求3:實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車功能
"""
思路分析
1.引導(dǎo)用戶選擇商品【提供】
2.引導(dǎo)用戶輸入金額
3.加入購(gòu)物車
4.查看購(gòu)物車幸乒,計(jì)算余額
"""
product_list  = [
    ("Mac",10000),
    ("kindle",500),
    ("iphone x",8000),
    ("bike",3000)
]

saving = input("請(qǐng)輸入金額:")

#定義一個(gè)列表懦底,充當(dāng)購(gòu)物車
shopping_car  = []

#判斷金額是否是數(shù)字
if saving.isdigit():
    #將saving轉(zhuǎn)換為整數(shù)
    saving = int(saving)

    while True:
        #打印商品信息,提供給用戶選擇
        for index,p in enumerate(product_list):
            print(index,":",p)

        #引導(dǎo)用戶選擇商品
        choice = input("請(qǐng)輸入商品的編號(hào)[輸入q退出]:")

        #判斷編號(hào)是否合法
        if choice.isdigit():
            choice = int(choice)

            if choice >= 0 and choice < len(product_list):
                #將用戶選擇的商品從product_list取出來(lái)
                item = product_list[choice]   #元組

                #item[0] :商品名稱   item[1]:商品的價(jià)格
                if item[1] <= saving:

                    #saving減少
                    saving -= item[1]

                    #需要將商品添加到購(gòu)物車對(duì)應(yīng)的list中
                    shopping_car.append(item)

                else:
                    print("余額不足")

            else:
                print("不存在的編號(hào)")
        elif choice == "q":
            print("-------你已經(jīng)購(gòu)買(mǎi)如下商品:-------")
            for i in shopping_car:
                print(i)

            print("你還剩余%d元錢(qián)"%(saving))

            break
        else:
            print("不合法的編號(hào)")
else:
    print("invalid input")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末罕扎,一起剝皮案震驚了整個(gè)濱河市聚唐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腔召,老刑警劉巖杆查,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異臀蛛,居然都是意外死亡亲桦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)浊仆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)客峭,“玉大人,你說(shuō)我怎么就攤上這事抡柿√蚶牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵洲劣,是天一觀的道長(zhǎng)备蚓。 經(jīng)常有香客問(wèn)我课蔬,道長(zhǎng),這世上最難降的妖魔是什么郊尝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任购笆,我火速辦了婚禮,結(jié)果婚禮上虚循,老公的妹妹穿的比我還像新娘同欠。我一直安慰自己,他們只是感情好横缔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布铺遂。 她就那樣靜靜地躺著,像睡著了一般茎刚。 火紅的嫁衣襯著肌膚如雪襟锐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天膛锭,我揣著相機(jī)與錄音粮坞,去河邊找鬼。 笑死初狰,一個(gè)胖子當(dāng)著我的面吹牛莫杈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奢入,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼筝闹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了腥光?” 一聲冷哼從身側(cè)響起关顷,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎武福,沒(méi)想到半個(gè)月后议双,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捉片,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年平痰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片界睁。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡觉增,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翻斟,到底是詐尸還是另有隱情贩猎,我是刑警寧澤亿乳,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布佑惠,位于F島的核電站宙址,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏债热。R本人自食惡果不足惜砾嫉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窒篱。 院中可真熱鬧焕刮,春花似錦、人聲如沸墙杯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)高镐。三九已至溉旋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嫉髓,已是汗流浹背观腊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留算行,地道東北人梧油。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像州邢,于是被迫代替她去往敵國(guó)和親婶溯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一偷霉、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 5,813評(píng)論 2 16
  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面类少,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí)叙身,c語(yǔ)言,java語(yǔ)言硫狞,單片機(jī)的匯編語(yǔ)言等信轿;大學(xué)畢...
    oceanfive閱讀 3,068評(píng)論 0 7
  • 首先我們創(chuàng)建一個(gè)字符串str1: str1='good good study,day day up' 1. fin...
    Hello_Hui閱讀 752評(píng)論 0 7
  • 今夜月色很美 - 01 - 或許人一生都在感慨财忽,時(shí)間腳步匆匆。 舊歷年走完的當(dāng)口泣侮,就被推成出新到新年即彪。時(shí)間,真是一...
    栗_閱讀 961評(píng)論 0 1
  • 這是里約奧運(yùn)會(huì)第二天我們中國(guó)獲得3枚金牌活尊,2枚銀牌隶校,3枚銅牌漏益。 三枚金牌的獲得者分別是: ①?gòu)垑?mèng)雪十米氣槍奪的金牌...
    7515b237f6ce閱讀 341評(píng)論 0 0