真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

我做過(guò)的Python30道練習(xí)題

練習(xí)題 1

成績(jī)等級(jí)

要求輸出成績(jī)等級(jí)A、B、C、D、E,
其中90-100分為A,80-89分為B,70-79分為C,60-69分為D,60分以下為E。
要求:
- 用If語(yǔ)句實(shí)現(xiàn);
- 輸入百分制成績(jī)后要判斷該成績(jī)的合理性,對(duì)不合理的成績(jī)應(yīng)輸出出錯(cuò)信息。

成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來(lái),先為南宮等服務(wù)建站,南宮等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為南宮企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。


參考答案:


while True:
    content = input("請(qǐng)輸入成績(jī):")
    if not content.isdigit():
        print("您輸入的成績(jī)格式錯(cuò)誤,請(qǐng)輸入一個(gè)0-100之間的數(shù)字。")
        continue
    elif not 0 <= int(content) <= 100:
        print("您輸入的成績(jī)格式錯(cuò)誤,請(qǐng)輸入一個(gè)0-100之間的數(shù)字。")
        continue
    else:
        break

score = ""
if int(content) < 60:
    score = "E"
elif 60 <= int(content) <= 69:
    score = "D"
elif 70 <= int(content) <= 79:
    score = "C"
elif 80 <= int(content) <= 89:
    score = "B"
else:
    score = "A"
print("您的成績(jī)等級(jí)為:%s" % (score,))

練習(xí)題 2

預(yù)判比賽結(jié)果

籃球比賽是高分的比賽,領(lǐng)先優(yōu)勢(shì)可能很快被反超。
作為觀眾,希望能在球賽即將結(jié)束時(shí),就提早知道領(lǐng)先是否不可超越。
體育作家Bill James發(fā)明了一種算法,用于判斷領(lǐng)先是否“安全”。
算法描述:

  • 獲取領(lǐng)先的分?jǐn)?shù) ,減去3分
  • 如果目前是領(lǐng)先隊(duì)控球,則加0.5;否則減0.5(數(shù)字小于0則變成0);
  • 計(jì)算平方后的結(jié)果;
  • 如果得到的結(jié)果比當(dāng)前比賽剩余時(shí)間的秒數(shù)大,則領(lǐng)先是“安全”的。

請(qǐng)編寫(xiě)程序?qū)崿F(xiàn)上述算法的功能,并給出運(yùn)行結(jié)果。


參考答案:


# 方法一:輸入兩隊(duì)分?jǐn)?shù)
a = int(input("A隊(duì)分?jǐn)?shù):"))  # a隊(duì)成績(jī)
b = int(input("B隊(duì)分?jǐn)?shù):"))  # b隊(duì)成績(jī)
d = 0
winner = ""
possession = input("球權(quán)【a or b】:")  # 球權(quán) “a” or "b"
time_remaining = int(input("剩余時(shí)間:"))  # 剩余時(shí)間
if a > b:
    winner = "a"
    c = a - b
    if possession == "a":
        d = c - 2.5
    else:
        d = c - 3.5
elif b > a:
    winner = "b"
    c = b - a
    if possession == "b":
        d = c - 2.5
    else:
        d = c - 3.5
else:
    d = 0
if d < 0:
    d = 0
if d ** 2 > time_remaining:
    print("%s隊(duì)將獲得最終勝利!" % (winner,))
else:
    print("比賽結(jié)果不確定。")

# 方法二:輸入領(lǐng)先分?jǐn)?shù)

a = int(input("領(lǐng)先分?jǐn)?shù):"))
possession = input("領(lǐng)先隊(duì)是否控球【y/n】:")
time_remaining = int(input("剩余時(shí)間:"))
if possession == 'y':
    b = a + 0.5
else:
    b = a - 0.5
if b < 0:
    b = 0
score = b ** 2
if score > time_remaining:
    print("安全")
else:
    print("不安全")

練習(xí)題 3

購(gòu)物組合

小明單位發(fā)了100元的購(gòu)物卡,
小明到超市買(mǎi)三類(lèi)洗化用品:
洗發(fā)水(15元)、香皂(2元)、牙刷(5元)。要把100元正好花掉,
可有哪些購(gòu)買(mǎi)組合?


參考答案:


