方法一:html
lis = [23,34,23,45,67,222,33,78,98,43,2,3,76,-34,-23]
def sortport():
for i in range(len(lis)-1):
for j in range(len(lis)-1-i):
if lis[j] > lis[j+1]:
lis[j],lis[j+1] = lis[j+1],lis[j]
return lis
print(sortport())複製代碼
方法二:python
list = [1,4,1,34,23,54,34]
def maopao(list):
for i in range(len(list)):
for j in range(len(list)-1):
if list[i] > list [j]:
list[j], list[i] = list[i], list[j] #從大到小
print(list)複製代碼
方法一:git
a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
a.sort()
last=a[-1]
for i in range(len(a)-2,-1,-1):
if last==a[i]:
del a[i]
else:
last=a[i]
print(a)複製代碼
方法二:能夠從前面的元素開始判斷去除重複的數字算法
a = [11, 11, 22, 22, 33, 44, 55, 66, 88, 99]
for i in range(len(a)):
for j in range(i + 1 , len(a) - 1):
if a[i] == a[j]:
del a[j]
j -= 1
print(a)複製代碼
一行代碼實現編程
print('\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))複製代碼
for 循環api
for i in range(1, 10):
for j in range(1, i+1):
print('{}x{}={}\t'.format(j, i, i*j),end='')
# print('%d x %d = %d \t'%(i, j, i*j),end='')
print()
# 經過指定end參數的值,能夠取消在末尾輸出回車符,實現不換行。複製代碼
for i in range(1,10):
for j in range(1,i+1):
string = '%d*%d=%d'%(j,i,j*i)
print('%-7s'%string,end="")
print('')
# %-7s意思是字符串長度爲7,當原字符串的長度小於7時,在原字符串右側補空格複製代碼
for i in range(1,10):
for j in range(1,i+1):
print("%d*%d=%-2d "%(i,j,i*j),end=" ")
print()複製代碼
首先,引入一個場寬的概念。在C語言中場寬表明格式化輸出字符的寬度。bash
while循環app
n = 1
while n <= 9:
m = 1
while m<= 9:
print("%d*%d=%2d "%(n,m,n*m), end="")
m += 1
print()
n += 1複製代碼
方法一:dom
def fac():
num = int(input("請輸入一個數字:"))
factorial = 1
# 查看數字是不是負數,0 或者 正數
if num < 0:
print("抱歉,負數沒有階乘")
elif num == 0:
print("0 的階乘爲 1")
else:
for i in range(1, num + 1):
factorial = factorial * i
print("%d 的 階乘爲 %d" % (num, factorial))
fac()複製代碼
方法二:
ide
def factorial(n):
result = n
for i in range(1, n):
result *= i
return result
print(factorial(5))複製代碼
方法三:
def fact(n):
if n == 1:
return 1
return n * fact(n - 1)
print(fact(5))複製代碼
def power(x,n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
print(power(2,3))複製代碼
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
print(calc(*[1,2,3]))複製代碼
L = ['Hello','World','IBM','Apple']
L2 = []
for s in L:
L2.append(s.lower())
print(L2)複製代碼
dict1 = {"A":"a","B":"b","C":"c"}
dict2 = {y:x for x,y in dict1.items()}
print(dict2)複製代碼
num = ["harden","hampard",3,23,45,23,55,3,3,3,3,4356,546]
# print(num.count(3))
# print(num.index(3))
for i in range(num.count(3)): #獲取3出現的次數
ele_index = num.index(3) #獲取首次3出現的座標
num[ele_index] = "3a" #修改3爲3a
print(num)複製代碼
L = ["James","Meng","Xin"]
for i in range(len(L)):
print("Hellow,%s"%L[i])
複製代碼
list1 = [1,2,3,23,65,3,3,9,8]
list2 = [1,2,3,45,65,3,3,87,45]
list3 = list1 + list2
print(list3) #不去重進行兩個列表的組合
print(set(list3)) #去重,類型爲set須要轉化爲list
print(list(set(list3)))複製代碼
方法一:
import random
list1 = []
# chr() 用一個範圍在 range(256)內的(就是0~255)整數做參數,返回一個對應的字符。
for i in range(65,91):
list1.append(chr(i)) #經過for循環遍歷ASCII追加到空列表中
for j in range(97,123):
list1.append(chr(j))
for k in range(48,58):
list1.append(chr(k))
ma = random.sample(list1,6)
print(ma) #獲取到的爲空列表
ma = ''.join(ma) #將列表轉化爲字符串print(ma)複製代碼
方法二:
import random,string
str1 = "0123456789"
str2 = string.ascii_letters
str3 = str1 + str2
ma1 = random.sample(str3,6)
ma1 = ''.join(ma1)
print(ma1)複製代碼
num = float(input('請輸入一個數字: '))
num_sqrt = num ** 0.5
print(' %0.2f 的平方根爲 %0.2f'%(num,num_sqrt))複製代碼
def is_number(s):
try:
float(s)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
return False
# print(is_number('12w3'))
chri = "123w"
print(chri.isdigit()) #檢測字符串是否只由數字組成
print(chri.isnumeric()) #檢測字符串是否只由數字組成,這種方法只針對unicode對象複製代碼
方法一:
num = int(input("請輸入一個數字: "))
if (num % 2) == 0:
print("{0} 是偶數".format(num))
else:
print("{0} 是奇數".format(num))複製代碼
方法二:
while True:
try:
num = int(input('請輸入一個整數: ')) #判斷輸入是否爲整數
except ValueError: #不是純數字須要從新輸入
print("輸入的不是整數!")
continue
if num % 2 == 0:
print("偶數")
else:
print("奇數")
break複製代碼
方法一:
year = int(input("輸入一個年份: "))
if (year % 4) == 0:
if (year % 100) == 0:
if (year % 400) == 0:
print("{0} 是閏年".format(year)) #整百年能被400整除是閏年
else:
print("{0} 不是閏年".format(year))
else:
print("{0} 是閏年".format(year)) #非整百年能被4整除爲閏年
else:
print("{0} 不是閏年".format(year))複製代碼
方法二:
year = int(input("輸入一個年份: "))
if (year % 4) == 0 and (year % 100) != 0 or (year % 400) == 0:
print("{0} 是閏年".format(year))
else:
print("{0} 不是閏年".format(year))複製代碼
方法三:
import calendar #日曆模塊
print(calendar.month(2018, 6))
year = int(input("請輸入年份:"))
check_year = calendar.isleap(year)
if check_year == True:
print("%d是閏年"% year)
else:
print("%d是平年"% year)複製代碼
方法一:
# 獲取最大值N = int(input("輸入須要對比大小數字的個數:"))
print("請輸入須要對比的數字:")
num = []
for i in range(1,N+1):
temp = int(input("請輸入第%d個數字:" % i))
num.append(temp)print('您輸入的數字爲:',num)
print('最大值爲:',max(num))複製代碼
方法二:
N = int(input("輸入須要對比大小數字的個數:\n"))
num = [ int(input('請輸入第 %d 個對比數字:\n'%i))for i in range(1,N+1) ]
print('您輸入的數字爲:',num)
print('最大值爲:',max(num))複製代碼
斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖爲例子而引入,故又稱爲「兔子數列」,指的是這樣一個數列:一、一、二、三、五、八、1三、2一、3四、……在數學上,斐波納契數列以以下被以遞歸的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
斐波那契數列,難點在於算法,還有若是變成生成器,generator,就要用for循環去遍歷可迭代的generator
方法一:
def six():
l = [0,1]
for i in range(10):
arr = l[-2:]
l.append(arr[0]+arr[1])
return(l)
print(six())複製代碼
方法二:遞歸法
def fib_recur(n):
assert n >= 0, "n > 0"
if n <= 1:
return n
return fib_recur(n-1) + fib_recur(n-2)
for i in range(1, 20):
print(fib_recur(i), end=' ')複製代碼
方法三:遞推法
def fib_loop(n):
a, b = 0, 1
for i in range(n + 1):
a, b = b, a + b
return a
for i in range(20):
print(fib_loop(i), end=' ')複製代碼
遞推法,就是遞增法,時間複雜度是 O(n),呈線性增加,若是數據量巨大,速度會越拖越慢
方法四:矩陣
### 1
import numpy
def fib_matrix(n):
res = pow((numpy.matrix([[1, 1], [1, 0]])), n) * numpy.matrix([[1], [0]])
return res[0][0]
for i in range(10):
print(int(fib_matrix(i)), end=', ')
### 2
# 使用矩陣計算斐波那契數列
def Fibonacci_Matrix_tool(n):
Matrix = numpy.matrix("1 1;1 0")
# 返回是matrix類型
return pow(Matrix, n) # pow函數速度快於 使用雙星好 **
def Fibonacci_Matrix(n):
result_list = []
for i in range(0, n):
result_list.append(numpy.array(Fibonacci_Matrix_tool(i))[0][0])
return result_list
# 調用
Fibonacci_Matrix(10)複製代碼
方法五:生成器
def fib_loop_while(max):
a, b = 0, 1
while max > 0:
a, b = b, a + b
max -= 1
yield a
for i in fib_loop_while(10):
print(i,end=',')複製代碼
方法六:類實現內部魔法方法
class Fibonacci(object):
"""斐波那契數列迭代器"""
def __init__(self, n):
""" :param n:int 指 生成數列的個數 """
self.n = n
# 保存當前生成到的數據列的第幾個數據,生成器中性質,記錄位置,下一個位置的數據
self.current = 0
# 兩個初始值
self.a = 0
self.b = 1
def __next__(self):
"""當使用next()函數調用時,就會獲取下一個數"""
if self.current < self.n:
self.a, self.b = self.b, self.a + self.b
self.current += 1
return self.a
else:
raise StopIteration
def __iter__(self):
"""迭代器的__iter__ 返回自身便可"""
return self
if __name__ == '__main__':
fib = Fibonacci(15)
for num in fib:
print(num,end=',')
# for循環的本質是經過不斷調用next()函數實現的
for x in [1, 2, 3, 4, 5]:
pass
# 至關於
# 首先獲取可迭代對象
it = iter([1, 2, 3, 4, 5])
# while next
while True:
try:
next(it)
except StopIteration:
# 遇到StopIteration就退出循環
break複製代碼
# 獲取輸入十進制數
dec = int(input("輸入數字:"))
print("十進制數爲:", dec)
print("轉化二進制爲:", bin(dec))
print("轉化八進制爲:", oct(dec))
print("轉化十六進制爲:", hex(dec))複製代碼
# 定義函數
def add(x, y):
""" 相加 """
return x + y
def subtract(x, y):
""" 相減 """
return x - y
def multiply(x, y):
""" 相乘 """
return x * y
def divide(x, y):
""" 相除 """
return x / y
# 用戶輸入print("選擇運算:")
print("一、相加")
print("二、相減")
print("三、相乘")
print("四、相除")
choice = input("輸入你的選擇(1/2/3/4):")
num1 = int(input("輸入第一個數字:"))
num2 = int(input("輸入第二個數字:"))
if choice == "1":
print(num1, "+", num2, "=", add(num1, num2))
elif choice == "2":
print(num1, "-", num2, "=", subtract(num1, num2))
elif choice == "3":
print(num1, "*", num2, "=", multiply(num1, num2))
elif choice == "4":
if num2 != 0:
print(num1, "/", num2, "=", divide(num1, num2))
else:
print("分母不能爲0")
else:
print("非法輸入")複製代碼
# 引入日曆模塊
import calendar
# 輸入指定年月
yy = int(input("輸入年份:"))
mm = int(input("輸入月份:"))
# 顯示日曆
print(calendar.month(yy, mm))複製代碼
#測試實例一
print("測試實例一")
str = "runoob.com"print(str.isalnum())
#判斷全部字符都是數字或者字母
print(str.isalpha()) #判斷有所字符都是字母
print(str.isdigit()) #判斷有所字符都是數字
print(str.islower()) #判斷有所字符都是小寫
print(str.isupper()) #判斷有所字符都是大寫
print(str.istitle()) #判斷有所單詞都是首字母大寫,像標題
print(str.isspace()) #判斷有所字符都是空白字符、\t、\r、\n
print("-------------------------")
print("測試實例二")
str = "Bake corN"
print(str.isalnum())
print(str.isalpha())
print(str.isdigit())
print(str.islower())
print(str.isupper())
print(str.istitle())
print(str.isspace()) 複製代碼
str = "https://juejin.im/user/"
print(str.upper()) # 把全部字符中的小寫字母轉化成大寫字母
print(str.lower()) # 把全部字符中的大寫字母轉化小寫字母
print(str.capitalize()) # 把第一個字母轉化成大寫字母,其他小寫
print(str.title()) # 把每一個單詞的第一個字母轉化爲大寫,其他爲小寫複製代碼
import calendar
monthRange = calendar.monthrange(2019,11)
print(monthRange)複製代碼
# 引入 datetime 模塊
import datetimedef getYesterday():
today = datetime.date.today()
oneday = datetime.timedelta(days=1)
yesterday = today - oneday
return yesterday
print(getYesterday())複製代碼
掌握使用自定義函數實現水仙花數和徹底數
水仙花數(narcissistic number)中的narcissistic本意是「自我陶醉,自賞的,自戀的」。在希臘神話中,貌美青年那喀索斯(narcissus)愛上了本身在水中的倒影,他死後化做水仙花,此花即因之命名。因此,水仙花數也稱爲自戀數,自冪數,本名爲超徹底數字不變數(pluperfect digital invariant, PPDl)
自冪數是指一個 n 位數,它的每一個位上的數字的 n 次冪之和等於它自己。
n爲1時,自冪數稱爲獨身數。顯然,0,1,2,3,4,5,6,7,8,9都是自冪數。
n爲2時,沒有自冪數。
n爲3時,自冪數稱爲水仙花數,有4個:153,370,371,407;
n爲4時,自冪數稱爲四葉玫瑰數,共有3個:1634,8208,9474;
n爲5時,自冪數稱爲五角星數,共有3個:54748,92727,93084;
n爲6時,自冪數稱爲六合數, 只有1個:548834;
n爲7時,自冪數稱爲北斗七星數, 共有4個:1741725,4210818,9800817,9926315;
n爲8時,自冪數稱爲八仙數, 共有3個:24678050,24678051,88593477;
n爲9時,自冪數稱爲九九重陽數,共有4個:146511208,472335975,534494836,912985153;
n爲10時,自冪數稱爲十全十美數,只有1個:4679307774。複製代碼
話很少說,來代碼:
#若是一個 3 位數等於其各位數字的立方和,則稱這個數爲水仙花數。
#例如:153 = 1^3 + 5^3 + 3^3,所以 153 就是一個水仙花數。
#方法1:
def flower1(a,b): # 限制範圍
for i in range(a,b):
sum = 0 #用來存放各個位數的立方和
temp = i
while temp:
sum += (temp%10) ** 3 #累加
temp //= 10 # // 取整除 - 向下取接近除數的整數
if sum == i:
print(i)flower1(10,1000) # 153 370 371 407複製代碼
還能夠先定義一個求冪次方和的函數
import math# 定義一個函數求取列表中的冪次方和
def pow3(list):
sum = 0
for i in list:
sum += math.pow(int(i),3)
return sum複製代碼
# 方法2 依次求取各個位數 def flower():
for i in range(100,1000):
a = i // 1000 # 取最高位
b = i //100 % 10 # 取百位
c = i //10 % 10 # 取十位
d = i % 10 # 取末位
list = [a,b,c,d]
if pow3(list) == i:
print('100-1000之內的水仙花數有:%d'%i)
flower()
#100-1000之內的水仙花數有:153
#100-1000之內的水仙花數有:370
#100-1000之內的水仙花數有:371
#100-1000之內的水仙花數有:407複製代碼
# 方法3: 數值轉爲list def flower2():
for i in range(100, 1000):
list1 = list(str(i))
if pow3(list1) == i:
print('100-1000之內的水仙花數有:%d'%i)
flower2()
#100-1000之內的水仙花數有:153
#100-1000之內的水仙花數有:370
#100-1000之內的水仙花數有:371
#100-1000之內的水仙花數有:407複製代碼
若是一個數剛好等於它的因子之和,則稱該數爲「徹底數」 。各個小於它的約數(真約數,列出某數的約數,去掉該數自己,剩下的就是它的真約數)的和等於它自己的天然數叫作徹底數(Perfect number),又稱完美數或完備數。
例如:第一個徹底數是6,它有約數一、二、三、6,除去它自己6外,其他3個數相加,1+2+3=6。第二個徹底數是28,它有約數一、二、四、七、1四、28,除去它自己28外,其他5個數相加,1+2+4+7+14=28那麼問題來了:如何用python去求出下一個(大於28的)徹底數?(求出1000之內全部的徹底數)
方法一
# coding:utf-8
a=range(1,1001)
b=range(1,1001)
result=[]
for i in a:
tmp=[]
for k in b:
if k<i:
if not i%k:
tmp.append(k)
else:
continue
else:
break
count=0
for m in tmp:
count=count+m
if count==i:
result.append(i)
else:
continue
print result複製代碼
方法二
# coding:utf-8
a=range(1,1001)
b=range(1,1001)
result=[]
for i in a:
tmp=[]
for k in b:
if k<i:
if not i%k:
tmp.append(k)
else:
continue
else:
break
count=sum(tmp)
if count==i:
result.append(i)
else:
continue
print result複製代碼
#方法三是直接經過遍歷出list a中的元素後,生成一個小於次元素的list,而後取餘
#對於range(1,0) 個人解釋是:range的理解應該是range是先用咱們指定的條件生成一個列表,
而後用for循環取出來(此句出自python核心編程第八章),range(1,0),start=1,stop=0,step=1,
這樣的條件生成的#的列表實際是上空的,即爲False複製代碼
a=range(1,1001)
perfect=[]
for i in a:
tmp=[]
for k in range(1,i):
if not i%k:
tmp.append(k)
count=sum(tmp)
if count==i:
perfect.append(i)
print perfect複製代碼
for i in range(1,1000):
s=0
for k in range(1,i):
if i%k==0:
s=s+k
if i==s:
print i複製代碼
掌握結合python循環求解最大公約數
def hcf(x, y):
'''該函數返回兩個數的最大公約數'''
# 獲取最小值
if x > y:
smaller = y
else:
smaller = x
for i in range(1, smaller + 1):
if ((x % i == 0) and (y % i == 0)):
hcf = 1
return hcf
# 用戶輸入兩個數字
num1 = int(input("輸入第一個數字:"))
num2 = int(input("輸入第二個數字:"))
print(num1, "和", num2, "的最大公約數爲", hcf(num1, num2))複製代碼
最小公倍數
# 定義函數
def lcm(x, y):
#獲取最大的數
if x > y:
greater = x
else:
greater = y
while(True):
if ((greater % x == 0) and (greater % y == 0)):
lcm = greater
break
greater += 1
return lcm
# 獲取用戶輸入
num1 = int(input("輸入第一個數字:"))
num2 = int(input("輸入第二個數字:"))
print(num1, "和", num2, "的最小公倍數爲", lcm(num1, num2)) 複製代碼
掌握使用枚舉解決浮屠增級問題
掌握使用枚舉法解決千錢百雞問題
百錢百雞:我國古代數學家張丘建在《算經》一書中提出的數學問題:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?
譯文:公雞一隻5元,母雞一隻3元,小雞3只1元。如何用100元買100只雞。其中公雞,母雞,小雞的數量各是多少
for x in range(0,20):
for y in range(0,33):
z=100-x-y
if 5*x+3*y+z/3 == 100:
print('公雞:%s 母雞:%s 小雞:%s'%(x, y, z))複製代碼
隨機數法
import random
while True:
x = random.randrange(0,20)
y = random.randrange(0,33)
z = random.randrange(0,100)
if 5*x+3*y+z/3 == 100 and x+y+z == 100:
print('公雞:',x)
print('母雞:',y)
print('小雞:',z)複製代碼
# python實現猜數字遊戲,主要用於練習for循環和if else。
# 需求以下:# 一、隨機生成一個1-100之間的數。
# 二、7次猜數字的機會,若是沒有猜正確,遊戲結束。
# 三、輸入字母q,則退出遊戲。
import random
num = random.randint(1,100)
guess_chances = 7
print('您只有7次猜數字的機會哦!')
for i in range(1,guess_chances + 1):
print('這是第'+ str(i) + '次猜數字')
guess = input('請輸入數字:')
if guess.isdigit():
guess = int(guess)
if guess < num:
print('您輸入的數字過小了,您還有' + str(guess_chances - i)+'次機會,請從新輸入:')
elif guess > num:
print('您輸入的數字太大了,您還有' + str(guess_chances - i)+'次機會,請從新輸入:')
elif guess == num:
print('恭喜您猜對了')
break
elif guess == 'q':
print('退出遊戲!')
break
else:
print('輸入的內容必須爲整數,請從新輸入:')
while (guess_chances - i) == 0:
print('您輸入已經超過7次,遊戲結束!')
break複製代碼
隨機數字小遊戲
import random
i = 1
a = random.randint(0,100)
b = int(input('請輸入0-100中的一個數字\n而後查看是否與電腦同樣:'))
while a != b:
if a > b:
print('你第%d次輸入的數字小於電腦隨機數字'%i)
b = int(input('請再次輸入數字:'))
else:
print('你第%d次輸入的數字大於電腦隨機數字'%i)
b = int(input('請再次輸入數字:'))
i += 1
else:
print('恭喜你,你第%d次輸入b的數字與電腦的隨機數字%d同樣'%(i,b))複製代碼
三角形
for i in range(10):
for j in range(1,i):
print("*",end="")
print()
for i in range(10):
for j in range(10-i):
print("*",end="")
print()複製代碼
正方形
for i in range(5):
for j in range(10):
print("*",end="")
print()複製代碼
正三角形
for i in range(1,6):
for j in range(1,6-i):
print(" ",end="")
for k in range(1,i+1):
print("* ",end="")
print("")複製代碼
#for循環
sum = 0
for i in range(1,101):
sum += i
print(sum)
#while循環
n = 1
sum = 0while n < 101:
sum += n
n += 1
print(sum)複製代碼
sum = 0
for i in range(100,200):
flag = True
for j in range(2,i):
if i % j == 0:
flag = False
break
if(flag):
print(i,"是素數")
sum += 1
print("一共",sum,"個素數")複製代碼
ta1 = [i for i in range(10,0,-1)]
ta2 = []
ta3 = []
n = len(ta1)
def move(n, ta1,ta2,ta3):
if n == 1:
ta3.append(ta1.pop())
else:
move(n - 1,ta1,ta3,ta2)
ta3.append(ta1.pop())
move(n-1,ta2,ta1,ta3)
move(n,ta1,ta2,ta3)
print(ta1)
print(ta3)複製代碼
倍數又是5的倍數就用appleorange代替。注意:只能用2行代碼搞定
咱們最常常想到的應該是這種方法:
for i in range(1,21):
if (i%3==0 and i%5!=0):
i = 'apple'
elif (i%5==0 and i%3!=0):
i = 'orange'
elif (i%3==0 and i%5==0):
i = 'appleorange'
print(i,end=',')複製代碼
經典的寫法:
for i in range(1,21):
print('apple'[i%3*5::]+'orange'[i%5*6::] or i,end=" , ")複製代碼
好比說我有一串字符串人名:names=' Kunpen Ji, Li XIAO, Caron Li, Donl SHI, Ji ZHAO, Fia YUAN Y, Weue DING, Xiu XU, Haiying WANG, Hai LIN, Jey JIANG, Joson WANG E, Aiyang ZHANG, Hay MENG, Jak ZHANG E, Chang Zhang, Coro ZHANG'
,我但願能作到下面3點
問題1:排序,按照名字A-Z排序
問題2:找出裏面姓」ZHANG」有幾個
問題3:找出名字裏面最長的人
首先咱們要作的對字符串進行分割去掉','而後就變成了一個長的列表,而後對列表進行排序,第一個問題就解決了.
for index,n in enumerate(sorted(names.split(','))):
print(index+1,n)複製代碼
分析問題2:
接下來,咱們須要找出姓"ZHANG",由於名字裏面有英文名字和中文名字,有的後面還跟E/Y,因此咱們先定義一個函數,把分割後的新的名字列表,取出每個名字,而後解析,翻轉,用推導列表造成一個新的名字列表,而後再用字符串裏的.startswith("ZHANG")取出符合的名字
def _change(text):
new_s1=text.split()[0:2]
reverse_s1=new_s1[::-1]
return ' '.join(reverse_s1)
new_names_lists=[_change(name) for name in names.split(',')]
names_with_ZHANG=[name for name in new_names_lists if name.startswith('ZHANG')]
print(names_with_ZHANG)
>>['ZHANG Aiyang', 'ZHANG Jak', 'ZHANG Coro']複製代碼
分析問題3:
接下來,咱們只要把名字和名字的長度,造成一個新的字典,名字:名字長度,而後就能夠很是容易取到最大的人名了.
names_dict={name:len(name) for name in sorted(names.split(',')) }
print(max(zip(names_dict.values(),names_dict.keys())))
>>(13, ' Joson WANG E')複製代碼
Turtle,也叫海龜渲染器,使用Turtle庫畫圖也叫海龜做圖。Turtle庫是Python語言中一個很流行的繪製圖像的函數庫。海龜渲染器,和各類三維軟件都有着良好的結合。功能強大,使用方便。該渲染器的特點在於其渲染速度能夠優海龜渲染器,和各類三維軟件都有着良好的結合。
(1)畫圓
(circle() 有三個參數:radius必須,extent--角度 與step--圖形(無關緊要)) 複製代碼
一、radius -- 任意大小圓
import turtle
t = turtle.Turtle()
t.circle(x) 複製代碼
二、radius extent --- 任意大小圓得部分
# 半圓
import turtle
t = turtle.Turtle()
t.circle(100,180) 複製代碼
三、
radius extent steps # 可實現多邊形的繪製
import turtle
t = turtle.Turtle()
t.circle(100,180,3) 複製代碼
四、
radius step #三角形
import turtle
t = turtle.Turtle()
t.circle(100,steps=3) 複製代碼
五、實心圓
t.hot() 複製代碼
(2)畫筆的轉換(shape()函數的使用)可填寫以下圖形:
一、海龜 turtle
二、等邊三角形 triangle 等腰三角形 arrow
三、正方形 square
四、實心圓 circle
(3)畫筆的繪製狀態
一、pendown()
二、penup()
三、pensize() #可直接寫數字
(4)畫筆的運動狀態
一、t.forward() / t.fd()箭頭方向前進
二、t.backward() / t.bd() ------後退
三、t.left() / t.right()
四、t.goto() / t.setpos() ----移到某一位置
五、t.setx() / t.sety() ---- 改變x座標或者Y座標
六、t.home() ---- 回到初始位置
七、t.position() / t.pos() print(t.pos)---返回當前箭頭座標
(4)畫筆的隱藏與顯示
一、隱藏 hideturtle() / ht()
二、顯示 showturtle() / st()
(5)顏色
一、turtle.begin_fill():在填充圖形前訪問這個方法
二、turtle.end_fill():在最後調用begin_fill以前填充繪製的圖形
三、turtle.color(c):設置筆的顏色
四、turtle.fillcolor(c):設置筆填充顏色
一、在begin_fill()和end_fill()之間設置的turtle.color(c)和turtle.fillcolor(c)均可以做爲填充色 二、將turtle.color(c)提到前面,不寫begin_fill()和end_fill(),則就不會實現填充
三、將turtle.color(c)提到前面,並在begin_fill()和end_fill()之間設置turtle.fillcolor(c),那麼圖形的邊框和內部填充顏色分別對應於color和fillcolor
四、在begin_fill()和end_fill()之間設置不一樣的turtle.color(c)和turtle.fillcolor(c),則以排序在後面的爲準去填充圖形
補充:
(1)
input # 輸入的數字爲字符串
import turtle
num = int(input(""))
t = turtle.Turtle()
t.circle(num) 複製代碼
(2)
random
print( random.randint(1,10) ) # 產生 1 到 10 的一個整數型隨機數
print( random.random() ) # 產生 0 到 1 之間的隨機浮點數
print( random.uniform(1.1,5.4) ) # 產生 1.1 到 5.4 之間的隨機浮點數,區間能夠不是整數
print( random.choice('tomorrow') ) # 從序列中隨機選取一個元素
print( random.randrange(1,100,2) ) # 生成從1到100的間隔爲2的隨機整數
turtle、input、random可相互結合演示 複製代碼
1.forward() | fd():向前移動指定的距離。參數:一個數字(integer or float))。
turtle.forward(25)複製代碼
2.backward() | bk() | back():向後移動指定的距離。參數:一個數字(integer or float))。
turtle.backward(30)複製代碼
3.right() | rt():以角度單位向右轉動。參數:一個數字(integer or float))。單位默認爲度數,能夠經過degrees()和radians()進行設置。
turtle.right(45)複製代碼
4.left() | lt():以角度單位向左轉動。參數:一個數字(integer or float))。單位默認爲度數,能夠經過degrees()和radians()進行設置。
turtle.left(45) 複製代碼
5.goto() | steps() | setposition():移動到絕對位置,若是筆落下,畫線,不改變方向。參數:x-一個數字或一對數字。y-一個數字或None。
turtle.setpos(60,30)#60.00,30.00)複製代碼
6.setx():設置第一個座標的值即X方向。參數:一個數字(integer or float))。
turtle.setx(10)#(10.00,0.00)複製代碼
7.sety():設置第二個座標的值即Y方向。參數:一個數字(integer or float))。
turtle.sety(10)#(0.00,10.00)複製代碼
8.setheading() | seth(): 將方向設置爲to_angle.就是東西南北方向。具體以下:標準模式:0 - 東 90 - 北 180 - 西 270 - 南 標誌模式 0- 北 90- 東 180- 南 270 - 西
turtle.setheading(90)複製代碼
9.home() : 移動到原點 - 座標(0,0):並將其標題設置爲其起始方向(取決於模式)。
turtle.home()# (0.00,0.00)複製代碼
10.circle():繪製一個給定半徑的圓。參數:radius-一個數字(半徑,若是值爲正則逆時針,負數爲順時針),extent-一個數字()steps- 執行的步數。
turtle.circle(120,180,5)複製代碼
11.dot() :用顏色畫出一個直徑大小的圓點。參數:size-一個大於1的整數,可None。默認用的是pensize+4和2*pensize的最大值,color-顏色值
turtle.dot(20, "blue")複製代碼
12.stamp():將當前位置上的形狀複製到畫布上返回stamp_id.能夠調用,能夠刪除。
turtle.stamp()複製代碼
13.clearstamp():刪除stamp()返回來的值。參數:stampid。
14.clearstamps():刪除所有stamp()的值。參數:stampid。
15.undo():撤銷最後的動做。
16.speed():將速度設置爲0..10範圍內整數。若是沒有參數,則返回當前速度。若是大於10或
者小於0.5,則速度設置爲0 。
17:position() | pos(): 返回當前的位置。
turtle.pos()
# (0.00,0.00)複製代碼
18.towards(): 返回當前位置同指定位置之間的角度。參數:x-一個數字或一對數字或一個實
例的向量,y-若是x是數字,則爲數字,不然爲None。
turtle.goto(10,10)
tw = turtle.towards(0,0)
print(tw)
# 225複製代碼
19.xcor():返回x座標。 ycor():返回y座標。
20.heading(): 返回當前的方向值。
21.distance():返回x,y兩個點的直線距離
22.degrees():設置一整圈的度數。默認是360度。
23.radians():將角度測量單位設置爲弧度。至關於 degrees(2*math.pi)
24.pendown() | pd() | down():放下筆,移動的時候繪圖。
25.penup() | pu() | up():將提起筆,移動時無圖。
26.pensize():設置線條的粗細。參數:width-一個正數
27.pen():使用鍵值對設置筆的屬性:
「shown」: True/False
「pendown」: True/False
「pencolor」: 顏色字符串或者顏色值
「fillcolor」: 顏色字符串或者顏色值
「pensize」: 正數 「speed」: 速度範圍爲0..10的數字
「resizemode」: 「auto」 or 「user」 or 「noresize」
「stretchfactor」: (positive number, positive number)
「outline」: 正數
「tilt」: 正數
28.isdown():若是筆中止返回True,反之False
29.pencolor():設置筆的顏色。
30.fillcolor():筆的填充色。
31.color():同時設置pencolor和fillcolor
32.filling():返回fillstate狀態,若是填充則返回True,反之False。
33.begin_fill():在繪製要填充的形狀前調用。固然在調用完還須要end_fill()。
34.reset():重置,將屏幕中的圖紙刪除,從新居中並將全部變量設置爲默認值。
35.clear():刪除圖紙。對屬性不作操做。
36.write():寫文本。參數:arg-要寫入的對象。move-是否移動。align-對齊方式:left,right,center。font-字體。fontname,fontsize,fonttype。
37.ideturtle() | ht() :刪隱藏烏龜的形狀,在作複雜繪圖的時候隱藏的時候有利於提升繪圖速度。
38.showturtle() | st():顯示烏龜的形狀。
39.isvisible():烏龜是否可見。
若是可見返回True,反之則False。 40.shape():設置烏龜的圖形形狀,取值:「arrow」, 「turtle」, 「circle」, 「square」, 「triangle」, 「classic」 41.isvisible():烏龜是否可見。若是可見返回True,反之則False。
42.resizemode():參數:rmode取值:"auto","user","noresize".
43.shapesize() | turtlesize() : 返回筆的屬性。
44.shearfactor(): 設置或者返回但錢的剪切因子。
45.tilt():旋轉由turtle shape角度從當前的傾斜角度。
46.settiltangle():不管當前的傾斜角度如何,旋轉烏龜指向 angle 指定的方向。參數:angle -數字。已棄用
47.tiltangle():設置或者返回當前的傾斜角度。參數:angle - 數字
48.shapetransform():設置或返回烏龜的形狀的當前轉換矩陣。
49.get_shapepoly():返回當前形狀的座標。
50.onclick():鼠標點擊事件。
參數:fun-一個帶有兩個參數的函數,這些參數將與畫布上單擊點的座標一個調用。num-鼠標按鈕的數量,默認爲1(左鍵)。add- True的時候將添加新的綁定。不然替換之前的綁定。
51.onrelease():鼠標釋放事件。參數同點擊事件。
52.ondrag():鼠標移動事件。參數同點擊事件。
53.begin_poly(): 開始記錄多邊形的頂點。
54.end_poly():中止記錄多邊形的頂點。
55.get_poly():返回最後記錄的多邊形。
56.clone():建立並返回具備相同位置等等屬性的烏龜克隆。
57.getturtle() | getpen() :獲取trutle對象自己。
58.getscreen():返回正在繪製的對象。
59.setundobuffer(): 設置或禁用中斷器。
參數: size-整數。若是大小是None,則禁用緩衝區。 60.undobufferentries():返回undobuffer中的條目數。
61.bgcolor():設置或者返回當前的TurtleScreen的背景顏色。
62.bgpic():設置背景圖片。參數: picname-文件名。
62.delay(): 設置或返回以毫秒爲單位的繪製延遲,延遲越大,繪圖越慢。
63.ontimer():定時器。
64.mainloop() | done() :開始循環 。
65.textinput() | numinput():彈出一個輸入字符串和數字的窗口。
66.mode(): 三種方式:「standard」, 「logo」 or 「world」
# coding=utf-8
import turtle
from datetime import *
# 擡起畫筆,向前運動一段距離放下
def Skip(step):
turtle.penup()
turtle.forward(step)
turtle.pendown()
def mkHand(name, length):
# 註冊Turtle形狀,創建錶針Turtle
turtle.reset()
Skip(-length * 0.1)
# 開始記錄多邊形的頂點。當前的烏龜位置是多邊形的第一個頂點。
turtle.begin_poly()
turtle.forward(length * 1.1)
# 中止記錄多邊形的頂點。當前的烏龜位置是多邊形的最後一個頂點。將與第一個頂點相連。
turtle.end_poly()
# 返回最後記錄的多邊形。
handForm = turtle.get_poly()
turtle.register_shape(name, handForm)
def Init():
global secHand, minHand, hurHand, printer
# 重置Turtle指向北
turtle.mode("logo")
# 創建三個錶針Turtle並初始化
mkHand("secHand", 135)
mkHand("minHand", 125)
mkHand("hurHand", 90)
secHand = turtle.Turtle()
secHand.shape("secHand")
minHand = turtle.Turtle()
minHand.shape("minHand")
hurHand = turtle.Turtle()
hurHand.shape("hurHand")
for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0)
# 創建輸出文字Turtle
printer = turtle.Turtle()
# 隱藏畫筆的turtle形狀
printer.hideturtle()
printer.penup()
def SetupClock(radius):
# 創建表的外框
turtle.reset()
turtle.pensize(7)
turtle.pencolor("#ff5500")
turtle.fillcolor("green")
for i in range(60):
Skip(radius)
if i % 5 == 0:
turtle.forward(20)
Skip(-radius - 20)
Skip(radius + 20)
if i == 0:
turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
elif i == 30:
Skip(25)
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-25)
elif (i == 25 or i == 35):
Skip(20)
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-20)
else:
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-radius - 20)
else:
turtle.dot(5)
Skip(-radius)
turtle.right(6)
def Week(t):
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
return week[t.weekday()]
def Date(t):
y = t.year
m = t.month
d = t.day
return "%s-%d-%d" % (y, m, d)
def Tick():
# 繪製錶針的動態顯示
t = datetime.today()
second = t.second + t.microsecond * 0.000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
secHand.setheading(6 * second)
minHand.setheading(6 * minute)
hurHand.setheading(30 * hour)
turtle.tracer(False)
printer.forward(65)
printer.write(Week(t), align="center",
font=("Courier", 14, "bold"))
printer.back(130)
printer.write(Date(t), align="center",
font=("Courier", 14, "bold"))
printer.home()
turtle.tracer(True)
# 100ms後繼續調用tick
turtle.ontimer(Tick, 100)
def main():
# 打開/關閉龜動畫,併爲更新圖紙設置延遲。
turtle.tracer(False)
Init()
SetupClock(160)
turtle.tracer(True)
Tick()
turtle.mainloop()
if __name__ == "__main__":
main()複製代碼