总计最多4位有限制

时间:2017-04-24 17:09:52

标签: python

我试图制作一个总计最多4位的程序,但有一些限制,例如:

1)输入最多只能为4位数。

2)输入只能是正数

3)输入不能浮动

4)不能有循环功能

5)不能成为len函数

在此之后,我已经成功编码

我试图制作一个可以在0到9之间的变量列表,而不是将它们加在一起。
如果有人可以帮我解决,那就太好了。它只是我的第一周编码,我有点麻烦。

这是我的代码:

num = float(input("Please enter any number up to 4 digits: \n"))


if num < 0:
    print ("Please enter a positive number")
elif num > 9999:
    print ("Please enter up to 4 digits")
elif (num % 1 != 0): 
    print ("Please enter only integer and not float")

num =str(num)
num = list(num)
x = (int(num)[0])
y = (int(num)[1])
z = (int(num)[2])
w = (int(num)[3])


if int(x) > 0 and int(x) <= 9:
    sum = x
elif int(y) >= 0 and int(y) >= 9:
    sum = x+y
elif int(z) >= 0 and int(z) >= 9:
    sum = x+y+z
elif int(w) >= 0 and int(w) >= 9:
    sum = (x+y+z+w)

感谢。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题,而不仅仅是您所描述的问题:

问题1 - 以字符串形式浮动

num = str(num)
num = list(num)

假设你输入数字123,这个浮点数是123.0所以当转换为字符串然后列出你有num == ['1', '2', '3', '.', '0']时。当您w分配'.'不是int可以理解的有效字符时,这会给您带来问题:

num = int(num)
num = str(num)
num = list(num)

或:

num = list(int(str(num)))

问题2 - 分配值

x = (int(num)[0])
y = (int(num)[1])
z = (int(num)[2])
w = (int(num)[3])

这不起作用,当您想要列出列表中的值时,您应该使用num[i],但是您要在整个列表int上调用int(num)。额外的括号也是多余的:

x = int(num[0])
y = int(num[1])
z = int(num[2])
w = int(num[3])

问题3 - 建立索引

很好,现在您可以将价值转换为xyzw。但是,只有当您输入4位数字时,如果您输入的内容不是123,那么您将拥有num == [1,2,3]。这意味着当您致电w = int(num[3])时,您会收到IndexError,因为num在索引3没有任何值。此时您已经提到不能使用len函数或循环,因此您可以使用此代码段(来自this answer):

length = sum(map(lambda x:1, num))

然后使用if语句来获取适当的值(我还为每个变量分配了默认值0):

x, y, z, w = 0, 0, 0, 0
x = int(num[0])
if length >= 2:
    y = int(num[1])
if length >= 3:
    z = int(num[2])
if length >= 4:
    w = int(num[3])

此时xyzw都有值,您可以使用:

my_sum = x + y + z + w

获取最终价值:

num = float(input("Please enter any number up to 4 digits: \n"))

if num < 0:
    print ("Please enter a positive number")
elif num > 9999:
    print ("Please enter up to 4 digits")
elif (num % 1 != 0): 
    print ("Please enter only integer and not float")

num = list(str(int(num)))
length = sum(map(lambda x:1, num))

x, y, z, w = 0, 0, 0, 0
x = int(num[0])
if length >= 2:
    y = int(num[1])
if length >= 3:
    z = int(num[2])
if length >= 4:
    w = int(num[3])

my_sum = x + y + z + w

红利问题 - 输入验证

这只会留下必须验证用户输入的问题,你可以使用递归来完成,这是我最后的解决方案,我快速整理:

def get_input(msg):
    try:
        num = float(input(msg))
    except ValueError:
        print("Please enter a number, not a string")
        return get_input(msg)
    if num < 0:
        print ("Please enter a positive number")
        return get_input(msg)
    elif num > 9999:
        print ("Please enter up to 4 digits")
        return get_input(msg)
    elif (num % 1 != 0): 
        print ("Please enter only integer and not float")
        return get_input(msg)
    else:
        return int(num)

num = get_input("Please enter any number up to 4 digits: \n")
s = sum(map(int,list(str(num))))
print(s)