Python 流程控制與循環體

Python 的創始人爲吉多·範羅蘇姆(Guido van Rossum).1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承.Python是純粹的自由軟件,源代碼和解釋器CPython遵循 GPL(GNU General Public License)協議.關於python的哲學:python崇尚:"優雅"、"明確"、"簡單",Python是用最簡單最優雅最明確的方法來解決問題.python

IF 條件判斷語句

單分支結構: 單分支結構的判斷是最簡單的一種形式,若是知足條件則執行,不然跳過IF語句.git

import sys

num = 0

if num == 0:
    print("數值確實等於零!")

雙分支結構: 雙分支用來判斷兩種不一樣的狀況,好比要麼爲真要麼爲假.shell

import sys

num=0

if num == 0:
    print("數值確實等於零!")
else:
    print("你在逗我嗎,這不是零,皮一下很開心!")

多分支結構: 多分枝結構用來判斷大多數狀況,其給予每一個結果一個返回值.小程序

import sys

score = 88.8
level = int(score % 10)

if level >= 10:
    print('Level A+')
elif level == 9:
    print('Level A')
elif level == 8:
    print('Level B')
elif level == 7:
    print('Level C')
elif level == 6:
    print('Level D')
else:
    print('Level E')

模擬登錄(1): 模擬用戶登陸小實驗,輸入密碼必須不顯示.api

import sys
import getpass

name=input("輸入用戶名:")
pwd=getpass.getpass("請輸入密碼:")

if name == "lyshark" and pwd=="123123":
    print("歡迎,lyshark,登錄!")
else:
    print("用戶名或密碼錯誤!")

猜數字遊戲(2): 猜數字小遊戲,輸入參數返回指定結果.app

# -*- coding: utf-8 -*-
import sys

my_num = 38
user_input = int(input("輸入一個數字:"))

if user_input == my_num:
    print("你猜對了!")
elif user_input < my_num:
    print("猜小了!")
else:
    print("猜大了!")


WHILE 循環語句

死循環: 演示一個死循環的小例子.框架

import os

count = 0
while True:
    print("這是一個死循環...",count)
    count +=1

循環打印: 循環打印0-9這幾個數字,且結果不要換行,在一行中輸出.iphone

import os

count = 0
while count <= 9:
    print(count, end=' ')
    count += 1

中斷循環: 演示一個while循環被中斷的狀況.函數

import os

count = 0
while count <=9:
    print(count, end=' ')
    if count == 5:
        break
    count += 1
else:
    print('end')

實例1: 打印指定字符串,循環打印其中的每個元素,並每次遞減.工具

import os

url="www.baidu.com"

while url:
    print(url)
    url=url[1:]

#--輸出結果-------------------------
www.baidu.com
ww.baidu.com
w.baidu.com
.baidu.com
baidu.com
aidu.com
idu.com
du.com
u.com
.com
com
om
m

實例2: 循環打印一些數據,這裏打印0-9並每次遞增.

import os

x=0;y=10

while x<y:
    print(x)
    x+=1

#--輸出結果-------------------------
0
1
2
3
4
5
6
7
8
9

實例3: 打印一個字符串,循環打印,打印完成後輸出game over.

import os

url="www.baidu.com"

while url:
    print(url)
    url=url[:-1]
else:
    print("game over")

#--輸出結果-------------------------
www.baidu.com
www.baidu.co
www.baidu.c
www.baidu.
www.baidu
www.baid
www.bai
www.ba
www.b
www.
www
ww
w
game over

實例4: 逐一顯示指定列表中的全部元素,這裏有三種方法.

>>> list=[1,2,3,4,5,6]
>>> count =0
>>>
>>> while list:
...     print(list[0])
...     list.pop(0)
...

>>> list=[1,2,3,4,5,6]
>>> while list:
...     print(list[-1])
...     list.pop()
...

>>> list=[1,2,3,4,5,6]
>>> while count < len(list):
...     print(list[count])
...     count+=1
...

實例5: 求100之內全部偶數之和,使用嵌套判斷.

>>> num=0
>>> sum=0
>>> while num <=100:
...     if num %2 ==0:
...             sum=sum+num
...     else:
...             pass
...  num=num+1

實例6: 逐一顯示指定字典的全部鍵,並於顯示結束後說明總鍵數.

>>> d1 = {'x':1,'y':23,'z':78}
>>> keylists = d1.keys()
>>> while keylists:
        print(keylists[0])
        keylists.pop[0]
    else:
        print(len(d1))

