【问题标题】:Array in python in nested for-loops [duplicate]嵌套for循环中的python数组[重复]
【发布时间】:2021-11-11 08:57:57
【问题描述】:

我正在尝试创建一个运算符,用户在其中键入棋盘上的位置,如果它站在黑色或白色方块上,我的程序将打印出来。问题是我的 if 语句不能正确地遍历我的数组。

pos = input (f'Hvilken posisjon står brikken på? ') 

bokstav = pos[0]                

tall = int(pos[1])              

for x in bokstav:
  for y in str(tall):
    
    partall_svart = ['b','d','f','h']
    partall_hvit = ['a','c','e','g']

    print (partall_svart)
    print (partall_hvit)
    
    if x == partall_svart and int(y) % 2 == 0:
        print (f'Posisjon: {bokstav}{tall}\nSvart')
    
    elif x == partall_svart and int(y) % 2 == 1:
        print (f'Posisjon: {bokstav}{tall}\nHvit')
    
    if x == partall_hvit and int(y) % 2 == 0:
        print (f'Posisjon: {bokstav}{tall}\nHvit')
    
    elif x == partall_hvit and int(y) % 2 == 1:
        print (f'Posisjon: {bokstav}{tall}\nSvart')

【问题讨论】:

  • 您指的是哪个if 声明?您是否要检查x 是否是partall_svart 中的项目之一?使用in,而不是==
  • 这个问题在这里得到解答:Check if item is in an array / list
  • aA 的代码点是奇数。因此,由于正方形A1 是黑色的,您只需检查行号的奇偶校验是否与列字母代码点的奇偶校验相同:即svart = ord(pos[0]) % 2 == int(pos[1]) % 2。不需要 for 循环。

标签: python arrays if-statement


【解决方案1】:

其实你也可以从字母部分做一个数字,然后在两个部分都使用%2。由于 ekhumoro 对ord() 的建议可能有点深奥,因此此代码使用find() 代替:

pos = input (f'Hvilken posisjon star brikken pa? ')

bokstav = pos[0]                
bokstavtall = "abcdefgh".find(bokstav.lower()) + 1

tall = int(pos[1])              

print (f'Posisjon: {bokstav}{tall}\n{"Svart" if tall % 2 == bokstavtall % 2 else "Hvit"}')

【讨论】:

  • 现在世界真的变得如此愚蠢,以至于学习像ord这样的简单函数会被认为过于繁重吗?我也可以建议int(pos[0], 18) - 9 - 但大概这会被认为更加“深奥”,因为它意味着对数字基础的基本理解。
  • @ekhumoro 老实说,我更喜欢 18-base。记住 ASCII 代码只是不太直观。
  • ord 的全部意义是为了省去您记住代码点的麻烦吗?但无论如何,重要的是平价,而不是确切的数字。
  • 记住 1 位 ASCII 码肯定是人们一直在做的事情 :-)
  • 我指的是mathematical parity,它只是表示整数的奇数/偶数。我想大多数人都知道6597 是奇数,并且可以合理假设相关代码点是连续的;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
相关资源
最近更新 更多