有幾個問題,你的代碼,不只是你所描述的一個:
問題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])
這不起作用,當你想索引列表中的值你應該se 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):if語句,以獲得適當的值
length = sum(map(lambda x:1, num))
然後使用(我「以前也指定爲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)
我很難理解你的問題是什麼。你有什麼具體問題? – user2896976
'sum'是一個內置的Python函數。你應該重命名你的變量,像'my_sum'。 – blacksite
對不起,我會盡量更清楚。最多可以有4位數字,這意味着可以有2位和3位數字的總和。我試圖提出4個變量:x,y,z,w,它們可以是0-9之間的整數,並將它們總和起來 –