所以这里的任务是:输入数量从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)
但我需要做,而不使用列表。这怎么可能?
所以这里的任务是:输入数量从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)
但我需要做,而不使用列表。这怎么可能?
您可以使用set.difference
:
set(range(1, n + 1)).difference(lst)
如果@Nofake不允许使用列表,我非常怀疑他或她是否被允许使用集合。 –
继续取数字并添加它们。
a = 0
a = a+newNumber
然后当你完成输入。当你需要输入下一次, 开始减:
a = a-newNumber
的a
末是你没有考虑投入下一次的数量。
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}
下面的方法不使用任何名单。它假定你可以使用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()
应尽可能避免。
所有数字的总和为n *(n + 1)/ 2。除了其中一个数字的总和是总和(1st)。你如何找到缺少的号码..? – Ioannis