x = range(0, 7)
y = range(0, 51)
z = range(0, 21)
total_list = []
for a in x:
    for b in y:
        for c in z:
            total = 15 * a + 2 * b + 5 * c
            if 100 == total:
                msg = "洗發(fā)水:{0}瓶;\n香皂:{1}塊;\n牙刷:{2}支;\n".format(a, b, c)
                total_list.append(msg)
print("一共有%s種組合。" % (len(total_list),))
for m in total_list:
    print(m)

練習(xí)題 4

猜數(shù)字

首先由計(jì)算機(jī)產(chǎn)生一個(gè)[0,100]之間的隨機(jī)整數(shù),然后由用戶(hù)猜測(cè)所產(chǎn)生的隨機(jī)數(shù)。
根據(jù)用戶(hù)猜測(cè)的情況給出不同提示:

  • 如猜測(cè)的數(shù)大于產(chǎn)生的數(shù),則顯示“High”,小于則顯示“Low”,等于則顯示“You won !”,游戲結(jié)束。
  • 用戶(hù)最多可以猜7次,如果7次均未猜中,則顯示“You lost!”,并給出正確答案,游戲結(jié)束。
  • 游戲結(jié)束后,詢(xún)問(wèn)用戶(hù)是否繼續(xù)游戲,選擇“Y”則開(kāi)始一輪新的猜數(shù)游戲;選擇“N”則退出游戲。!

參考答案:


while True:
    answer = random.randint(0, 100)  # 生成一個(gè)0~100的隨機(jī)數(shù)
    for i in range(6, -1, -1):  # 循環(huán) 6,5,4,3,2,1,0
        message = "還剩%d次機(jī)會(huì)" % (i,)
        try:
            number = int(input("請(qǐng)輸入一個(gè)數(shù)字:"))  # 接受一個(gè)用戶(hù)輸入的數(shù)字
        except ValueError:
            print("輸入的不是數(shù)字,", message)
            continue
        if num == answer:  # 如果大了,提示用戶(hù)大了并返回while重新開(kāi)始
            print("恭喜猜中?。?!")
            break
        elif num < answer:  # 否則,提示用戶(hù)大了并返回while重新開(kāi)始
            print("小了,", message)
        else:
            print("大了,", message)
        if i == 0:
            print("很遺憾,您未猜中!!!,答案是:", answer)
    ask = input("再來(lái)一次?(Y/any):").upper()
    if ask == "Y":
        continue
    else:
        break

練習(xí)題 5

趕鴨子

一個(gè)人趕著鴨子去每個(gè)村莊賣(mài),每經(jīng)過(guò)一個(gè)村子賣(mài)去所趕鴨子的一半又一只。
這樣他經(jīng)過(guò)了七個(gè)村子后還剩兩只鴨子,問(wèn)他出發(fā)時(shí)共趕多少只鴨子?

要求:
- 利用遞歸函數(shù)編程實(shí)現(xiàn)。


參考答案:


def f(n):
    if n == 8:
        return 2
    else:
        sum = f(n+1)*2+2
        return sum
print('一共有{}只鴨子'.format(f(1)))

練習(xí)題 6

從鍵盤(pán)輸入一個(gè)1~7的數(shù)字,格式化輸出對(duì)應(yīng)數(shù)字的星期字符串名稱(chēng)。
如:輸入3,返回“您輸入的是星期三”。


參考答案:


num = int(input("請(qǐng)輸入1-7:"))
num_list = ["","一", "二", "三", "四", "五", "六", "日"]
print("您輸入的是星期{}".format(num_list[num]))

練習(xí)題 7

數(shù)字密碼

編程程序,從鍵盤(pán)任意輸入1個(gè)4位數(shù),
將該數(shù)字中的每位數(shù)與7相乘,然后取乘積結(jié)果的個(gè)位數(shù)對(duì)該數(shù)字進(jìn)行替換,最后得到1個(gè)新的4位數(shù)。


參考答案:


v = input("請(qǐng)輸入一個(gè)四位數(shù):")
v2 = ""
for i in v:
    v1 = int(i) * 7
    v2 += str(v1 % 10)
print(v2)

練習(xí)題 8

九九乘法表

99乘法表


參考答案:


