[英]Iterate through a string forwards and backwards, extracting alternating characters
[英]How to iterate backwards through a string using “for in range”? (application is to validate UPC codes)
我正在嘗試創建一個程序,該程序根據用戶輸入的一串數字來檢查任何長度的 UPC 代碼(盡管大多數是 12 位)的有效性。 我目前的方法是首先將字符串存儲到列表中,然后使用“for in range”遍歷列表。
我用於 UPC 代碼驗證算法如何工作的指南如下:(UPC 代碼的設計方式部分是為了防止收銀員在結賬時打錯字,因為一個錯誤的數字可能會使代碼無效)
驗證過程從右到左運行。
對於偶數位置的數字,沒有變化。
對於奇數位置的數字,將數字乘以 3。
總結結果。
對於有效的 UPC 編號,此總和將是 10 的倍數。
除了准則 1 之外,我已經能夠按照我希望的那樣運行所有東西,即驗證過程從右到左跨越 UPC 代碼中的數字字符串。 我目前的方法是從左到右。 如果用戶輸入的 UPC 代碼是奇數位數,這將被證明是一個問題,因為它會拋出算法。
def upc_check(code):
中的輸入code
:下面是用戶輸入的UPC碼,查看UPC碼是否有效。
def upc_check(code):
ODD_DIGIT_MULTIPLIER = 3
UPC_VALIDITY_DIVISOR = 10
digits = []
for num in code:
digits.append(int(num))
print(digits)
check_sum = 0
for i in range(0, len(code)):
if (i + 1) % 2 != 0:
check_sum += (ODD_DIGIT_MULTIPLIER * digits[i])
else:
check_sum += (digits[i])
if check_sum % UPC_VALIDITY_DIVISOR == 0:
return "Valid UPC code."
else:
return "Invalid UPC code."
目前,output 符合我的預期(即有效的 UPC 代碼顯示為有效,無效的 UPC 代碼顯示為無效),但算法是從左到右通過數字字符串。
從右到左到 go,我希望我可以進行以下替換並達到相同的結果:
for i in range(0, len(code)):
和
for i in range(-1, -len(code), -1):
這將使代碼如下所示:
def upc_check(code):
ODD_DIGIT_MULTIPLIER = 3
UPC_VALIDITY_DIVISOR = 10
digits = []
for num in code:
digits.append(int(num))
print(digits)
check_sum = 0
for i in range(-1, -len(code), -1):
if (i + 1) % 2 != 0:
check_sum += (ODD_DIGIT_MULTIPLIER * digits[i])
else:
check_sum += (digits[i])
if check_sum % UPC_VALIDITY_DIVISOR == 0:
return "Valid UPC code."
else:
return "Invalid UPC code."
但是,當我進行此更改時,我所有有效的 UPC 代碼現在都返回無效值,我不確定為什么。 我希望 output 是一樣的。 有沒有人有什么建議? 感謝您的任何幫助!
如果對檢查有幫助,以下是有效的 UPC 代碼:
096619363148
017082886026
381370036005
以下是一些無效的 UPC 代碼(上述代碼中的故意拼寫錯誤):
096619363149
017082786026
381370036015
你在這里需要的有點復雜。 默認情況下,范圍不是 go 的完整方式。
for i in range(len(code)-1,-1,-1):
等會工作,但不會讓我覺得很neet。 我不知道其他方法,也許其他人知道?
如果代碼從左到右按照您的預期工作,那么保持大部分代碼不變的快速方法是在 for 循環之前反轉您的數字列表。
所以digits = digits.reverse()
和你的 for 循環的第一行可以保持原樣
for i in range(0, len(code)):
我會對此進行測試並很快更新我的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.