Python第二周習題集(一)
阿新 • • 發佈:2018-03-10
pre 不用 如果 and 改名字 計算機 判斷 deb total
# 排列組合c(n,m)
m = int(input(‘m = ‘)) n = int(input(‘n = ‘)) fm = 1 for num in range(1, m + 1): fm *= num fn = 1 for num in range(1, n + 1): fn *= num fmn = 1 for num in range(1, m - n + 1): fmn *= num print(fm // fn // fmn)
def f(x): """ 求函數x的階乘 :param x: 任意正整數 :return: x的階乘""" y = 1 for z in range(1, x + 1): y *= z return y if __name__ == ‘__main__‘: m = int(input(‘m = ‘)) n = int(input(‘n = ‘)) # 當需要計算階乘的時候,不用再寫循環,而是直接調用已經定義好的函數就可以了。 print(f(m) // f(n) // f(m - n))
# Craps 遊戲改進版
from random import randint def roll_dice(n=2): total= 0 for _ in range(n): total += randint(1, 6) return total # 改名字,選中要修改的名字,按中shift + F6 from random import randint money = 1000 while money >0: print(‘玩家總資產:%d‘ % money) while True: debt = int(input(‘清下註:‘)) if 0 < debt <= money: break go_on= False print(‘玩家搖出了%d‘ % roll_dice()) if roll_dice() == 7 or roll_dice() == 11: print(‘玩家勝‘) money += debt elif roll_dice() == 2 or roll_dice() == 3 or roll_dice() == 12: print(‘玩家輸‘) money -= debt else: go_on = True while go_on: roll_dice() print(‘玩家搖出了%d‘ % roll_dice()) if roll_dice() == roll_dice(): print(‘玩家勝!‘) money += debt go_on = False elif roll_dice() == 7: print(‘玩家輸!‘) money -= debt go_on = False print(‘你已經破產!‘)
# 判斷質數
from math import sqrt def is_prime(num): for factor in range(2,int(sqrt(num)) + 1): if num % factor == 0: return False return num !=1 and True or False # 通過下面的if條件,可以在導入模塊時不去執行下面的代碼。 # ctrl + 鼠標左鍵 可以查找解釋定義。 if __name__ == ‘__main__‘: num = int(input(‘請輸入一個數判斷是不是質數:‘)) print(is_prime(num))
# 最小公倍數和最大公約數
def lcm(x, y): # if x > y: # (x, y) = (y, x) ‘‘‘ 求最小公倍數 :param x: 任意正整數 :param y: 任意正整數 :return: x和y的最小公倍數 ‘‘‘ (x, y) = (y, x) if x > y else (x, y) for i in range(y, x * y + 1): if i % x == 0 and i % y == 0: return i def gcd(x, y): # if x > y: # (x, y) = (y, x) #文檔註釋 """ 計算最大公約數 :param x: 任意正整數 :param y: 任意正整數 :return: 最大公約數 """ # (x, y) = (y, x) if x > y else (x, y) i = x while i > 0: if x % i ==0 and y % i == 0: # range(x, 0, -1) 從大到小。 return i i -= 1 if __name__ == ‘__main__‘: x = int(input(‘請輸入第一個數x=‘)) y = int(input(‘請輸入第二個數y=‘)) print(‘最小公倍數:‘, lcm(x,y)) print(‘最大公約數:‘, gcd(x, y))
# 判斷回文質數
from math import sqrt def is_prime(num): for factor in range(2,int(sqrt(num)) + 1): if num % factor == 0: return False return num !=1 and True or False def is_palindrome(num): ‘‘‘ 判斷是不是回文數 :param num: 非負整數 :return: 是回文數返回True,不是回文數返回Flase. ‘‘‘ temp = num total = 0 while temp > 0: total = total * 10 + temp % 10 temp //= 10 return num == total #and和or運算符都是帶短路功能的運算符 #如果and左邊的表達式是Flase,那麽右邊的表達式被短路 #如果or左邊的表達式是True,那麽右邊的表達式被短路 #所以左右兩邊的表達式放置的順序可能會對執行效率產生明顯的影響。 if __name__ == "__main__": num = int(input(‘請輸入一個數:‘)) print(is_palindrome(num)) if is_palindrome(num) and prime_number(num): print(‘%是回文質數‘ % num) else: print(‘%f不是回文質數‘ % num)
# 21根火柴的遊戲,誰拿到最後一根,誰就輸。每次拿的範圍[1,4].保證計算機獲勝。
def game_match(): total = 21 while True: my_number = int(input(‘請輸入你拿的火柴數:‘)) if 1 <= my_number <= 4: com_number = 5 - my_number total -= 5 print(‘電腦拿完還有多少根‘, total) if total == 1: print(‘你輸了‘) break else: print(‘請輸入正確的火柴數!‘) if __name__ == ‘__main__‘: game_match()
# 21根火柴遊戲公平版
from random import randint def main(): total = 21 while total > 0: print(‘還剩下%d根火柴‘ % total) while True: num = int(input(‘請輸入你要拿的火柴數:‘)) if 1 <= num <= 4 and num <= total: break total -= num print(‘你拿完之後還剩%d‘ % total) if total > 0: com = randint(1,min(4,total)) print(‘電腦拿了%d根火柴‘ % com) total -= com if total == 0: print(‘電腦拿走了最後一根火柴,電腦輸了!‘) break if total == 0: print(‘你拿走了最後一根火柴,你輸了1‘) if __name__ == ‘__main__‘: main()
Python第二周習題集(一)