我试图制作一个总计最多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)
感谢。
答案 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 - 建立索引
很好,现在您可以将价值转换为x
,y
,z
和w
。但是,只有当您输入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])
此时x
,y
,z
和w
都有值,您可以使用:
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)