實例7: 建立一個包含了100之內全部奇數的列表.

>>> l1 = []
>>> x = 1
>>> while x < 100:
        l1.append(x)
        x += 2

實例8: 列表l1 = [0,1,2,3,4,5,6],列表l2 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],以第一個列表中的元素爲鍵,以第二個列表中的元素爲值生成新字典d1.

>>> l1 = [0,1,2,3,4,5,6]
>>> l2 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
>>> d1 = {}
>>> count = 0
>>> if len(l1) == len(l2):
    while count < len(l1):
        d1[l1[count]] = l2[count]
        count += 1

>>> print(d1)

實例9: 循環並打印相關文字,當到達100次的時候退出.

count = 0
while True:
    print("hello lyshark:",count)
    count +=1
    if count == 100:
        print("break")
        break

實例10: 模擬登錄小程序,程序啓動要求輸入密碼,並判斷若是次數小於3次則登錄成功,不然禁止登錄.

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import getpass
import os

name = "lyshark"
pwd = "123123"
count = 0

while True:
    if count < 3:
        print("請輸入用戶名和密碼:")
        username = input("用戶名:")
        password = getpass.getpass("密碼:")

        if username == name and password == pwd:
            print("恭喜你登錄成功!")
            break
        else:
            print("登錄失敗!用戶名或者密碼錯誤")
    else:
        print("你已經輸錯3次,正在退出....")
        break

    count += 1


FOR 循環遍歷語句

列表遍歷: 經過使用for循環打印一個list列表中的元素.

import os

names = ["tom","admin","lyshark","jack"]
for x in names:
    print(x)

列表迭代: 對於一個序列來講,也能夠經過索引進行迭代.

import os

names = ["tom","admin","lyshark","jack"]
for x in range(len(names)):
    print(names[x])

打印序列: 經過for循環,遍歷並打印一個序列.

import os

T = [(1,2),(3,4),(5,6),(7,8)]
for (a,b) in T:
    print(a,b)

循環遍歷: 遍歷0-9範圍內的全部數字,並經過循環控制語句打印出其中的奇數.

import os

for i in range(10):
    if i % 2 == 0:
        continue
    print(i, end=' ')

循環遍歷: 經過循環控制語句打印一個列表中的前3個元素.

import os

names = ['Tom', 'Peter', 'Jerry', 'Jack', 'Lilly']
for i in range(len(names)):
    if i >= 3:
        break
    print(names[i])

循環遍歷: 經過for循環打印99乘法表.

import os

for j in range(1, 10):
    for i in range(1, j+1):
        print('%d*%d=%d' % (i, j, i*j), end='\t')
        i += 1
    print()
    j += 1

range()函數: 經過使用range函數,每隔必定的個數元素挑選一個元素.

>>> string="hello world my name lyshark"
>>> for i in range(0,len(string),2):
...     print(string[i])

range()函數: 經過range遍歷,修改列表元素,在原來元素的基礎上修改元素.

>>> list=[1,2,3,4,5]
>>> for i in range(len(list)):
...     list[i]+=1
...
>>> list
[2, 3, 4, 5, 6]

zip()函數: zip函數經常使用於動態的構造字典.

>>> L1 = [1,2,3,4,5]
>>> L2 = ['a','b','c','d','e',]
>>> zip(L1,L2)
>>> 
>>> keys = [1,2,3,4,5,6,7]
>>> vaules = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
>>> D = {}
>>> for (k,v) in zip(keys,values)
       D[k] = v
>>> D

實例1: 逐一分開顯示指定字典d1中的全部元素,也就是字典遍歷打印.

>>> d1 = {'x':123,'y':321,'z':734}
>>> for (k,v) in d1.items():
    print(k,v)
    
y 321
x 123
z 734

實例2: 逐一顯示列表中l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']中索引爲奇數的元素.

>>> l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
>>> 
>>> for i in range(1,len(l1),2):
    print(l1[i])

實例3: 將屬於列表l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],但不屬於列表l2=['Sun','Mon','Tue','Thu','Sat']的全部元素定義爲一個新列表l3,並加入到其中.

>>> l1=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] 
>>> l2=['Sun','Mon','Tue','Thu','Sat']
>>> l3 = []
>>> for i in l1:
>>>     if i not in l2:
>>>         l3.append(i)

