我想写一个迭代列表的for循环。这份清单是一副卡片"。共有16张牌,编号为0 - 7.每个号码在列表中出现两次。
当我评论for循环时,程序正确显示画布左侧的1张卡片。但是当我使用循环时,没有显示任何内容。代码不完整,需要使用特定的在线软件运行。整个计划的链接如下。
http://www.codeskulptor.org/#user41_ZFQIR6Hm1W_0.py
我想使用for循环用0到7范围内的14个数字填充画布。
以下是代码,如果您能够发现错误,请与我们联系。
#card width:
C_W = 50
#card height:
C_H = 98
#upper left corner of a card:
u_l = [1 , 1]
deck = range(0,8)
deck1 = deck
deck.extend(deck1)
#called by a button on the GUI
def new_game():
random.shuffle(deck)
# cards are 50x100 pixels in size
def draw(canvas):
global C_W, C_H, deck
count = 0
for card in deck:
canvas.draw_text(str(deck[count]), (C_W / 3, C_H - 25), 60, "White")
C_W += C_W
count += 1
答案 0 :(得分:1)
看起来您的draw
函数在无限循环中被调用,可能在这里:
frame.set_draw_handler(draw)
所以你应该查找那个框架功能。
也不需要deck1
这样做:
deck = range(8) * 2
答案 1 :(得分:1)
simplegui中的draw()
函数大约每秒调用60次,并且每次调用函数时,版本中for
循环中的代码将全局C_W
加倍16次。这意味着它的价值很快就会变成天文数字,文字会从银幕外的某个地方的屏幕上拉出来。
这是避免这个问题的简单方法:
def draw(canvas):
global C_W, C_H, deck
count = 0
c_w = C_W # init with value of global variable
for card in deck: # note "card" is not being used
canvas.draw_text(str(deck[count]), (c_w / 3, C_H - 25), 60, "White")
c_w += c_w
count += 1
答案 2 :(得分:0)
试试这个循环:
for card,count in enumerate(deck):
canvas.draw_text(str(card), (C_W * count+1 / 3, C_H - 25), 60, "White")
它可以防止全局值发生变化,并为您提供预期的效果。