【问题标题】:Do I have to convert this tuple to a list before I turn it into a int?在将其转换为 int 之前,是否必须将此元组转换为列表?
【发布时间】:2014-01-31 19:37:51
【问题描述】:

我是编程新手。我正在尝试将 pygame 检测到的最高分辨率转换为整数,但是当我尝试将元组转换为 int 时收到错误。

我知道我无法更改元组,但我正在创建一个新的 int 并且它不接受元组值。

所以我终于通过像这样先将元组转换为列表来解决这个错误。

import pygame, sys, time, random
from pygame.locals import *
pygame.init()

modes = pygame.display.list_modes()
maxWindow = list(modes[0])
WINDOWWIDTH = int(maxWindow[0])
WINDOWHEIGHT = int(maxWindow[1])
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), pygame.FULLSCREEN)

有没有更有效的方法来进行这种转换?我猜我走了很长一段路。

另外,是否有一个 pygame 函数可以为我自动检测最大或本机分辨率,而此代码是不必要的?

谢谢

【问题讨论】:

  • 为什么要拆分它? pygame.display.set_mode(maxWindow, pygame.FULLSCREEN)
  • 这可能是我没有放入更多程序的坏处,但答案是因为 pygame.Rect 对象稍后会像这样单独使用它们。 pygame.Rect(random.randint(0, WINDOWWIDTH - 20), random.randint(0, WINDOWHEIGHT - 20), 40, 100)
  • 哦,好的。然后只需使用WINDOWWIDTH, WINDOWHEIGHT = modes[0]。这应该可行,因为list_modes() 已经返回整数的二元组,无需将宽度/高度转换为整数,您只需解压缩元组。
  • 谢谢,这行得通,看起来更好。

标签: python int pygame tuples


【解决方案1】:

你可以试试map函数:

WINDOWWIDTH, WINDOWHEIGHT = map(int, modes[0])

正如@LukasGraf 提到的,pygame.display.list_modes() 返回一个包含整数的元组列表,因此,映射到 int 是不必要的。相反,您可以这样做:

WINDOWWIDTH, WINDOWHEIGHT = modes[0]

【讨论】:

  • 我以前从未使用过地图功能。我不认为 inventwithpython 或 codecademy 涵盖了它,但我把它扔在那里并且它起作用了。谢谢。
  • 不过完全是unnecessary
  • 我不习惯 pygame。感谢您指出@LukasGraf。见编辑。
【解决方案2】:

Christian 的回答可以满足您的需求。您还可以了解list comprehensions,它为映射、过滤等提供了通用结构。使用列表推导,您可以通过以下方式进行同样的操作:

WINDOW_WIDTH, WINDOW_HEIGHT = [int(x) for x in modes[0]]

【讨论】:

  • 列表理解会起作用,但完全没有必要。 list_modes() 已经 returns a list of two-tuples of integers
  • 没有看到您对原始问题的评论。是的,如果我们已经得到了元组,那么就不需要再经历一遍了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2020-12-08
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
相关资源
最近更新 更多