實例4: 將屬於列表namelist=['stu1','stu2','stu3','stu4','stu5','stu6','stu7'],刪除列表removelist=['stu3','stu7','stu9'],請將屬於removelist列表中的每一個元素從namelist中移除(屬於removelist,但不屬於namelist的忽略便可).

>>> namelist=['stu1','stu2','stu3','stu4','stu5','stu6','stu7']
>>> removelist=['stu3','stu7','stu9']
>>> for i in removelist:
>>>     if i in namelist:
>>>         namelist.remove(i)
>>> print(namelist)

實例5: 給指定的一個列表加編號,使用enumerate加編號.

>>> temp=["手機","電腦","玩具"]
>>> for (x,y) in enumerate(temp):
    print(x,y)

    
0 手機
1 電腦
2 玩具

小總結: 實現讓用戶不斷的猜年齡,但只給最多3次機會,再猜不對就退出程序.

#!/usr/bin/env python
# -*- coding:utf-8 -*-

age = 22
count = 0

for i in range(10):
    if count < 3:
        a = int(input("請輸入一個猜想的數:"))
        if a == age:
            print("恭喜你,答對了")
            break
        elif a > age:
            print("你猜的數字大了")
        else:
            print("你猜的數字小了")
    else:
        b = input("這都猜不對,你繼續玩嗎?(yes or not):")
        if b == 'yes':
            count = 0
            continue
        else:
            print("Bye!下次再玩")

    count += 1


跳過執行與跳出語句

pass語句: pass是爲了保持程序結構的完整性,該語句不作任何事情,通常用作佔位語句.

>>> for ch in "LyShark":
...     if ch == "h":
...             pass
...             print("這裏執行了pass語句")
...     print("字符:",ch)
...
#--輸出結果-------------------------
字符: L
字符: y
字符: S
這裏執行了pass語句
字符: h
字符: a
字符: r
字符: k

break語句: break語句用來終止循環語句,即便循環沒有結束任然要執行.

>>> for ch in "LyShark":
...     if ch == "a":
...             break
...     print("字符:",ch)
...
#--輸出結果-------------------------
字符: L
字符: y
字符: S
字符: h

continue語句: 該語句語句用來告訴Python跳過當前循環的剩餘語句,而後繼續進行下一輪循環.

>>> for ch in "LyShark":
...     if ch == "a":
...             continue
...     print("字符:",ch)
...
#--輸出結果-------------------------
字符: L
字符: y
字符: S
字符: h
字符: r
字符: k


本章小總結(課後練習)

實現元素分類: 有以下值集合[11,22,33,44,55,66,77,88,99],將全部大於66的值保存至字典的第一個key中,將小於66的值保存至第二個key的值中,即:{'k1': 大於66的全部值,'k2': 小於66的全部值},代碼以下:

list= [11,22,33,44,55,66,77,88,99]
bignum=[]
smallnum=[]
dir={}
for num in list:
    if num>66:
        bignum.append(num)
    if num<66:
        smallnum.append(num)
    else:
        pass
dir['k1']=bignum
dir['k2']=smallnum
print(dir)

實現元素查找: 查找元素,移動空格,並查找以a或A開頭,而且以c結尾的全部元素.

li = ["alec", " aric", "Alex", "Tony", "rain"]
tu = ("alec", " aric", "Alex", "Tony", "rain")
dic = {'k1': "alex", 'k2': ' aric',  "k3": "Alex", "k4": "Tony"}
 
for i in li:
    if i.strip().capitalize().startswith('A') and i.strip().endswith('c'):
        print(i)
for i in tu:
    if i.strip().capitalize().startswith('A') and i.strip().endswith('c'):
        print(i)
for i in dic.values():
    if i.strip().capitalize().startswith('A') and i.strip().endswith('c'):
        print (i)

實現商品輸出: 輸出商品列表,用戶輸入序號,顯示用戶選中的商品.

#方法一
l1=[1,2,3,4]
l2=["手機", "電腦", '鼠標墊', '遊艇']
d=dict(zip(l1,l2))
print(d)
num=input("請輸入商品編號:")
print("你選擇的商品爲 %s" %d[int(num)])
 
#方法二
li = ["手機", "電腦", '鼠標墊', '遊艇']
for k, i in enumerate(li):
    print(k,i)
k=input("請輸入商品編號:")
print("你選擇的商品爲 %s" % li[int(k)])

