Python中文
首页
教程
问答
标签
搜索
登录
注册
如何使用“for in range”向后遍历字符串?(应用程序用于验证UPC代码)
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p><strong>我试图创建一个程序,根据用户输入的数字字符串检查任何长度的UPC代码(尽管大多数是12位)的有效性。</strong>我目前的方法是首先将字符串存储到列表中,然后使用“for in range”遍历列表</p> <p>我使用的UPC代码验证算法的工作原理如下:(UPC代码的设计部分是为了防止收银员在结账时输入错误,因为一个错误的数字可能会使代码无效)</p> <ol> <li><p>验证过程从右到左运行。</p></li> <li><p>对于偶数位置的数字,没有变化。</p></li> <li><p>对于奇数位置的数字,将数字乘以3。</p></li> <li><p>对结果求和。</p></li> <li><p>对于有效的UPC数字,此总和将是10的倍数。</p></li> </ol> <p>我已经能够像我所希望的那样运行一切<strong>除了准则1,验证过程从右到左发生在UPC代码中的数字串上。我现在的方法是从左到右。<strong>如果用户输入的UPC代码是奇数位数,这将证明是一个问题,因为它会使算法失效。</strong></p> <p>下面<code>def upc_check(code):</code>中的输入<code>code</code>是用户输入的UPC代码,以查看UPC代码是否有效。你知道吗</p> <pre><code>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." </code></pre> <p>目前,输出与我期望的一样(即有效的UPC代码显示为有效,无效的UPC代码显示为无效),但算法是从左到右遍历数字字符串。你知道吗</p> <p>从右到左,我希望我可以进行以下替换并获得相同的结果:</p> <p><code>for i in range(0, len(code)):</code></p> <p>与</p> <p><code>for i in range(-1, -len(code), -1):</code></p> <p>这将使代码如下所示:</p> <pre><code>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." </code></pre> <p><strong>但是,当我进行此更改时,所有有效的UPC代码现在返回值invalid,我不确定原因。</strong>我希望输出是相同的。有人有什么建议吗?谢谢你的帮助!你知道吗</p> <p>如果有助于检查,以下是有效的UPC代码:</p> <p>096619363148号</p> <p>017082886026</p> <p>381370036005号</p> <p>以下是一些无效的UPC代码(上面代码的故意输入错误):</p> <p>096619363149</p> <p>017082786026</p> <p>381370036015号</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>你需要的有点复杂。默认情况下,范围不会完全覆盖。你知道吗</p> <pre><code>for i in range(len(code)-1,-1,-1): </code></pre> <p>等会工作,但不觉得我是非常啃老族。我不知道另一种方法,也许别人知道?你知道吗</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
上传图片使用Django Ckeditor获取服务器错误(500)
9 回答
上传图片到 Google App Engine,来自非网页客户端
6 回答
上传图片到Djang的cloudinary
7 回答
上传图片到Flask
1 回答
上传图片到googleappengine并与用户分享图片
10 回答
上传图片到googlecolab,并使用Keras预测分类
8 回答
上传图片到s3python
4 回答
上传图片到s3后,上传附带的拇指
2 回答
上传图片在Django,希望是一个循序渐进的指南?
3 回答
上传图片并显示在Django 2.0模板上
8 回答
上传图片时创建动态路径
6 回答
上传多个图像会破坏除第一个Flas之外的所有内容
6 回答
上传多个文件上传文件FastAPI
8 回答
上传多个文件到Django
10 回答
上传多张图片
3 回答
上传大数据到谷歌硬盘给400
9 回答
上传大文件nginx+uwsgi
2 回答
上传大文件不工作谷歌驱动Python API
4 回答
上传大文件到S3
5 回答
上传大文件太慢
6 回答