lowercasepython
⑴ python代碼:計算一個文本文件中所有大寫字母,小寫字母,數字和其他的數量。
1、創建python代碼,testreadfile.py;
⑵ Python里怎麼實現switch case
學習Python過程中,發現沒有switch-case,過去寫C習慣用Switch/Case語句,官方文檔說通過if-elif實現。所以不妨自己來實現Switch/Case功能。
方法一
通過字典實現
def foo(var):
return {
'a': 1,
'b': 2,
'c': 3,
}.get(var,'error') #'error'為默認返回值,可自設置
方法二
通過匿名函數實現
def foo(var,x):
return {
'a': lambda x: x+1,
'b': lambda x: x+2,
'c': lambda x: x+3,
}[var](x)
方法三
通過定義類實現
參考Brian Beck通過類來實現Swich-case
# This class provides the functionality we want. You only need to look at
# this if you want to know how this works. It only needs to be defined
# once, no need to muck around with its internals.
class switch(object):
def __init__(self, value):
self.value = value
self.fall = False
def __iter__(self):
"""Return the match method once, then stop"""
yield self.match
raise StopIteration
def match(self, *args):
"""Indicate whether or not to enter a case suite"""
if self.fall or not args:
return True
elif self.value in args: # changed for v1.5, see below
self.fall = True
return True
else:
return False
# The following example is pretty much the exact use-case of a dictionary,
# but is included for its simplicity. Note that you can include statements
# in each suite.
v = 'ten'
for case in switch(v):
if case('one'):
print 1
break
if case('two'):
print 2
break
if case('ten'):
print 10
break
if case('eleven'):
print 11
break
if case(): # default, could also just omit condition or 'if True'
print "something else!"
# No need to break here, it'll stop anyway
# break is used here to look as much like the real thing as possible, but
# elif is generally just as good and more concise.
# Empty suites are considered syntax errors, so intentional fall-throughs
# should contain 'pass'
c = 'z'
for case in switch(c):
if case('a'): pass # only necessary if the rest of the suite is empty
if case('b'): pass
# ...
if case('y'): pass
if case('z'):
print "c is lowercase!"
break
if case('A'): pass
# ...
if case('Z'):
print "c is uppercase!"
break
if case(): # default
print "I nno what c was!"
# As suggested by Pierre Quentel, you can even expand upon the
# functionality of the classic 'case' statement by matching multiple
# cases in a single shot. This greatly benefits operations such as the
# uppercase/lowercase example above:
import string
c = 'A'
for case in switch(c):
if case(*string.lowercase): # note the * for unpacking as arguments
print "c is lowercase!"
break
if case(*string.uppercase):
print "c is uppercase!"
break
if case('!', '?', '.'): # normal argument passing style also applies
print "c is a sentence terminator!"
break
if case(): # default
print "I nno what c was!"
# Since Pierre's suggestion is backward-compatible with the original recipe,
# I have made the necessary modification to allow for the above usage.
查看Python官方:PEP 3103-A Switch/Case Statement
發現其實實現Switch Case需要被判斷的變數是可哈希的和可比較的,這與Python倡導的靈活性有沖突。在實現上,優化不好做,可能到最後最差的情況匯編出來跟If Else組是一樣的。所以Python沒有支持。
⑶ python問題
string.ascii_lowercase沒有del這個方法,所以會報錯。
可以嘗試用replace方法:
defgetAvailableLetters(lettersGuest):
letters="abcdefghijklmnopqrstuvwxyz"
foriinlettersGuest:
ifiinletters:
letters=letters.replace(i,'')
printletters
或者:
defgetAvailableLetters(lettersGuest):
importstring
foriinlettersGuest:
ifiinstring.ascii_lowercase:
string.ascii_lowercase=string.ascii_lowercase.replace(i,'')
printstring.ascii_lowercase
希望能幫到你!
⑷ 怎麼樣才能提高python程序的網路吞吐速率
Python是一個很酷的語言,因為你可以在很短的時間內利用很少的代碼做很多事情。不僅如此,它還能輕松地支持多任務,比如多進程等。Python批評者有時會說Python執行緩慢。本文將嘗試介紹6個技巧,可加速你的Python應用程序。
1.讓關鍵代碼依賴於外部包
雖然Python讓許多編程任務變得容易,但它可能並不總能為緊急的任務提供最佳性能。你可以為緊急的任務使用C、C++或機器語言編寫的外部包,這樣可以提高應用程序的性能。這些包都是不能跨平台的,這意味著你需要根據你正在使用的平台,尋找合適的包。簡而言之,這個方案放棄了一些應用程序的可移植性,以換取只有在特定主機上直接編程才能獲得的程序性能。這里有一些你應該考慮加入到你的「性能兵工廠」的包:
Cython
PyInlne
PyPy
Pyrex
- import operatorsomelist = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]somelist.sort(key=operator.itemgetter(0))somelist#Output = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]somelist.sort(key=operator.itemgetter(1))somelist#Output = [(6, 2, 4), (1, 5, 8), (9, 7, 5)]somelist.sort(key=operator.itemgetter(2))somelist#Output = [(6, 2, 4), (9, 7, 5), (1, 5, 8)],
- lowerlist = ['this', 'is', 'lowercase']upper = str.upperupperlist = []append = upperlist.appendfor word in lowerlist:append(upper(word))print(upperlist)#Output = ['THIS', 'IS', 'LOWERCASE']
- n = 16myDict = {}for i in range(0, n):char = 'abcd'[i%4]if char not in myDict:myDict[char] = 0myDict[char] += 1print(myDict)
- n = 16myDict = {}for i in range(0, n):char = 'abcd'[i%4]try:myDict[char] += 1except KeyError:myDict[char] = 1print(myDict)
這些包以不同的方式提高性能。例如,Pyrex能夠擴展Python所能做的事情,例如使用C的數據類型來讓內存任務更加有效或直接。PyInIne讓你在Python應用程序中直接使用C代碼。程序中的內聯代碼單獨編譯,但它在利用C語言所能提供的效率的同時,也讓所有的代碼都在同一個地方。
2.排序時使用鍵(key)
有很多老的Python排序代碼,它們在你創建一個自定義的排序時花費你的時間,但在運行時確實能加速執行排序過程。元素排序的最好方法是盡可能使用鍵(key)和默認的sort()排序方法。例如,考慮下面的代碼:
每一個實例中,根據你選擇的作為key參數部分的索引,數組進行了排序。類似於利用數字進行排序,這種方法同樣適用於利用字元串排序。
3.優化循環
每種編程語言都會強調需要優化循環。當使用Python的時候,你可以依靠大量的技巧使得循環運行得更快。然而,開發者經常漏掉的一個方法是:避免在一個循環中使用點操作。例如,考慮下面的代碼:
每一次你調用方法str.upper,Python都會求該方法的值。然而,如果你用一個變數代替求得的值,值就變成了已知的,Python就可以更快地執行任務。優化循環的關鍵,是要減少Python在循環內部執行的工作量,因為Python原生的解釋器在那種情況下,真的會減緩執行的速度。
(注意:優化循環的方法有很多,這只是其中的一個。例如,許多程序員都會說,列表推導是在循環中提高執行速度的最好方式。這里的關鍵是,優化循環是程序取得更高的執行速度的更好方式之一。)
4.使用較新版本的Python
在網上搜索Python信息,都會發現無數人在問,從Python一個版本遷移到另一個版本的問題的信息。一般來說,Python的每一個版本都包含了能讓其比上個版本運行更快的優化。版本遷移的限制因素是,你喜歡的那些庫是否已經遷移到Python的較新版本。相比於詢問是否應該進行版本遷移,關鍵問題是確定一個新版本什麼時候有足夠的支持,以保證遷移的可行性。
你需要驗證你的代碼仍然運行。你需要在Python的新版本下使用你獲得的新庫,然後檢查你的應用程序是否需要重大改變。只有在你作出必要的更正之後,你才會注意到版本之間的差別。然而,如果你正好確保你的應用程序能在新版本下運行,而不需要任何改變,你可能會錯過那些版本升級帶來的新特性。一旦你進行了遷移,你應該為你的新版本下的應用程序寫一個說明,檢查有問題的地方,並且優先考慮利用新版本的特性去更新那些地方。這樣用戶將會在升級的過程中更早的看到一個更大的性能提升。
5.嘗試多種編碼方法
如果每次你創建一個應用程序都是用相同的編碼方法,幾乎肯定會導致一些你的應用程序比它能夠達到的運行效率慢的情況。作為分析過程的一部分,你可以嘗試一些實驗。例如,在一個字典中管理一些元素,你可以採用安全的方法確定元素是否已經存在並更新,或者你可以直接添加元素,然後作為異常處理該元素不存在情況。考慮第一個編碼的例子:
這段代碼通常會在myDict開始為空時運行得更快。然而,當mydict通常被數據填充(或者至少大部分被充填)時,另一種方法效果更好。
兩種情況下具有相同的輸出:{『d': 4, 『c': 4, 『b': 4, 『a': 4}。唯一的不同是這個輸出是如何得到的。跳出固定的思維模式,創造新的編碼技巧,能夠幫助你利用你的應用程序獲得更快的結果。
6.交叉編譯應用程序
開發者有時會忘記,電腦實際上是不懂任何用於創建現代應用程序的語言,電腦所能懂得是機器代碼。為了能在電腦上運行應用程序,你使用一個應用將人類可讀的代碼你轉換成計算機能理解的。有時候用一種語言,比如Python,寫一個應用,並用另一種語言,比如C++,運行它,從性能的角度來看是有意義的。這取決於你想要應用程序去做什麼,以及主機系統可以提供的資源。
一個有趣的交叉編譯器,Nuitka,可以將你的Python代碼轉換為C++代碼。這么做的結果是,你可以在原生模式下執行應用程序,而不是依靠解釋器。根據平台和任務,你可以看到一個顯著的性能提升。
(注意:Nuitka目前還處於測試階段,所以用它來產品程序時需要小心。實際上,目前最好將其用於實驗。現在也有一些關於交叉編譯是否是得到更好性能的最佳方式的討論。開發者已經利用交叉編譯好幾年了,目的是實現特定的目標,比如更好的應用程序的速度。記住,每一個解決方案都會有得有失,你應該在將一個解決方案用於生產環境之前就好好考慮一下得失情況。)
在使用一個交叉編譯器時,要確保它支持你使用的Python的版本。Nuitka支持Python2.6、2.7、3.2和3.3。想讓這個方案發揮作用,你需要一個Python解釋器和一個C++編譯器。Nuitka支持多種C++編譯器,包括Microsoft Visual Studio、MinGW 和 Clang/LLVM。
交叉編譯也可能帶來一些嚴重的負面影響。例如,當利用Nuitka工作時,你會發現即使一個小程序也能消耗很大的硬碟空間,這是因為Nuitka使用大量的動態鏈接庫(DLLs)實現Python的功能。所以當你面對一個資源有限的系統時,這個方案可能不會很好的起作用。
總結
這六個技巧中的任意一個,都可以幫助你創造更快的Python程序。但任何技巧都不是萬能的,不能每次都起作用。有些技巧在Python的特定版本下比其他技巧的更有效——甚至系統平台也能影響它們的效果。你需要配置你的應用,確定哪個地方讓其運行緩慢,然後嘗試似乎能最好的解決這些問題的一些技巧。
⑸ python如何自動生成單個隨機字母(a-z)。
1:mport random
#導入random模塊 用於生產隨機數功能
2:a = random.randint(97, 122)
#利用random.randint()函數生成一個隨機整數a,使得97<=a<=122
#對應從「a」到「z」的ASCII碼
3:c = chr(a)
#將a表示的ASCII碼轉換為對應的字母,這里的c就是你要的隨機字母
4:print c
#將字母輸出,完成
⑹ 編寫python程序,用戶輸入一個英文字元,根據輸入字元的大小寫輸出「大寫字元」或「小寫字元」。
n=ord(input("inputanenglishletter:"))
if65<=n<=90:
print('大寫字元')
elif97<=n<=122:
print('小寫字元')
else:
print('其他字元')
⑺ python字元串處理
s1=input('輸入字元串1:')
s2=input('輸入字元串2:')
s3=''.join([iforiins1ifinotins2])
print(s3)
⑻ python中string.lowercase是什麼意思 有什麼用
獲取文件系統使用編碼方式,Windows下返回'mbcs',mac下返回'utf-8'.
sys.path: 獲取指定模塊搜索路徑的字元串集合,可以將寫好的模塊放在得到的某個路徑下,就可以在程序中import時正確找到。
⑼ python生成26個字母的列表
import string
list(string.ascii_uppercase) #26個大寫字母列表
list(string.ascii_lowercase) #26個小寫字母列表
list(string.ascii_letters) #26個小寫字母和26個大寫字母列表
⑽ 如何在Python中使用方法鏈
方法鏈(method chaining)是面向對象的編程語言中的一種常見語法,可以讓開發者在只引用對象一次的情況下,對同一個對象進行多次方法調用。舉個例子:
假設我們有一個Foo類,其中包含有兩個方法—— bar 和 baz 。
我們創建一個Foo類的實例:
foo = Foo()
如果不使用方法鏈,要想連續調用對象 foo 的 bar 和 baz 方法的話,我們得這樣做:
foo.bar() # Call method bar() on object foo.
foo.baz() # Call method baz() on object foo.
如果使用方法鏈的話,我們就能這樣實現: foo.bar().baz()
方法鏈的一個好處,是可以減少你使用對象名的次數。調用的方法越多,能夠減少的次數就越多。因此,這個方法也能一定程度上減少需要閱讀、測試、調試、維護的代碼數量。這個好處不大,但也是有用的。
請注意,方法鏈的一個限制是,只能用在不需要返回其他值的方法上,因為你需要返回 self 對象。即使Python支持用一個 return 語句返回多個值,也可能無法解決這個問題。
下面是在Python中實現方法鏈的一個示例:
class Person:
def name(self, value):
self.name = value
return self
def age(self, value):
self.age = value
return self
def introce(self):
print "Hello, my name is", self.name, "and I am", self.age, "years old."
person = Person()
person.name("EarlGrey").age(21).introce()
# => Hello, my name is EarlGrey and I am 21 years old.
上面那種實現可能太簡單了。下面我們來看一種更加現實的方法鏈使用方法:編寫一個字元串處理程序 string_processor.py ,支持方法鏈。
import
class StringProcessor(object):
'''
A class to process strings in various ways.
'''
def __init__(self, st):
'''Pass a string for st'''
self._st = st
def lowercase(self):
'''Make lowercase'''
self._st = self._st.lower()
return self
def uppercase(self):
'''Make uppercase'''
self._st = self._st.upper()
return self
def capitalize(self):
'''Make first char capital (if letter); make other letters lower'''
self._st = self._st.capitalize()
return self
def delspace(self):
'''Delete spaces'''
self._st = self._st.replace(' ', '')
return self
def rep(self):
'''Like Python's repr'''
return self._st
def p(self):
'''Duplicate the object'''
return .deep(self)
def process_string(s):
print
sp = StringProcessor(s)
print 'Original:', sp.rep()
print 'After uppercase:', sp.p().uppercase().rep()
print 'After lowercase:', sp.p().lowercase().rep()
print 'After uppercase then capitalize:', sp.p().uppercase().\
capitalize().rep()
print 'After delspace:', sp.p().delspace().rep()
def main():
print "Demo of method chaining in Python:"
# Use extra spaces between words to show effect of delspace.
process_string('hOWz It GoInG?')
process_string('The QUIck brOWn fOx')
main()
下面是這個程序的運行結果:
$ python string_processor.py
Original: hOWz It GoInG?
After uppercase: HOWZ IT GOING?
After lowercase: howz it going?
After uppercase then capitalize: Howz it going?
After delspace: hOWzItGoInG?
Original: The QUIck brOWn fOx
After uppercase: THE QUICK BROWN FOX
After lowercase: the quick brown fox
After uppercase then capitalize: The quick brown fox
After delspace: TheQUIckbrOWnfOx