實現命令行: 實現一個簡單的命令行小工具框架,可自行添加擴展功能.

import sys
import os
import platform

def help():
    print("By:LyShark www.mkdirs.com")

def clear():
    temp=platform.system()

    if(temp == "Windows"):
        os.system("cls")
    elif(temp == "Linux"):
        os.system("clear")


def main():
    while True:
        try:
            shell=str(input("[Shell] # "))
            if(shell == ""):
                continue
            elif(shell == "exit"):
                exit()
            elif(shell == "help"):
                help()
            elif(shell == "clear"):
                clear()
            else:
                print("未知命令行")
        except Exception:
            continue


# 程序的開頭,模擬C語言寫法.
if __name__ == '__main__':
    main()

實現三級菜單: 實現用戶交互,顯示省市縣三級聯動的選擇.

dic = {
    "河北": {
        "石家莊": ["鹿泉", "藁城", "元氏"],
        "邯鄲": ["永年", "涉縣", "磁縣"],
    },
    "湖南": {
        "長沙":['a','b','c'],
        "株洲":['d','e','f']
    },
    "湖北": {
        "武漢":['g','h','i'],
        "黃石":['j','k','l']
    }
}
for k in dic.keys():
    print(k)
flag=True
while flag:
    n=input("請輸入你所在省:")
    for k in dic.keys():
        if n in dic.keys():
            if k == n:
                for i in dic[n].keys():
                    print(i)
                w = input("請輸入你所在的城市:")
                for i in dic[n].keys():
                    if w in dic[n].keys():
                        if i == w:
                            for k in dic[n][w]:
                                print(k)
                            s=input("請輸入你所在的縣:")
                            for j in dic[n][w]:
                                if s in dic[n][w]:
                                    if j==s:
                                        print("你所在的位置是:%s省%s市%s縣" % (n,w,s))
                                        flag = False
                                        break
                                else:
                                    print('不存在,請從新輸入')
                                    break
                    else:
                        print('不存在,請從新輸入')
                        break
        else:
            print('不存在,請從新輸入')
            break

實現一個購物車: 實現一個購物車小程序,並符合如下要求.

1.要求用戶輸入總資產,例如:20000
2.顯示商品列表,讓用戶根據序號選擇商品,加入購物車
3.購買,若是商品總額大於總資產,提示帳戶餘額不足,不然購買成功

product = [
    ("iphone",5800),
    ("watch",380),
    ("bike",800),
    ("book",120),
    ("computer",4000)
]
 
shopping_car = []
 
salary = input("請輸入你的金錢: ")
if salary.isdigit():
    salary = int(salary)
    while True:
        for i in enumerate(product):
            print(i)
 
        user_choice = input(">>>或者q:")
 
        if user_choice.isdigit():
            user_choice = int(user_choice)
            if user_choice >= 0 and user_choice < len(product):
                p_item = product[user_choice]
                if salary >= p_item[1]:
                    shopping_car.append(p_item[0])
                    salary -= p_item[1]
                    print("你購買了\033[32m%s\033[0m,你的餘額剩餘\033[31m%s\033[0m" % (p_item[0], salary))
                else:
                    print("\033[31m你的餘額不足\033[0m")
            else:
                print("你輸入的項目[%s]不存在,請從新輸入" % user_choice)
        elif user_choice == 'q':
            print("你購買了這些商品:".center(30,"-"))
            for i in shopping_car:
                print("\033[32m%s\033[0m" %i)
            print("\033[31m餘額%s\033[0m" %salary)
            exit()
        else:
            print("你輸入的[%s]不存在" % user_choice)
else:
    print("你輸入的金額不正確!請從新輸入金額!")


實例小總結(提升技巧)

題目(1): 有四個數字:一、二、三、4,能組成多少個互不相同且無重複數字的三位數?各是多少?

程序分析:可填在百位、十位、個位的數字都是一、二、三、4,組成全部的排列後再去掉不知足條件的排列.

>>> for i in range(1,5):
...     for j in range(1,5):
...             for k in range(1,5):
...                     if(i!=k) and (i!=j) and(j!=k):
...                             print(i,j,k)
...
#--輸出結果-------------------------
1 2 3
1 2 4
1 3 2
1 3 4
1 4 2
1 4 3
2 1 3
2 1 4

題目(2): 輸入某年某月某日,程序自動判斷這一天是這一年的第幾天?

