我正在创建一个SuDuko生成器,并试图将我的1分配到每个盒子。为此,我创建了一个包含两个项(作为坐标)的列表。函数运行后,返回一个列表,如[a, 1]
。然后我想要一种快速的方法,将变量a1
分配给1
(a1
将是我想要的变量,如果[a, 1]
被返回,1
,因为我试图分配我的1)。有办法吗?如果是,怎么办?以下是源代码:
import random
def func():
rows1 = ['a', 'b', 'c']
rows2 = ['d', 'e', 'f']
rows3 = ['g', 'h', 'i']
columns1 = [1, 2, 3]
columns2 = [4, 5, 6]
columns3 = [7, 8, 9]
letter1 = random.choice(rows1)
number1 = random.choice(columns1)
random1 = [letter1, number1]
rows1.remove(letter1)
columns1.remove(number1)
letter2 = random.choice(rows1)
number2 = random.choice(columns2)
random2 = [letter2, number2]
rows1.remove(letter2)
columns2.remove(number2)
letter3 = random.choice(rows1)
number3 = random.choice(columns3)
random3 = [letter3, number3]
columns3.remove(number3)
letter4 = random.choice(rows2)
random4 = [letter4, number4]
rows2.remove(letter4)
columns1.remove(number4)
letter5 = random.choice(rows2)
number5 = random.choice(columns2)
random5 = [letter5, number5]
rows2.remove(letter5)
columns2.remove(number5)
letter6 = random.choice(rows2)
number6 = random.choice(columns3)
random6 = [letter6, number6]
columns3.remove(number6)
letter7 = random.choice(rows3)
number7 = random.choice(columns1)
random7 = [letter7, number7]
rows3.remove(letter7)
letter8 = random.choice(rows3)
number8 = random.choice(columns2)
random8 = [letter8, number8]
rows3.remove(letter8)
letter9 = random.choice(rows3)
number9 = random.choice(columns3)
random9 = [letter9, number9]
return (random1, random2, random3) #etc
提前谢谢
是的,有办法做到这一点,但不,你不想。正确的做法是:
与其创建81个不同的变量,不如创建一个可以索引的数据结构。你知道吗
最明显的选择是使用(行,列)对作为键的
dict
。你知道吗首先,对于
dict
:这里的缺点是,这些单元格在你填充之前是不存在的。您可以这样预填充它们:
或者可以使用
defaultdict
,或者使用setdefault
函数代替[]
。你知道吗您也可以使用某种显式的2D对象,例如
list
的list
,或numpy.array
,等等,但是您需要某种方法将字母和数字转换为一对数组坐标:你知道吗
您可能会意识到,这看起来已经足够复杂了,可能值得在一个类中进行总结。如果是这样,你是对的。像这样:
现在你可以这样做:
相关问题 更多 >
编程相关推荐