卡技巧程序
我一直在试图创建一个程序,将21张卡交易成3堆。然后要求用户考虑一张卡片并告诉程序他们的卡片是哪一堆。这一步再重复4次,直到在21张卡的正中找到卡。该程序应该去end()
功能打印用户卡,问题是,一切工作正常,但它打印在end()
函数声明5次。我知道这可能是一件非常愚蠢的事情,但我想不出一个解决方案。提前致谢。卡技巧程序
import random cards = []
count = 0
def end():
print("Your card is: ", cards[10])
def split():
def choice():
global count
while True:
if count >=0 and count <= 3:
global cards
user = input("Think of a card. Now to which pile does your card belong to?: ")
count = count + 1
if user == "1":
del cards[:]
cards = (pile_2 + pile_1 + pile_3)
print(cards)
split()
elif user == "2":
del cards[:]
cards = (pile_1 + pile_2 + pile_3)
print(cards)
split()
elif user == "3":
del cards[:]
cards = (pile_1 + pile_3 + pile_2)
print(cards)
split()
else:
print("Invalid input")
main()
elif count == 4:
end()
break
pile_1 = []
pile_2 = []
pile_3 = []
counter = 0
sub_counter = 0
while True:
if sub_counter >= 0 and sub_counter <= 20:
for item in cards:
if counter == 0:
pile_1.append(item)
counter = counter + 1
elif counter == 1:
pile_2.append(item)
counter = counter + 1
elif counter == 2:
pile_3.append(item)
counter = 0
sub_counter = sub_counter + 1
elif sub_counter == 21:
False
break
print()
print("first pile: ", pile_1)
print("second pile: ", pile_2)
print("third pile: ", pile_3)
choice()
def main():
file = open('cards.txt.', 'r')
for line in file:
cards.append(line)
file.close
random.shuffle(cards)
print(cards)
split()
main()
回答:
当你到达elif count == 4行时,count总是4.这就是为什么。我有一种预感,如果你的顺序改变了它可以工作:
... if count == 4:
end()
break
elif count >= 0 and count <=3:
...
但是,它会更好,如果你可以把它写不全局变量。而不是全局变量你有地方的那些作为参数传递给下一个函数。就像这样:
import random def end(cards):
print("Your card is: ", cards[10])
def choice(count,pile_1,pile_2,pile_3):
while True:
user = input("Think of a card. Now to which pile does your card belong to?: ")
if user == "1":
cards = (pile_2 + pile_1 + pile_3)
print(cards)
split(count+1, cards)
break
elif user == "2":
cards = (pile_1 + pile_2 + pile_3)
print(cards)
split(count+1, cards)
break
elif user == "3":
cards = (pile_1 + pile_3 + pile_2)
print(cards)
split(count+1, cards)
break
else:
print("Invalid input")
def split(count,cards):
if count == 4:
end(cards)
return
pile_1 = []
pile_2 = []
pile_3 = []
for i in range(0,21,3):
pile_1.append(cards[i])
pile_2.append(cards[i+1])
pile_3.append(cards[i+2])
print()
print("first pile: ", pile_1)
print("second pile: ", pile_2)
print("third pile: ", pile_3)
choice(count,pile_1,pile_2,pile_3)
def main():
cards = []
file = open('cards.txt.', 'r')
for line in file:
cards.append(line.strip())
file.close
random.shuffle(cards)
print(cards)
split(0, cards)
main()
回答:
你有递归调用。 split()调用choice(),然后再调用split(),它可以调用main(),它再次调用split()。
回答:
我已经找到了解决办法:
这仅仅是一个的ident的事,
代替:
elif count == 4: end()
break
我把break语句上与elif相同的行:
elif count == 4: end()
break
这似乎解决了它
以上是 卡技巧程序 的全部内容, 来源链接: utcz.com/qa/258452.html