【问题标题】:Iteratively assigning variables in Python在 Python 中迭代地分配变量
【发布时间】:2019-09-05 22:57:56
【问题描述】:

不要介意占位符变量名;如何按照我在这里尝试的方式分配给 D、E 和 F?

print("Input 3 search coordinates")
D, E, F, = 0, 0, 0
    for axes in [[D, "Y"], [E, "X"], [F, "Z"]]:
        while True:
            try: 
                axes[0] = int(input("{}-Axis: ".format(axes[1])))
                break
            except:
                print("No, a natural number!")
        print(axes)
print(str(D) + str(E) + str(F))

最后这一点打印调试输出“000”,而不是输入,例如“444”。我需要什么才能将输入分配给正在循环的列表中的变量(同时也不重复自己)?

【问题讨论】:

  • 不要使用动态变量,只使用容器,例如listdict
  • 列表元素不记得它的初始值来自变量D;为列表元素分配一个新值使D 不受干扰。
  • @JohnGordon 作为学术兴趣的问题,编译器对第一个和第二个D 做了什么? (有没有办法从编译中将 Python 变成 C 的程序集,或者那会非常难以阅读?)
  • 这段代码的组织方式,我认为您无法检索输入值,因为您没有为外部列表分配名称。您可以访问的唯一名称是 axes,当 for 循环完成时,它将仅包含最后一个子列表。

标签: python scope variable-assignment


【解决方案1】:
def get_input(axis):
    while True:
        user_input = input(f"{axis}-Axis: ")
        try:
            axis_int = int(user_input)
        except ValueError:
            continue
        else:
            break
    return axis_int

print("Input 3 search coordinates")
x, y, z = [get_input(axis) for axis in "XYZ"]

【讨论】:

    【解决方案2】:

    改用dictionary

    • list 替换为dict,然后调用key 以更新value
    • 对于正在更新命名变量(例如xyz)的情况,字典是更好的data type
    coor_dict = {'x': 0, 'y': 0, 'z': 0}
    
    for k in coor_dict.keys():
        while True:
            try:
                coor_dict[k] = int(input(f'{k}-Axis: '))
                break
            except ValueError:
                print('No, a natural number!')
    
    print(coor_dict)
    

    执行的输出:

    x-Axis:  4
    y-Axis:  5
    z-Axis:  6
    {'x': 4, 'y': 5, 'z': 6}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-10
      • 2019-08-14
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多