for a in range(1, 10):
    for b in range(1, a+1):
        print("%s*%s=%s\t" % (b, a, b*a,),end="")
    print()

練習(xí)題 9

字符查詢(xún)

輸入一個(gè)字符串 str,輸出第 m 個(gè)只出現(xiàn)過(guò) n 次的字符

  • 如在字符串 gbgkkdehh 中,找出第 2 個(gè)只出現(xiàn) 1 次的字符,輸出結(jié)果:d

參考答案:


def find_out(s, n, c):
    lis = []
    for i in s:
        count = content.count(i, 0, len(content))
        if count == c:
            lis.append(i)
    return lis[n - 1]


content = input("請(qǐng)輸入一段字符串:")
num = int(input("第m個(gè)字符,m? :"))
counts = int(input("出現(xiàn)過(guò)n次,n? :"))

print("第{}個(gè)出現(xiàn)過(guò){}次的字符是:".format(num, counts), find_out(content, num, counts))

練習(xí)題 10

判斷奇偶數(shù)

給定一個(gè)數(shù) a,判斷一個(gè)數(shù)字是奇數(shù)或偶數(shù)


參考答案:


def odd_or_even(num):
    while True:
        try:
            # 判斷輸入是否為整數(shù)
            number = int(num)
            break
        except ValueError:
            # 不是純數(shù)字需要重新輸入
            print("輸入的不是整數(shù)!")
            continue
    if number % 2 == 0:
        return '偶數(shù)'
    else:
        return '奇數(shù)'


print(odd_or_even(input("請(qǐng)輸入一個(gè)數(shù)字:")))

練習(xí)題 11

字符串去重排列

將字符串 s = “ajldjlajfdljfddd”,去重并從小到大排序輸出”adfjl”。


參考答案:



s = "ajldjlajfdljfddd"
s_set = set()  # 集合自帶去重功能,所以只要for循環(huán)字符串s,并添加到集合中,就可以自動(dòng)去重。
for i in s:
    s_set.add(i)
    s_lis = sorted(list(s_set))  # 使用 sorted 方法,對(duì)字母進(jìn)行排序
result = "".join(s_lis)  # sorted方法返回的是一個(gè)列表,這邊將列表數(shù)據(jù)轉(zhuǎn)換成字符串
print(result)

練習(xí)題 12

打印菱形

打印如下內(nèi)容:

   *
  ***
 *****
*******
 *****
  ***
   *

參考答案:



for i in range(-3,4):
    s = 2 * (4 - abs(i)) - 1
    print(" " * abs(i), "*" * s)

練習(xí)題 13

判斷幾位數(shù)和逆序打印

給一個(gè)不多于 5 位的正整數(shù)(如 a = )
求它是幾位數(shù)和逆序打印出各位數(shù)字。


參考答案:



def num(n):
    print("您輸入的是%s位數(shù)。" % (len(n)))
    print(n[::-1])
num(input("請(qǐng)輸入一個(gè)不多于5位的正整數(shù):"))

練習(xí)題 14

水仙花數(shù)

如果一個(gè) 3 位數(shù)等于其各位數(shù)字的立方和,則稱(chēng)這個(gè)數(shù)為水仙花數(shù)。
例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一個(gè)水仙花數(shù)。
那么如何求 1000 以?xún)?nèi)的水仙花數(shù)(3 位數(shù))。


參考答案:


for num in range(100, 1000):
    hun = num // 100  # 取百位
    ten = (num - hun * 100) // 10  #取十位
    one = (num - hun * 100 - ten * 10)  # 取個(gè)位
    # hun = int(str(num)[0])  # 取百位,先將數(shù)字轉(zhuǎn)換為字符串,再通過(guò)索引取值,再轉(zhuǎn)換為數(shù)字
    # ten = int(str(num)[1])  # 取十位,先將數(shù)字轉(zhuǎn)換為字符串,再通過(guò)索引取值,再轉(zhuǎn)換為數(shù)字
    # one = int(str(num)[2])  # 取個(gè)位,先將數(shù)字轉(zhuǎn)換為字符串,再通過(guò)索引取值,再轉(zhuǎn)換為數(shù)字
    d = hun ** 3 + ten ** 3 + one ** 3
    if d == num:
        print(str(num),"是水仙花數(shù)")

