• Home
  • About
    • Guitarliu photo

      Guitarliu

      A programmer who loves guitar, Typing Csharp and Python.

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

《计算机科学概论》绪论中两个算法的Python实现

04 Aug 2019

Reading time ~1 minute

一个魔术的算法


# coding: utf-8
import random, time

def arrange_card(list_card, symb):
    '''整理红牌或者黑牌'''
    for card in list_card:
        dict_card[card] = [card[0], symb]
    return dict_card

def process_show():

    '''进度条显示'''
    n = 1
    while n < 6:
        print(">>" * n, end="")
        n += 1
        time.sleep(1)

list_card = [
    '红A', '红2', '红3', '红4', '红5', '红6', '红7', '红8', '红9', '红10',
    '黑A', '黑2', '黑3', '黑4', '黑5', '黑6', '黑7', '黑8', '黑9', '黑10',
]
dict_card = {}
process_show()
print("\n\n选取了%s张红牌,%s张黑牌\n" % (len(list_card)/2, len(list_card)/2))

# 整理红牌

print("整理红牌中", end="") # 不换行显示进度
process_show()

arrange_card(list_card[:10], 'down')
print("\n\n这是其中的红牌!\n")

# 红牌整理完毕

# 整理黑牌

print("整理黑牌中", end="") # 不换行显示进度
process_show()
arrange_card(list_card[10:], 'up')
print("\n\n这是其中的黑牌!\n")

# 黑牌整理完毕

# 混合红牌和黑牌

print("混合红牌和黑牌", end="") # 不换行显示进度
process_show()
# 混合完毕
# 选择一张牌
print("\n\n选择一张牌", end="") # 不换行显示进度
select_card = random.choice(list_card)
process_show()
print("\n\n已选择一张牌....................\n")

# 选择完毕, 根据牌的特征判断红牌和黑牌

if dict_card[select_card] == ['红', 'down']:
    print("你选择的牌是红牌!")
elif dict_card[select_card] == ['黑', 'up']:
    print("你选择的牌是黑牌!")
else:

    print("桌面上没有选择的牌!")

求两个正整数的最大公约数的欧几里得算法

# -*- coding:utf-8 -*-
def greatest_divisor(m, n):
    """
    计算两个数的最大公约数
    :param m: 其中一个数
    :param n: 其中另一个数
    :return: 两个数的最大公约数
    """
    R = max(m, n) % min(m, n)
    if not R == 0:
        m = min(m, n)
        n = R
        return greatest_divisor(m, n)
    return min(m, n)
示例:
print(greatest_divisor(10, 125))
结果:5

绪论中的两个算法例子都是用Python实现的,而第一个算法还可以用Pygame写一个带界面的猜牌软件,具体的方法我们在后面的章节中会穿插进来,这里只简单介绍这两个例子,如果小伙伴们有更好的实现思路欢迎联系我进行讨论,谢谢大家的关注!



计算机科学概论算法Python实现 Share Tweet +1