我有一个二十一点游戏的程序。它没有完成,但我遇到了Unicode问题。当它打印一个字符串时,它的格式不正确(Look Below)。它是Python 3。
from unicurses import *
import sys
import time
from random import choice as rc
import random
def total(hand): #total
aces = hand.count(11)
t = sum(hand)
if t > 21 and aces > 0:
while aces > 0 and t > 21:
t -= 10
aces -= 1
return t
def random(one,two):
import random
number = random.randint(one,two)
return number
def number():
number = random(1,13)
if number == 13:
value = '0'
elif number == 12:
value = '0'
elif number == 11:
value = '0'
elif number == 10:
value = '0'
elif number < 10:
value = number
return value
def card():
cardnumber = number()
card = cardnumber
return card
def store10Cards():
tenCards = [card(),
card(),
card(),
card(),
card(),
card(),
card(),
card(),
card(),
card()]
return tenCards
stdscr = initscr()
cards = store10Cards()
mvaddstr(10, 10, '┌──────────┐\n│{} │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ {}│\n└──────────┘'.format(cards[0], cards[0]).encode('utf-8'))
#deck = [] #deck of cards
#cwin = 0 #computer wins
#pwin = 0 #player wins
#for i in range (2, 11):
# for j in range ([24, 72][i == 10]):
# deck.append(i)
#stdscr = initscr() #Start the standard screen
start_color() #Start the color service
init_pair(1, COLOR_RED, 0) #color pair 1 is red text and no highlighting
init_pair(2, COLOR_WHITE, 0) #color pair 2 is white text and no highlighting
addstr('\n\n------------------------------------------------------------------------', color_pair(1) | A_BOLD)
addstr('\n\n\nAre You Ready To Try And Defeat The Undefeated Blackjack Master?\n\n\nThe First One To Win 10 Hands Wins!!!\n\n\nAces Are Counted As 11s And Automaticlly Change To 1 If You Go Over 21. \n\n\nWinning 1 Hand Does Not Mean You Win The Game\n\n\nIt Is Possible To Win But Very Hard!!! Good Luck!!!\n\n\n', color_pair(2))
addstr('------------------------------------------------------------------------', color_pair(1) | A_BOLD)
addstr('\n\nDo You Know The Rules Of Blackjack? (Y or N)\n\n', color_pair(2))
addstr('------------------------------------------------------------------------', color_pair(1) | A_BOLD)
refresh() #refreshes
cbreak() #lets user do Ctrl + C
noecho() #Stops inputs from being shown
a = getch() #Gets input
while a == ord('q'): #Checks if input is q
clear() #clears before exit
exit() #quits
while a == ord('n'): #Checks if input is n
clear() #clears before displaying the next text
addstr('\n\n\n----------------------------------------------------------------------------------', color_pair(1) | A_BOLD)
addstr('\n\nOk. That Is Ok. The Rules Are As Follows: \n\nThe Goal Is To Get To 21.\n\nYou Can Hit A Card (Receive Another) Or Stand And See What The Dealer Has And Does.\n\nThe Person With The Higest Value 21 Or Below Wins That Hand.\n\nAces Start As 11s But Change Automatticly To 1s If You Go Over 21 To Save You.\n\nIf You Get 21 Exactly You Get A Blackjack.\n\nA Blackjack Means You Automaticly Win Unless The Computer Gets A 21 And Ties You.\n\nBe Careful Not To Hit Too Many Times Because If You Go Over 21 You Lose That Hand.\n\nAny Face Card Is Automaticly A 10 At All Times.\n', color_pair(2))
addstr('\n----------------------------------------------------------------------------------\n\n\n', color_pair(1) | A_BOLD)
sleep(15)
a = getch() #resets input variable
while a == ord('q'): #Checks if input is q
clear() #Clears before exit
exit() #quits
while a == ord('y'): #Checks if input is y
clear() #clears before displaying the next text
addstr('\n\n\n\n\n----------------------------------------------------------------------------------', color_pair(1) | A_BOLD)
addstr('\n\n\n\nGreat!\n\n\n\nHave Fun!\n\n\n\nGood Luck!\n\n\n', color_pair(2))
addstr('----------------------------------------------------------------------------------\n\n\n', color_pair(1) | A_BOLD)
refresh()
time.sleep(1)
b = '1'
a = '' #resets input variable
以下是我遇到的问题:
mvaddstr(10, 10, '┌──────────┐\n│{} │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ │\n│ {}│\n└──────────┘'.format(cards[0], cards[0]).encode('utf-8'))
我尝试使用UTF-8对其进行编码,并通过执行chcp将命令提示符设置为UTF-8然后当我运行该字符串打印的程序时:
B&#39; \ XE2 \ X94 \ x8c \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ X E2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X90 \ n \ XE2 \ X94 \ x823 \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ x e2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 \ t \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x82 3 \ xe2 \ x94 \ x82 \ n \ xe2 \ x94 \ x94 \ xe2 \ x94 \ x80 \ xe 2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X80 \ XE2 \ X94 \ X98&#39;
请帮我打印应该是的字符串,而不是unicode。
如果您对我的代码有任何其他建议,请与我们联系。
答案 0 :(得分:2)
在Windows上,unicurses使用ctypes来包装PDCurses。该库可选地在项目站点上分发的32位DLL中使用Unicode支持构建。仅供参考,Unicode版本调用控制台宽字符API,例如WriteConsoleOutputW
,因此不必担心传统的控制台代码页。您需要“pdc34dllu.zip”构建,它采用UTF-8编码的参数。因为预构建的DLL只有32位,所以除非安装了Visual Studio 2015来构建64位DLL,否则必须使用32位Python。
您还需要对unicurses进行一些更改才能使其工作。以下是我为使用32位Python 3.5而采用的步骤:
PATH
环境变量中的目录。code = locale.getpreferredencoding()
更改为code = 'utf-8'
。接下来,注释掉以if not os.access("pdcurses.dll",os.F_OK)
开头的第52-54行,因为如果“pdcurses.dll”不在工作目录中,则此检查将始终失败。python setup.py install
。import unicurses
card_template = '\n'.join([
'┌────────────┐',
'│{card} │',
'│ │',
'│ │',
'│ │',
'│ │',
'│ │',
'│ │',
'│ │',
'│ {card}│',
'└────────────┘'])
def main():
stdscr = unicurses.initscr()
unicurses.clear()
card_string = card_template.format(card=5)
for i, line in enumerate(card_string.splitlines()):
unicurses.mvaddstr(5 + i, 5, line)
unicurses.refresh()
unicurses.endwin()
if __name__ == '__main__':
main()
┌────────────┐
│5 │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ 5│
└────────────┘