練習(xí)題 15

求質(zhì)數(shù)

求以?xún)?nèi)的所有質(zhì)數(shù)


參考答案:


prime_list = []  # 創(chuàng)建一個(gè)空列表用于接收發(fā)現(xiàn)的質(zhì)數(shù)。
for i in range(2, ):  # 循環(huán)2~9999
    for a in range(2,i):  # 循環(huán)2~i-1
        b = i % a
        if b == 0:  # 如果i 能被 除1和i本身之外的一個(gè)正整數(shù)整除,則i不是質(zhì)數(shù),退出本次for循環(huán)
            break
    else:  # 這個(gè)else是for語(yǔ)句的,如果 整個(gè)for循環(huán)過(guò)程,b都不等于0,則執(zhí)行else,否則不執(zhí)行
        # print("%s是質(zhì)數(shù)。" % (i,))
        prime_list.append(i)
print(prime_list)  # 打印所有質(zhì)數(shù)列表
print(len(prime_list))  # 打印質(zhì)數(shù)數(shù)量

"""

練習(xí)題 16

求值

計(jì)算 1-2+3-4+5-…-100 的值。


參考答案:


total = 0
for i in range(1,101):
    if i % 2 == 0:  # i如果是偶數(shù),total = total - i
        total -= i
    else:
        total += i # i如果是奇數(shù),total = total + i
print(total)

練習(xí)題 17

立方和

現(xiàn)有計(jì)算公式 1^3 + 2^3 + 3^3 + 4^3 + …….+ n^3,
如何實(shí)現(xiàn):當(dāng)輸入 n = 5 時(shí),輸出 225(對(duì)應(yīng)的公式 : 1^3 + 2^3 + 3^3 + 4^3 + 5^3 = 225)。


參考答案:


n = int(input("輸入一個(gè)數(shù)字:"))
total = 0
for i in range(1, (n + 1)):
    total += i ** 3
print(total)

練習(xí)題 18

對(duì)稱(chēng)數(shù)組

例如 [1,2,0,2,1],[1,2,3,3,2,1],這樣的數(shù)組都是對(duì)稱(chēng)數(shù)組。
判斷,是對(duì)稱(chēng)數(shù)組打印 True,不是打印 False。


參考答案:


def list_symmetry(l):
    if l == l[::-1]:
        # reverse 和 [::-1]的區(qū)別是,前者改變列表本身,后者不改變列表本身,生成一個(gè)反轉(zhuǎn)后的新列表
        return True
    else:
        return False


print(list_symmetry(['a', 'b', 'd', 'd', 'a']))
print(list_symmetry(['a', 'b', 'c', 'b', 'a']))

練習(xí)題 19

取最大值

取出列表 L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88] 中最大的三個(gè)值。


參考答案:


l1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
l1.sort()  # 列表從小到大排序
print(l1[-3:])  # 使用切片取列表最后三位

練習(xí)題 20

數(shù)字組合

有四個(gè)數(shù)字:1、2、3、4,能組成多少個(gè)互不相同且無(wú)重復(fù)數(shù)字的三位數(shù)?各是多少?


參考答案:


# 方法一
l1 = [1, 2, 3, 4]
l2 = []
for x in l1:  # 從列表中取值,作為百位數(shù)
    for y in l1:
        if y == x:  # 從列表中取值,如果和百位數(shù)重復(fù),重新取值,不重復(fù),作為十位數(shù)。
            continue
        for z in l1:
            if z != x and z != y:  # 從列表中取值,如果與百位和十位不重復(fù),作為個(gè)位數(shù)。
                result = x * 100 + y * 10 + z
                l2.append(result)
print(len(l2),"種")
print(l2)


# 方法二 簡(jiǎn)便方法:用itertools中的permutations即可。
import itertools  # 網(wǎng)上看到的別人的解法,對(duì)于itertools不了解,粘貼一下,以供參考。
count = 0
l1 = [1, 2, 3, 4]
for i in itertools.permutations(l1, 3):
    print(i)
    count += 1
print(count)

練習(xí)題 21

計(jì)算獎(jiǎng)金

題目:企業(yè)發(fā)放的獎(jiǎng)金根據(jù)利潤(rùn)提成。

  • 利潤(rùn)(I)低于或等于10萬(wàn)元時(shí),獎(jiǎng)金可提10%;
  • 利潤(rùn)高于10萬(wàn)元,低于20萬(wàn)元時(shí),低于10萬(wàn)元的部分按10%提成,高于10萬(wàn)元的部分,可提成7.5%;
  • 20萬(wàn)到40萬(wàn)之間時(shí),高于20萬(wàn)元的部分,可提成5%;
  • 40萬(wàn)到60萬(wàn)之間時(shí)高于40萬(wàn)元的部分,可提成3%;
  • 60萬(wàn)到100萬(wàn)之間時(shí),高于60萬(wàn)元的部分,可提成1.5%,
  • 高于100萬(wàn)元時(shí),超過(guò)100萬(wàn)元的部分按1%提成,

從鍵盤(pán)輸入當(dāng)月利潤(rùn)I,求應(yīng)發(fā)放獎(jiǎng)金總數(shù)?


參考答案:


# 我的方法
profit = int(input("利潤(rùn)金額:"))
if profit <= :
    bonus = profit * 0.1
elif  < profit <= :
    bonus =  + (profit - ) * 0.075
elif  < profit <= :
    bonus =  + (profit - ) * 0.05
elif  < profit <= :
    bonus =  + (profit - ) * 0.03
elif  < profit <= :
    bonus =  + (profit - ) * 0.015
else:
    bonus =  + (profit - ) * 0.01
print("獎(jiǎng)金:%s元" % (bonus, ))


# 網(wǎng)上其他人的方法
profit = int(input('利潤(rùn)金額: '))
bonus = 0
thresholds = [, , , , ]
rates = [0.1, 0.075, 0.05, 0.03, 0.015, 0.01]
for i in range(len(thresholds)):
    if profit <= thresholds[i]:
        bonus += profit * rates[i]
        profit = 0
        break
    else:
        bonus += thresholds[i] * rates[i]
        profit -= thresholds[i]
bonus += profit * rates[-1]
print("獎(jiǎng)金:%s元" % (bonus, ))

練習(xí)題 22

找數(shù)字

一個(gè)正整數(shù),它加上100后是一個(gè)完全平方數(shù),再加上168又是一個(gè)完全平方數(shù),請(qǐng)問(wèn)該數(shù)是多少?

思路:

  • z + 100 = x ** 2
  • z + 100 + 168 = y ** 2
    x y為兩個(gè)相鄰的數(shù)時(shí),z為最大值

參考答案:


x = 0
while True:
    y = 0
    x += 1
    while True:
        y += 1
        if y ** 2 - x ** 2 >= 168:
            break
    if y ** 2 - x ** 2 == 168 and x ** 2 > 100:
        z = x ** 2 - 100
        print("這個(gè)整數(shù)是:{}".format(z, ))
    if y - x == 1:
        break

練習(xí)題 23

查詢(xún)第幾天

題目:輸入某年某月某日,判斷這一天是這一年的第幾天?

思路:閏年判斷方法,四年一閏,百年不閏,四百年再閏.


參考答案:


# 例如:2022-9-21
date = input("請(qǐng)輸入日期,格式【XXXX-XX-XX】: ")
date_list = s1.split("-")  # 以“-”為分隔符,將字符串分割成列表。
day_list = [31, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  # 創(chuàng)建一個(gè)缺省2月份天數(shù)的列表
year = int(date_list[0])
if year % 400 == 0 or year % 100 != 0 and year % 4 == 0:  # 判斷年份是否為閏年
    day_list.insert(1, 29)  # 如果是,在列表索引1的位置插入29
else:
    day_list.insert(1, 28)  # 不是,插入28
days = int(date_list[2])
for d in range(int(date_list[1]) - 1):  # 循環(huán)月數(shù)-1,并相加,即,該月份之前的所有天數(shù)之和
    days += day_list[d]  # 再加上當(dāng)月的天數(shù)
print(days)

練習(xí)題 24

十秒倒計(jì)時(shí)

題目:十秒倒計(jì)時(shí)。
程序分析:使用 time 模塊的 sleep() 函數(shù)。
ps:熟悉time模塊


參考答案:


import time
for i in range(10, 0, -1):
    print(i)
    time.sleep(1)

練習(xí)題 25

打印當(dāng)前時(shí)間

題目:持續(xù)打印當(dāng)前時(shí)間,一分鐘。


參考答案:


import time

for i in range(60):
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
    time.sleep(1)

練習(xí)題 26

養(yǎng)兔子

題目:
有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,
小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔子,
假如兔子都不死,問(wèn)每個(gè)月的兔子總數(shù)為多少?

思路分析:
        一月兔     二月兔     成年兔
一月      2          0         0
二月      0          2         0
三月      2          0         2
四月      2          2         2
五月      4          2         4
六月      6          4         6
七月     10          6        10
八月     16         10        16
九月     26         16        26

綜上分析可知,
①二月兔的數(shù)量,就是上個(gè)月一月兔的數(shù)量;
②成年兔的數(shù)量,就是上個(gè)月成年兔的數(shù)量+二月兔的數(shù)量;
③一月兔的數(shù)量,就是本月成年兔的數(shù)量;

參考答案:


month_total = int(input("養(yǎng)殖多少個(gè)月:"))
m1 = 2
m2 = 0
m_end = 0
for i in range(month_total):
    rabbit_total = m1 + m2 + m_end
    print("-" * 20)  # 分隔符
    print("第%d個(gè)月,一共%d只兔子" % (i + 1, rabbit_total))
    print("其中一月兔數(shù)量:%d只" % (m1,))
    print("其中二月兔數(shù)量:%d只" % (m2,))
    print("其中成年兔數(shù)量:%d只" % (m_end,))
    m1, m2, m_end = m_end + m2, m1, m_end + m2  # 根據(jù)思路分析得出

練習(xí)題 27

養(yǎng)兔子——擴(kuò)展題

上一題擴(kuò)展,假設(shè)兔子壽命只有6個(gè)月,
養(yǎng)殖一年,一共還剩多少兔子,一月兔、二月兔、成年兔數(shù)量各多少

思路分析:
1. 前6個(gè)月數(shù)據(jù)不變
2. 第七個(gè)月開(kāi)始,成年兔需要減去6個(gè)月之前的一月兔數(shù)量
3. 一月兔還是等于成年兔數(shù)量
4. 二月兔還是等于上個(gè)月一月兔數(shù)量

需要建立一個(gè)列表,記錄每個(gè)月一月兔的數(shù)量,以便于第七個(gè)月開(kāi)始可以調(diào)用

參考答案:


month_total = 12
m1 = 2
m2 = 0
m_end = 0
m1_list = [0, 0, 0, 0, 0]
for i in range(month_total):
    rabbit_total = m1 + m2 + m_end
    m1_list.append(m1)
    print("-" * 20)
    print("第%d個(gè)月,一共%d只兔子" % (i + 1, rabbit_total))
    print("其中一月兔數(shù)量:%d只" % (m1,))
    print("其中二月兔數(shù)量:%d只" % (m2,))
    print("其中成年兔數(shù)量:%d只" % (m_end,))
    m1, m2, m_end = m_end + m2 - m1_list[i], m1, m_end + m2 - m1_list[i]
    print("下月死亡成年兔:%d只" % (m1_list[i]))

練習(xí)題 28

找出101-200之間的質(zhì)數(shù)

題目:判斷101-200之間有多少個(gè)素?cái)?shù),并輸出所有素?cái)?shù)。
思路,與練習(xí)題15一樣

prime_list = []
for i in range(101, 201):
    for a in range(2,i):
        b = i % a
        if b == 0:
            break
    else:
        print("%s是質(zhì)數(shù)。" % (i,))
        prime_list.append(i)
print("101到200之間質(zhì)數(shù)的數(shù)量為:", len(prime_list))

練習(xí)題 29

猴子分桃子

題目:海灘上有一堆桃子,五只猴子來(lái)分。
第一只猴子把這堆桃子平均分為五份,多了一個(gè),這只猴子把多的一個(gè)扔入海中,拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,又多了一個(gè),它同樣把多的一個(gè)扔入海中,拿走了一份,
第三、第四、第五只猴子都是這樣做的,
問(wèn)海灘上原來(lái)最少有多少個(gè)桃子,最后還剩多少個(gè)?

思路分析
a = 5 * b + 1  # 第一只猴子拿走b個(gè)桃子
4 * b = 5 * c + 1  # 第二只猴子拿走c個(gè)桃子
4 * c = 5 * d + 1  # 第三只猴子拿走d個(gè)桃子
4 * d = 5 * e + 1  # 第四只猴子拿走e個(gè)桃子
4 * e = 5 * f + 1  # 第五只猴子拿走f個(gè)桃子

參考答案:


# 方法一
f = 0  # 第五只猴子拿走的桃子數(shù)
while True:
    f += 1  # 第五只猴子拿走的桃子數(shù)
    e = ((5 * f) + 1) / 4  # 第四只猴子拿走的桃子數(shù)
    d = ((5 * e) + 1) / 4  # 第三只猴子拿走的桃子數(shù)
    c = ((5 * d) + 1) / 4  # 第二只猴子拿走的桃子數(shù)
    b = ((5 * c) + 1) / 4  # 第一只猴子拿走的桃子數(shù)
    a = (5 * b) + 1  # 最開(kāi)始桃子總數(shù)
    if e % 1 ==0 and d % 1 ==0 and c % 1 ==0 and b % 1 ==0 and a % 1 ==0:  # 桃子數(shù)量肯定是整數(shù)。
        msg = """
        一共有{0}個(gè)桃子
        第一只猴子拿走{1}個(gè)桃子
        第二只猴子拿走{2}個(gè)桃子
        第三只猴子拿走{3}個(gè)桃子
        第四只猴子拿走{4}個(gè)桃子
        第五只猴子拿走{5}個(gè)桃子
        最后還剩{6}個(gè)桃子""".format(int(a), int(b), int(c), int(d), int(e), f, 4 * f)
        print(msg)
        break

# 方法二
x = 0  # 上一只猴子拿走的桃子數(shù)
y = 0  # 最后一只猴子拿走的桃子數(shù)
res = 0  # 桃子總數(shù)
b = True
while b:
    y += 1 # 第五只猴子拿走的桃子
    x = ((5 * y) + 1) / 4 # 第四只猴子拿走的桃子
    for i in range(3):  # 循環(huán)出前三只猴子拿走的桃子數(shù),所以是range(3)
        if ((5 * x) + 1) % 4 != 0:  # ((5 * y) + 1) 需要是4的倍數(shù)
            break
        else:
            x = ((5 * x) + 1) / 4
        if i == 2:  # 如果可以順利完成三次循環(huán),桃子總數(shù)就是第一只猴子拿走的桃子數(shù) 乘以5,再加上1.
            res = (5 * x) + 1
            b = False
print("原來(lái)最少有%s個(gè)桃子,最后還剩%s個(gè)桃子。" % (res, 4 * y))

練習(xí)題 30

數(shù)據(jù)加密/解密

題目:某個(gè)公司采用公用電話傳遞數(shù)據(jù),數(shù)據(jù)是四位的整數(shù),在傳遞過(guò)程中是加密的,加密規(guī)則如下:
每位數(shù)字都加上5,然后用和除以10的余數(shù)代替該數(shù)字,
再將第一位和第四位交換,第二位和第三位交換。

分析:
① 加5,然后用和除以10的余數(shù),其實(shí)就是加5后,新數(shù)字的個(gè)位數(shù)。
② 一四交換,二三交換,其實(shí)就是反轉(zhuǎn)。

參考答案:


# 加密
def encode(content):
    res = 0
    for i in range(content):  # 循環(huán)四位數(shù)(字符串)
        n = (int(i) + 5) % 10  # 加5 取余
        res += n * (10 ** i)  # 這里很巧妙將得數(shù)直接反轉(zhuǎn)了,i=0時(shí) content[0]是千位,而10 ** i = 1,得數(shù)編程了個(gè)位
    return res

# 解密
def decode(res):
    plain = 0
    data = str(res)
    for i in range(4):
        if int(data[i]) < 5:
            n = int(data[i]) + 5
        else:
            n = int(data[i]) - 5
        plain += n * (10 ** i)
    return plain

分享文章:我做過(guò)的Python30道練習(xí)題
轉(zhuǎn)載來(lái)于:http://weahome.cn/article/dsogsep.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部