2015-09-19 87 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()应尽可能避免。