2014-12-10 63 views
-2

我試圖讓我的代碼通過並在某些數學完成後彈出。總結的文件就是單獨行中的數字列表。你能否給我一些指示,讓我做這項工作,因爲我很難過。試圖通過一個elif調用一個函數並返回一個標誌

編輯: 我想從主要功能過渡到檢查功能正常工作。我還需要一些幫助切片。從正在導入的文件中的數字是這樣的:

136895201785 
155616717815 
164615189165 
100175288051 
254871145153 

所以在我Checker funtion我想從左至右加在一起的奇數。例如,對於第一個數字,我想添加1,6,9,2,18

全碼:

def checker(line): 

    flag == False 
    odds = line[1 + 3+ 5+ 9+ 11] 
    part2 = odds * 3 
    evens = part2 + line[2 + 4 +6 +8 +10 +12] 
    part3 = evens * mod10 
    last = part3 - 10 
    if last == line[-1]: 
     return flag == True 


def main(): 

    iven = input("what is the file name ") 
    with open(iven) as f: 
     for line in f: 
      line = line.strip() 
      if len(line) > 60: 
       print("line is too long") 
      elif len(line) < 10: 
       print("line is too short") 
      elif not line.isdigit(): 
       print("contains a non-digit") 
      elif check(line) == False: 
       print(line, "error") 
+1

你能解決縮進錯誤嗎? – 2014-12-10 21:50:15

回答

0

要獲得奇數:

odds = line[1::2] 

和找齊:

evens = part2 + line[::2] 
0

遺憾的是沒有你的checker功能工作的部分。看來你可能需要的東西是這樣的:

def check_sums(line): 
    numbers = [int(ch) for ch in line] # convert text string to a series of integers 
    odds = sum(numbers[1::2]) # sum of the odd-index numbers 
    evens = sum(numbers[::2]) # sum of the even-index numbers 
    if numbers[-1] == (odds * 3 + evens) % 10: 
     return True 
    else: 
     return False 

numbers[1::2]說:「獲得numbers從1片,直到第2步結束」,而numbers[::2]說:「獲得numbers從開始切割,直到結束與第2步」。 (有關更多說明,請參見this questiondocumentation。)

請注意,模數的運算符爲x % 10。我想這就是你想要用evens * mod10做什麼。在你的原始代碼中,你也減去10(last = part3 - 10),但這沒有意義,所以我省略了這一步驟。

這將返回你所提到的輸入線以下:

print(check_sums('136895201785')) # >>> False 
print(check_sums('155616717815')) # >>> True 
print(check_sums('164615189165')) # >>> True 
print(check_sums('100175288051')) # >>> False 
print(check_sums('254871145153')) # >>> False 

main功能是好的,只是它指的是功能check,當你已經把它命名爲checker

+0

是步驟numbers = map(int,line)的必要條件,因爲進入的「行」不應該是整數嗎?因爲當我嘗試使用類似你的代碼(甚至複製粘貼你的代碼)時,我得到的'map'對象不是可以下載的。我不希望它再次成爲名單(地圖()) – OSUcsStudent 2014-12-10 23:02:59

+0

請參閱編輯版本。你需要轉換爲'int',因爲當你讀取一個文件時,你會得到一系列的字符串。我已經使用'[int(ch)for ch in line]',但我不知道爲什麼你不想使用'list(map(int,line))',它完全一樣。 – Stuart 2014-12-10 23:34:14

相關問題