In [5]:
import random
def win():
print(
'''
======恭喜你,你赢了=======
."". ."",
| | / /
| | / /
| | / /
| |/ ;-._
} ` _/ / ;
| /` ) / /
| / /_/\_/\
|/ / |
( ' \ '- |
\ `. /
| |
| |
======恭喜你,你赢了=======
'''
)
def lose():
print(
'''
======YOU LOSE=======
.-" "-.
/ \
| |
|, .-. .-. ,|
| )(__/ \__)( |
|/ /\ \|
(@_ (_ ^^ _)
_ ) \_______\__|IIIIII|__/__________________________
(_)@8@8{}<________|-\IIIIII/-|___________________________>
)_/ \ /
(@ `--------`
======YOU LOSE=======
'''
)
def get_ch_table(line):
ch_table = []
for ch in line:
if ch not in ch_table:
ch_table.append(ch)
return ch_table
def idiom_robot(file_name):
with open(file_name) as fh:
text = fh.read()
idioms = text.split()
idiom = random.choice(idioms)
chs = get_ch_table(text.replace(r'\n', ''))
guess_ch_table = [ch for ch in idiom]
while len(guess_ch_table) < 6:
ch = random.choice(chs)
if ch not in guess_ch_table:
guess_ch_table.append(ch)
random.shuffle(guess_ch_table)
for i in range(0,6,2):
print(guess_ch_table[i], guess_ch_table[i+1])
return idiom
def main():
filename = r'C:\Users\ASUS\Desktop\idioms.txt'
score = 10
while score >= 0:
real_idiom = idiom_robot(filename)
answer_idiom = input('请输入猜测成语,回车结束,直接回车表示退出游戏:')
if answer_idiom == real_idiom:
print('答对了,加十分')
score += 10
print('你当前的分数是:', score)
if score == 100:
win()
return
elif answer_idiom == '':
print('退出游戏。')
print('你最后的分数是:', score)
return
else:
score -= 10
print('答错了,减十分')
print('成语其实是:', real_idiom)
print('你当前的分数是:', score)
else:
lose()
return
if __name__ == '__main()__':
main()
In [3]:
#(先看有关ASCII码的相关知识以及码表,查维基百科或百度百科)
#输入:一个txt文件(假设全是字母的英文词,每个单词之间用单个空格隔开,假设单词最长为10个字母)
#加密:得到每个单词的长度n,随机生成一个9位的数字,将n-1与这个9位的数字连接,形成一个10位的数字,作为密匙key。
#依照key中各个数字对单词中每一个对应位置的字母进行向后移位(例:如过key中某数字为2,对应该位置的字母为a,
#加密则应移位成c,如果超过z,则回到A处继续移位),对长度不到10的单词,移位后,将移位后的单词利用随机字母补全
#到10个,最终形成以10个字母为一个单词,并以单个空格分割的加密文本,存入文件。
#解密:给定该文本文件并给定key(10位数字),恢复原来的文本。
#(提示,利用ord()及chr()函数,ord(x)是取得字符x的ASCII码,chr(n)是取得整数n(代表ASCII码)对应的字符。
#例:ord(a)的值为97,chr(97)的值为'a',因字母a的ASCII码值为97。)
fh = open(r'C:\Users\ASUS\Desktop\English.txt')
text = fh.read()
fh.close()
print(len(text))
print(text)
In [4]:
#输入:一个txt文件(假设全是字母的英文词,每个单词之间用单个空格隔开,假设单词最长为10个字母)
English=[]
fh = open(r'C:\Users\ASUS\Desktop\English_correct.txt', 'w')
for English in English:
correct_English.append(idiom+'\n')
fh.writelines(correct_English)
fh.close()
print(correct_English)
In [3]:
#加密:得到每个单词的长度n,随机生成一个9位的数字,将n-1与这个9位的数字连接,形成一个10位的数字,作为密匙key。
#依照key中各个数字对单词中每一个对应位置的字母进行向后移位(例:如过key中某数字为2,对应该位置的字母为a,
#加密则应移位成c,如果超过z,则回到A处继续移位),对长度不到10的单词,移位后,将移位后的单词利用随机字母补全
#到10个,最终形成以10个字母为一个单词,并以单个空格分割的加密文本,存入文件。
#(提示,利用ord()及chr()函数,ord(x)是取得字符x的ASCII码,chr(n)是取得整数n(代表ASCII码)对应的字符。
#例:ord(a)的值为97,chr(97)的值为'a',因字母a的ASCII码值为97。)
import random
b=len(text)
for j in range(1,b+1):
n=len(word[j])
a=str(random.randrange(1,10,9))
key=str(n-1)+a
if n==10:
for i in range(1,11):
if ord(word[i])+int(a[i])< ord(z):
worf[i]=chr(ord(word[i])+int(a[i]))
else:
b=int(ord(word[i])+int(a[i])-ord(z))
word[i]=chr(ord(a)+b)
print(word,'\n')
else:
for i in range(1,n):
if ord(word[i])+int(a[i])< ord(z):
worf[i]=chr(ord(word[i])+int(a[i]))
else:
b=int(ord(word[i])+int(a[i])-ord(z))
word[i]=chr(ord(a)+b)
for i in range(n,11):
word[i]=random.randint(97, 122,(11-n))
print(word,'\n')
fh = open(r'C:\Users\ASUS\Desktop\English_correct.txt', 'w')
fh.writelines(English)
fh.close()
In [2]:
#解密:给定该文本文件并给定key(10位数字),恢复原来的文本。
key=('123456789')
fh = open(r'C:\Users\ASUS\Desktop\English.txt')
fh.close()