连接4个二进制整数数组的麻烦

时间:2013-11-23 22:08:49

标签: python concatenation dice

刚开始使用任何类型的编程,python是我上课的语言。

我的老师玩了一个叫做二进制骰子的游戏,它只有4个骰子(代表一个半字节),每个骰子有3个边(0)和3个边(1),你应该安排骰子让你得到最高可能值,然后将该值转换为十六进制数字。

我正在尝试将其写入py程序,因此它生成4个二进制数字,用户对它们进行排序,检查它,然后让用户输入十六进制值,检查它自己的二进制到十六进制的转换,使用连接的半字节作为一个4位数值。

继续我到目前为止所得到的...(再次,只编程了几个星期)

#Binary Dice Program

#individual integers generated randomly
print ("This Game Simulates Binary Dice,")
print ("Your objective is to sort the 4 given")
print ("binary numbers so they make the highest")
print ("possible hexadecimal value...")
auth = input("When you are ready, hit Enter to continue...")
print (" ")

#generation and display of given ints
import random
die0 = random.randint (0, 1)
die1 = random.randint (0, 1)
die2 = random.randint (0, 1)
die3 = random.randint (0, 1)
dieArray=[die0, die1, die2, die3]
print ("Your die are showing as ")
print (dieArray)

#sort array from highest to lowest
def get_data():
       return dieArray
nib=get_data()
nib.sort(reverse=True)

for num in nib:
    print .join((str(num))) #I think Im doing this completely wrong

#Once we get a concatenated 4 digit binary nibble,
#I want to be able to translate that nibble into a hex value
#that is used to check against the user's input

在数组中排序后的数字串联后

例如,如果我得到一个[0,1,1,0]数组,我希望它排序并连接显示为一个新值,“1100”

2 个答案:

答案 0 :(得分:2)

您正在尝试对列表进行排序和加入。我会使用代码行

''.join(map(str, sorted(nib, reverse = True)))

答案 1 :(得分:0)

  

例如,如果我得到[0,1,1,0]的数组,我希望它排序并连接以显示为新值,“1100”

L = [0,1,1,0]
print("1"*L.count(1) + "0"*L.count(0)) # O(n)

或者

L = [0,1,1,0]
print("".join(map(str, sorted(L, reverse=True)))) # O(n*log n)

您可以一次滚动所有二进制骰子:

roll_n_dices = lambda n: random.getrandbits(n)
r = roll_n_dices(4)
binstr = bin(r)[2:].zfill(4)
sorted_binstr = "1"*binstr.count("1") + "0"*binstr.count("0")
hex_value = hex(int(sorted_binstr, 2))