2015-09-19 34 views
0

所以這裏的任務是:輸入數量從1到N的卡片。然後輸入除一個之外的所有數字。 你的程序應該打印丟失的卡號。 這裏是我的代碼:紙牌遊戲的更好解決方案

n = int(input()) 
lst = [] 

for i in range(n - 1): 
    lst.append(int(input())) 

for i in range(1, n + 1): 
    if not i in lst: 
     print(i) 

但我需要做,而不使用列表。這怎麼可能?

+3

所有數字的總和爲n *(n + 1)/ 2。除了其中一個數字的總和是總和(1st)。你如何找到缺少的號碼..? – Ioannis

回答

1

您可以使用set.difference

set(range(1, n + 1)).difference(lst) 
+1

如果@Nofake不允許使用列表,我非常懷疑他或她是否被允許使用集合。 –

4

繼續取數字並添加它們。

a = 0 
a = a+newNumber 

然後當你完成輸入。當你需要輸入下一次, 開始減:

a = a-newNumber 

a末是你沒有考慮投入下一次的數量。

0
import random 
n = 12 

s = {x for x in range(n)} 
print(s) 

pick = random.sample(s,1).pop(0) 
print(pick) 

s.remove(pick) 

print(s) 

輸出:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} 
10 
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11} 
0

下面的方法不使用任何名單。它假定你可以使用ast模塊:

import ast 

cards_1 = input("Enter your cards: ") 
cards_2 = input("Enter the list again, with one missing: ") 

total_cards_1 = ast.literal_eval(cards_1.replace(" ", "+")) 
total_cards_2 = ast.literal_eval(cards_2.replace(" ", "+")) 

print("{} is missing".format(total_cards_1 - total_cards_2)) 

給你以下可能的輸出:

Enter your cards: 1 3 7 12 
Enter the list again, with one missing: 12 3 1 
7 is missing 

如果您不能使用ast,那麼危險的替代方案是使用eval()如下:

cards_1 = input("Enter your cards: ") 
cards_2 = input("Enter the list again, with one missing: ") 

total_cards_1 = eval(cards_1.replace(" ", "+")) 
total_cards_2 = eval(cards_2.replace(" ", "+")) 

print("{} is missing".format(total_cards_1 - total_cards_2)) 

eval()應儘可能避免。