首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >While循环无法处理值10

While循环无法处理值10
EN

Stack Overflow用户
提问于 2019-11-17 20:39:47
回答 1查看 65关注 0票数 0

这个程序应该给出一个名字的命运号。它给出了所有其他用户输入的正确结果。但是,如果用户名的目标编号为10,则输出为10而不是1。while循环应该做到这一点。我试图通过放入一条print语句来避开它,但它仍然不起作用。哪里出了问题?

代码语言:javascript
复制
#!usr/bin/env python3
name = input("Please Enter Your Full Name Without Spaces in between: ")
if name.isalpha():
    name1 = name.upper()
    initsum = 0
    d = {'A':1,
    'B':2,
    'C':3,
    'D':4,
    'E':5,
    'F':8,
    'G':3,
    'H':5,
    'I':1,
    'J':1,
    'K':2,
    'L':3,
    'M':4,
    'N':5,
    'O':7,
    'P':8,
    'Q':1,
    'R':2,
    'S':3,
    'T':4,
    'U':6,
    'V':6,
    'W':6,
    'X':5,
    'Y':1,
    'Z':7}
    name2 = list(name1)
    initsum = 0
    for chr in name2:
        initsum += d[chr]
    if initsum == 10:
        print("Your destiny number is 1")
    else:
        check = str(initsum)
        if len(check)>1:
            tot=0
            while(initsum>0):
                dig=initsum%10
                tot=tot+dig
                initsum=initsum//10
            print("Your destiny number is", tot)
        else:
            print("Your destiny number is", initsum)
else:
    print("Name is invalid")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-17 20:51:19

你用太多的方式把这个函数复杂化了。同样的事情的一个简单示例是:

代码语言:javascript
复制
name = input("Please Enter Your Full Name Without Spaces in between: ")
destiny = sum(d[char] for char in name.upper())
while len(str(destiny)) > 1:
    destiny = sum(int(x) for x in str(destiny))

如果您不熟悉sum (或者如果您想要一个更长、更易读的版本),它基本上与执行以下操作相同:

代码语言:javascript
复制
name = input("Please Enter Your Full Name Without Spaces in between: ")
destiny = 0
for char in name.upper():
    destiny += d[char]
while len(str(destiny)) > 1:
    tmp = destiny
    destiny = 0
    for char in str(tmp):
        destiny += int(char)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58900530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档