问题描述
我不太确定该怎么做,但我正在尝试制作一个猜谜游戏并提供有关用户输入的反馈。 例如,如果要猜测的数字是6709,而用户输入6908,则输入将是错误的,但仍部分正确。 如果整数的一部分是正确的,程序将告诉用户它是正确的,如果错误则执行相同的操作。
让我们说要猜的数字是6709
用户输入6908
程序将产生这样的输出(是否是否)
将整数分成几部分以便可以提供反馈的方法是什么? 还是为此使用小数位技术?
1楼
其实,有比这更简单的解决方案:将数字转换为列表
import numpy as np
num1 = 1234
num2 = 1245
a = list(str(num1))
b = list(str(num2))
// a = [1,2,3,4]
// b = [1,2,4,5]
c = np.in1d(a,b)
所得的c为:
array([ True, True, False, False], dtype=bool)
2楼
我认为您最好将数字转换为字符串,然后比较每个字符:
userInput = 6908
answer = 6709
userInputStr = str(userInput)
answerStr = str(answer)
outputStr = " "
print(outputStr.join(["Y" if i == j else "N" for i, j in zip(userInputStr, answerStr)]))
3楼
这里已经记录了一种简单的方法可以像对待字符串一样对待整数,但是我认为展示一种避免将整数转换为字符串的方法可能会很有趣。
您可以编写一个采用整数参数并返回数字列表的方法。 它可能看起来像这样:
def get_digits(num):
digits = []
while num > 0:
digits.insert(0, num % 10)
num /= 10
return digits
请注意,如果您使用的是Python 3,则需要使用//=
运算符进行整数除法。
因此,为了获得两个整数的yes
和no
值的列表,您可以这样做:
def get_element_wise_equality(a, b):
# a and b are integers
digits_a = get_digits(a)
digits_b = get_digits(b)
if len(digits_a) != len(digits_b):
return None
result = []
for i in range(len(digits_a)):
if digits_a[i] == digits_b[i]:
result.append('yes')
else
result.append('no')
return result