【问题标题】:How do I split an input String into seperate usable integers in python如何在python中将输入字符串拆分为单独的可用整数
【发布时间】:2016-09-08 20:48:03
【问题描述】:

我正在尝试将输入字符串 xyz 拆分为 3 个标记,然后拆分为 3 个整数,称为 x、y 和 z。 我希望它这样做,这样我就必须做更少的输入,然后能够将它们用于mc.setblocks(x1, y1, z1, x, y, z, BlockId) 的坐标。我如何将它分开,以便它变成 3 个不同的整数和\或将它们拆分为令牌来这样做?我知道如何在 java 中做到这一点,但我不知道如何在 python 中做到这一点。它应该看起来像这样:

xyz1 = input("enter first coordinates example: 102 36 74")
st = StringTokenizer(xyz1)
x = st.nextToken
y = st.nextToken
z = st.nextToken

【问题讨论】:

  • 你保证他们会输入 3 个有效数字,用空格分隔吗?
  • 如果发生这种情况,我将使用异常捕获器
  • 但是它们总是用空格分隔吗?因为那么你可以使用 string.split() 方法。
  • 那些总是(3 2 2)位的形式吗?

标签: python split coordinates tokenize minecraft


【解决方案1】:

您可以使用string 对象的split() 方法,该方法默认分割为空白字符。这将为您提供一个单独的字符串列表。要将每个字符串转换为integer,您可以使用推导式。假设输入的格式正确,下面的单行代码会做到这一点:

x, y, z = ( int(coord) for coord in xyz1.split() )

【讨论】:

    【解决方案2】:

    你可以把xyz1中的字符串拆分成这样的整数

    xyz_list = [int(x) for x in xyz1.split(' ')]
    

    如果您不想将这些整数放在一个列表中,而是希望将它们存储到单独的变量中,那么就这样做

    x = xyz_list[0]
    y = xyz_list[1]
    z = xyz_list[2]
    

    【讨论】:

    • xyz1 是一个字符串,我需要将它分开,然后将分开的标记的值转换为 3 个整数
    • 只是一个简短的旁注:这个生成器表达式非常适合解决任务。由于我认为 OP 需要额外的错误和格式处理,因此使用 for 循环的更通用方法会更灵活。
    • @TheLittleCoder 你试过了吗?我认为它会完成您的要求。
    • 如果您需要将列表元素放入三个单独变量的额外步骤,请查看我的编辑。
    • @Matt Cremeens 出于某种奇怪的原因,即使我按照你说的做了它也不起作用。它执行此 Traceback(最近一次调用最后):文件“C:/Users/arsen/Desktop/Minecraft Python/Variables/BlockStacking.py”,第 7 行,在 xyz_1_List = ( int(coord) for coord in xyz1 .split() ) NameError: name 'xyz1' is not defined
    【解决方案3】:

    我试着少写一些“pythonically”这样你就可以看到发生了什么:

    xyz1 = input("Enter first 3 coordinates (example: 102 36 74): ")
    
    tokens = xyz1.split() # returns a list (ArrayList) of tokenized values
    try:
        x = int(tokens[0])   # sets x,y,z to the first three tokens
        y = int(tokens[1])
        z = int(tokens[2])
    except IndexError:       # if 0,1,2 are out of bounds
        print("You must enter 3 values")
    except ValueError:       # if the entered number was of invalid int format
        print("Invalid integer format")
    

    如果您输入的坐标不止三个,您将对输入进行标记并循环,将每个标记转换为 int 并将其附加到列表中:

    xyz1 = input("Enter first 3 coordinates (example: 102 36 74): ")
    
    tokens = xyz1.split() # returns a list (ArrayList) of tokenized values
    coords = []     # initialise empty list
    for tkn in tokens:
        try:
            coords.append(int(tkn))     # convert token to int
        except ValueError:       # if the entered number was of invalid int format
            print("Invalid integer format: {}".format(tkn))
            raise
    print(coords)   # coords is now a list of integers that were entered
    

    有趣的事实是,您可以在一个主要的单行中完成上述操作。这是一种更 Pythonic 的方式,因此您可以将其与上述方式进行对比以了解其含义:

    try:
        xyz1 = input("Enter first 3 coordinates (example: 102 36 74): ")
        coords = [int(tkn) for tkn in xyz1.split()]
    except ValueError:       # if the entered number was of invalid int format
        print("Invalid integer format: {}".format(tkn))
        raise
    

    【讨论】:

      猜你喜欢
      • 2013-03-01
      • 2010-10-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 2014-09-04
      相关资源
      最近更新 更多