需要帮助缩短程序(python初学者)

2024-10-02 06:29:27 发布

您现在位置:Python中文网/ 问答频道 /正文

针对以下任务,“创建一个允许用户输入7位数字的算法/程序,然后计算模数11校验位。然后它应该向用户显示完整的8位数字”,我的解决方案是:

number7= input("Enter a 7 digit number")
listnum= list(number7)
newnum=list(number7)




listnum[0]=int(listnum[0])*8
listnum[1]=int(listnum[1])*7
listnum[2]=int(listnum[2])*6
listnum[3]=int(listnum[3])*5
listnum[4]=int(listnum[4])*4
listnum[5]=int(listnum[5])*3
listnum[6]=int(listnum[6])*2

addednum= int(listnum[0])+int(listnum[1])+int(listnum[2])+int(listnum[3])+int(listnum[4])+int(listnum[5])+int(listnum[6])
modnum= addednum % 11
if modnum== 10:
    checkdigit=X

else:    
    checkdigit=11-modnum

newnum.append(str(checkdigit))


strnewnum = ''.join(newnum)


print(strnewnum)

(很可能不是最有效的方法)

基本上是这样:https://www.loc.gov/issn/check.html 如能帮助缩短课程时间,我们将不胜感激。谢谢


Tags: 用户程序算法数字listint校验位模数
3条回答

做一些用户输入错误检查也是值得的

if len(number7) != 7:
     print ' error '
else:
    //continue

您可以将列表转换为只在输入之后包含int元素

number7 = int(input())

然后可以在循环中执行这些操作

for i in range(len(listnum)):
    listnum[i] *= (8-i)

sum函数还完成了对列表中每个元素的加法(如果可能的话)

编辑:

addedNum=总和(listNum)

对顶部块使用while循环可能是一个很好的起点。然后你可以在同一个步骤中求和并取模数。不知道你是否能把剩下的更简洁

number7= input("Enter a 7 digit number: ")
listnum= list(number7)
newnum=list(number7)

count = 0

while count < 7:
    listnum[0+count] = int(listnum[0+count])*(8-count)
    count += 1

modnum= sum(listnum) % 11

if modnum== 10:
    checkdigit=X
else:
    checkdigit=11-modnum

newnum.append(str(checkdigit))
strnewnum = ''.join(newnum)

print('New number:', strnewnum)

编辑:

如果要以ISSN格式打印,请将If else语句后的代码更改为:

newnum.append(str(checkdigit))
strnewnum = ''.join(newnum)
strnewnum = '-'.join([strnewnum[:4], strnewnum[4:]])

print('ISSN:', strnewnum) 

相关问题 更多 >

    热门问题