我正在尝试做一个宾果游戏,我有一些努力,但最终解决了它。 然而,我的主要“问题”(更像是,我听说它的编程错误)是我的函数我在其他语句中调用我的函数。我不认为这是你想要做的,我没有找到任何解决方法但是..因为这个函数是从另一个叫做menu()的函数调用所以当我使用循环时,它会回到菜单如果不对。
这是我的代码:
def selectingNumbers():
numbers = []
dupl = []
j = 0
print("Now you are gonna select 5 number\n")
while j < 5:
nummer = int(input("Your choice:\n"))
numbers.append(int(nummer))
j = j+1
for i in numbers:
if i not in dupl:
dupl.append(i) #New list without duplicates
if dupl == numbers: #Comparing new list with old list
print("No equal numbers found")
dragning(numbers)
else:
print("Equal numbers found")
selectingNumbers() #Is there a better way to do it?
我在开头的列表中也遇到了一些问题,我知道我可以使用set()函数,但是我想保留原始列表,并将新列表与旧列表进行比较,我可以这样做吗?用“真正的”编程而不是导入模块更好的方式?
希望你能用替代方案回答或指导我这两个问题,如果是的话,请说明为什么我的代码“坏”,如果是的话。
答案 0 :(得分:0)
那么你必须决定是否要使用递归来解决问题。这一行是一个递归调用:
selectingNumbers() #Is there a better way to do it?
哪个好,并不等于糟糕的编程。但是,您的其余功能无法满足递归功能。您重置变量,因此没有真正的基本情况。有关示例,请参阅google或here。
递归让初学者感到困惑,所以我会采用迭代方法。 Here is a bingo python example。
另外,我不确定这条线是否有效:
if dupl == numbers: #Comparing new list with old list
我对python不太熟悉,但根据我的经验,数组被视为对象,因此在该行中你会要求python将两个单独的对象与内存中的唯一引用进行比较。所以它们永远不会是平等的,即使它们内部的值是相同的,因为它们都是单独引用的。 I found this link to answer that concern.
答案 1 :(得分:0)
递归不是&#34;坏&#34;。事实上,它有时可以大大简化问题的解决方案。但是,对于您的代码,它是不必要的。幸运的是,它有时可以用循环替换。对于您的代码,它看起来可能只是循环,直到它从用户获得不包含任何重复项的列表。这意味着它可以重写如下所示(我还简化了其他一些事情):
def selectingNumbers():
while True:
print("Now you are gonna select 5 different numbers\n")
numbers = []
for _ in range(5):
number = int(input("Your choice:\n"))
numbers.append(number)
unique = set(numbers) # will remove any duplicates
if len(unique) == len(numbers): # no dups?
print("No equal numbers found")
break # <--- terminates loop
else:
print("Equal numbers found")
# allow loop to continue
dragning(numbers)