我正在尝试比较行libraryDependencies += "net.sf.json-lib" % "json-lib" % "2.4" classifier "jdk15"
上的两个列表并返回找到的匹配项。
列表包含一个用户选择的号码(#12
),其中一个是随机生成的(un
)。
例如,rn
和[['1', '5', '3', '7']]
会返回[['9', '6', '3', '2']]
。
我对python很新,并且正在使用找到的HERE解决方案,但我的代码还没有成功。
[3]
答案 0 :(得分:1)
当您将列表来回转换为字符串时,结果将不是原始字符串。它将是一个包含原始字符串表示字符的列表。
>>> a = [1, 2, 3]
>>> b = str(a)
>>> c = list(b)
>>> c
['[', '1', ',', ' ', '2', ',', ' ', '3', ']']
不要进行此类投射,如果必须,请使用','.join(map(str, a))
投射到字符串,然后list(map(int, b.split(',')))
投射到列表。
答案 1 :(得分:1)
使用函数参数,而不是使用列表来传递数据。
import random
import re
def check(random_number, user_number):
print('random_number {}, user_number {}'.format(random_number, user_number))
x = set(random_number).intersection(user_number)
print(x)
def numval():
random_num = str(random.choice(range(1000, 9999)))
while True:
user_num = (input("Please enter a 4 digit number: "))
if re.match("^[0-9]{4,4}$", user_num):
check(random_num, user_num)
break
numval()
这可以避免访问函数中的全局变量,并且通常更具可读性。这样做我就能删除函数numsys()
,因为它所做的只是不必要地摆弄全局变量,以便在函数check()
中访问它们的值。
一个简化是将随机数和用户数保持为字符串。 set()
可以在字符串上调用,而不需要先将其转换为列表。如果您使用set.intersection()
而不是&
运算符,则只需将其中一个字符串显式转换为集合。
我还冒昧地重命名变量以符合PEP8 style guide。