为什么这个for循环不起作用

时间:2016-08-01 10:24:52

标签: python python-2.7

我想写一个迭代列表的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

3 个答案:

答案 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")

它可以防止全局值发生变化,并为您提供预期的效果。