2017-04-24 36 views
-5

我正在試圖製作一個總計最多4位數的程序,其中有一些限制如:總計有4位有限制

1)輸入最多隻能有4位數字。

2)輸入可以是僅一個正數

3)輸入不能漂浮

4)不能有循環功能

5)不能被Len函數

在此之後,我已經得手編碼

我試圖做的變量列表,可以是9 0之間,比他們總結的togethe河
如果有人能幫我解決這個問題,那就太好了。它只有我的第一週編碼,我有點麻煩。

這是我的代碼:

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

我很難理解你的問題是什麼。你有什麼具體問題? – user2896976

+0

'sum'是一個內置的Python函數。你應該重命名你的變量,像'my_sum'。 – blacksite

+0

對不起,我會盡量更清楚。最多可以有4位數字,這意味着可以有2位和3位數字的總和。我試圖提出4個變量:x,y,z,w,它們可以是0-9之間的整數,並將它們總和起來 –

回答

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]) 

這不起作用,當你想索引列表中的值你應該se 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):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]) 

此時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)