程序分析:以10月1日爲例,應該先把前9個月的加起來,而後再加上1天即本年的第幾天,特殊狀況,閏年且輸入月份大於2時需考慮多加一天.

# -*- coding: UTF-8 -*-
 
year = int(input('year:\n'))
month = int(input('month:\n'))
day = int(input('day:\n'))
 
months = (0,31,59,90,120,151,181,212,243,273,304,334)

if 0 < month <= 12:
    sum = months[month - 1]
else:
    print ('data error')
sum += day
leap = 0
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
    leap = 1
if (leap == 1) and (month > 2):
    sum += 1
print ('it is the %dth day.' % sum)
#--輸出結果-------------------------
year:
2018
month:
10
day:
1
it is the 274th day.

題目(3): 斐波那契數列,又稱黃金分割數列,指的是這樣一個數列:0、一、一、二、三、五、八、1三、2一、3四、….在數學上,費波那契數列是以遞歸的方法來定義.

F0 = 0    (n=0)
F1 = 1    (n=1)
Fn = F[n-1]+ F[n-2](n=>2)

# -*- coding: UTF-8 -*-
 
def fib(n):
    a,b = 1,1
    for i in range(n-1):
        a,b = b,a+b
    return a
 
# 輸出了第10個斐波那契數列
print (fib(10))

題目(4): 輸出9*9乘法口訣表,分行與列考慮,共9行9列,i控制行,j控制列.

import os
import sys

for x in range(1,10):
        print()
        for y in range(1,x+1):
                print("%d*%d=%d "%(y,x,x*y),end="")

題目(5): 寫一個字符串遍歷查找工具,代碼以下.

import os
import sys

ls="Type help() for interactive help, or help(object) for help about object"

find="help"

for x in range(len(ls)):
        temp=len(find)
        if str(ls[x:x+temp]) == str(find):
                print(ls[x:x+temp],x)
                break

題目(6): 經過使用time模塊中的sleep函數,讓程序每隔1秒執行一次循環.

import os
import time

dic={1:"admin",2:"guest"}

for key,value in dict.items(dic):
        print(key,value)
        time.sleep(1)

題目(7): 經過使用time模塊,對指定的時間格式進行必定的格式化操做.

import os
import time

print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())))   #2019-01-18 15:16:28
time.sleep(2)
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())))

題目(8): 有一對兔子,從出生後第3個月起每月都生一對兔子,小兔子長到第三個月後每月又生一對兔子,假如兔子都不死,問每月的兔子總數爲多少?

程序分析:兔子的規律爲數列 1,1,2,3,5,8,13,21....

import os

f1 = 1
f2 = 1
for i in range(1,22):
    print('%12ld %12ld'%(f1,f2))
    if (i % 3) == 0:
        print("")
    f1 = f1 + f2
    f2 = f1 + f2

題目(9): 判斷101-200之間有多少個素數,並輸出全部素數.

程序分析:判斷素數的方法,用一個數分別去除2,若是能被整除,則代表此數不是素數,反之是素數. 

import os
from math import sqrt
from sys import stdout

h=0
leap=1

for m in range(101,201):
    k = int(sqrt(m + 1))
    for i in range(2,k + 1):
        if m % i == 0:
            leap = 0
            break
    if leap == 1:
        print("%-4d"%m)
        h += 1
        if h % 10 == 0:
            print("")
    leap = 1
print('The total is %d' %h)

題目(10): 輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數.

import os
import string

strs=input("請輸入一個字符串:")

letters=0
space=0
digit=0
others=0

for x in range(len(strs)):
        ch=strs[x]
        if ch.isalpha():
                letters+=1
        elif ch.isspace():
                space+=1
        elif ch.isdigit():
                digit+=1
        else:
                others+=1

print("char=%d,space=%d,digit=%d,others=%d"%(letters,space,digit,others))

題目(11): 讀取db配置文件,並按照文件中的帳號密碼判斷是否容許登錄.

import os
import sys

def login(x,y):
    fp=open("db","r",encoding="utf-8")
    data=fp.readline().split(":")
    count=len(open("db","r").readlines())

    username=data[0]
    password=data[1]
    for i in range(3):
        if x==username.strip() and y==password.strip():
            print("登錄成功")
            break
        else:
            data=fp.readline().split(":")
            username=data[0]
            password=data[1]
            continue
    fp.close()

login("admin","admin")
login("lyshark","lyshark")
相關文章
相關標籤/搜索