我工作的項目歐拉的問題22:項目歐拉#22 Python,缺少2205點?
使用names.txt中(右鍵「目標另存/目標爲...」),載有超過五千年的名字一個46K的文本文件,首先按字母順序排序。然後計算每個名稱的字母值,將此值乘以列表中的字母位置以獲得名稱分數。
例如,當列表按字母順序排序時,值爲3 + 15 + 12 + 9 + 14 = 53的COLIN 是 列表中的第938個名稱。因此,COLIN將獲得938×53 = 49714的分數。
文件中所有名稱得分的總和是多少?
http://projecteuler.net/problem=22
當我編譯下面我的代碼,我得到的答案。正確的答案應該是。
導入時間
DEF euler_22():
## Creates a sorted list of the names in Py_Euler_22.txt names = open('Py_Euler_22.txt', 'r') names = names.read() names = names.split('","') names[0] = names[0][1:] names[-1] = names[-1][:-2] names = sorted(names) ## Creates a dictionary: letter -> value value_letters = {} start = ord("A") for i in range(0, 26): value_letters[chr(start+i)] = i+1 result = 0 for i in range(1, len(names)+1): name = names[i-1] sum_letters = 0 for letter in name: sum_letters += value_letters[letter]*i # = value of the letter multiplied with the name position result += sum_letters return result
TSTART =了time.time() 打印euler_22() 打印 「運行時間:」 + STR(了time.time( ) - tstart)
我試圖找到一個類似的解決方案,但我只知道Python,這限制了選項。 我用更簡單的文本文件運行程序,我創建了,我可以在沒有程序的情況下獲得答案,並且所有程序都可以工作。我搜索了這個問題的答案,但這也沒有幫助,因爲我無法找到缺點。
我是一名初學者,所以我非常感謝關於程序和Python的任何提示,而不僅僅是那些,這將幫助我正確地解決問題。
非常感謝!
爲什麼這個'名稱[0] =名[0] [1:] 名稱[-1] =名[-1] [: - 2]' ?? –
從名字和姓氏中刪除引號;我認爲''''分隔每個名字的''',並且去掉'''會更好,但是他的代碼會起作用。 –
@AdamMatan,您需要使用名稱[-1] [: - 1]來刪除姓氏 – spinlok