<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【PTA|Python】浙大版《Python 程序設(shè)計》題目集:第六章

          共 10251字,需瀏覽 21分鐘

           ·

          2021-09-12 13:28

          第六章

          6-1 輸入列表,求列表元素和(eval輸入應(yīng)用) (10 分)

          題目

          在一行中輸入列表,輸出列表元素的和。

          輸入格式:

          ?

          一行中輸入列表。

          ?

          輸出格式:

          ?

          在一行中輸出列表元素的和。

          ?

          輸入樣例:

          ?

          [3,8,-5]

          ?

          輸出樣例:

          ?

          6

          ?

          解答

          提交代碼 - 1

          lst=eval(input())
          print(eval('+'.join('%s' %id for id in lst)))

          提交代碼 - 2

          print(sum(eval(input())))
          image.png

          6-2 一幫一 (15 分)

          題目

          “一幫一學(xué)習(xí)小組”是中小學(xué)中常見的學(xué)習(xí)組織方式,老師把學(xué)習(xí)成績靠前的學(xué)生跟學(xué)習(xí)成績靠后的學(xué)生排在一組。

          本題就請你編寫程序幫助老師自動完成這個分配工作,即在得到全班學(xué)生的排名后,在當(dāng)前尚未分組的學(xué)生中,將名次最靠前的學(xué)生與名次最靠后的「異性學(xué)生」分為一組。

          輸入格式:

          ?

          輸入第一行給出正偶數(shù)N(≤50),即全班學(xué)生的人數(shù)。此后N行,按照名次從高到低的順序給出每個學(xué)生的性別(0代表女生,1代表男生)和姓名(不超過8個英文字母的非空字符串),其間以1個空格分隔。這里保證本班男女比例是1:1,并且沒有并列名次。

          ?

          輸出格式:

          ?

          每行輸出一組兩個學(xué)生的姓名,其間以1個空格分隔。名次高的學(xué)生在前,名次低的學(xué)生在后。小組的輸出順序按照前面學(xué)生的名次從高到低排列。

          ?

          輸入樣例:

          ?

          8

          0 Amy

          1 Tom

          1 Bill

          0 Cindy

          0 Maya

          1 John

          1 Jack

          0 Linda

          ?

          輸出樣例:

          ?

          Amy Jack

          Tom Linda

          Bill Maya

          Cindy John

          ?

          解答

          #!/usr/bin/python3
          # 存儲所有學(xué)生的名字 根據(jù)名次排序
          students = []
          # 存儲女孩的名字 根據(jù)名次排序
          girl = []
          # 存儲男孩的名字 根據(jù)名次排序
          boy = []
          n = int(input())
          for i in range(n):
              student = input().split()
              students.append(student[1])
              if student[0] == '0':
                  boy.append(student[1])
              else:
                  girl.append(student[1])
          # 遍歷前4名
          for i in range(n//2):
              # 如果是男孩
              if students[i] in boy:
                  # 找到該孩子在男孩中的名次 與index對應(yīng) 比如在第1名index為0
                  # 男孩中的第一個應(yīng)該與女孩中的最后一個組合
                  # 所以 男孩的索引為index 那么女孩的索引就是-1-index
                  # -1表示最后一個 再-index表示往前幾個
                  # 例如:-1-1 表示再最后一個的基礎(chǔ)上再前進2個元素
                  index = boy.index(students[i])
                  print("{} {}".format(students[i], girl[-1-index]))
              else:
                  index = girl.index(students[i])
                  print("{} {}".format(students[i], boy[-1-index]))

          image.png

          6-3 列表或元組的數(shù)字元素求和 (20 分)

          題目

          求列表中數(shù)字和,列表中嵌套層次不限2層

          輸入格式:

          ?

          在一行中輸入列表或元組

          ?

          輸出格式:

          ?

          在一行中輸出數(shù)字的和

          ?

          輸入樣例: 在這里給出一組輸入。例如:

          ?

          [11,2,[3,7],(68,-1),"123",9]

          ?

          輸出樣例: 在這里給出相應(yīng)的輸出。例如:

          ?

          99

          ?

          解答

          注意題目中只需要求的是數(shù)字和

          例子:[11,2,[3,7],(68,-1),"123",9] 中“123”屬于字符串,不再計算范圍內(nèi)

          正確計算是:11+2+3+7+68+(-1)+9=99

          編寫代碼時注意不要將字符串也納入計算范圍內(nèi)了,注意提取正確的數(shù)字,避開字符串(開始還沒有注意到)

          #!/usr/bin/python3
          s = input()
          # s為字符串
          # 首先將[]()替換
          s = s.replace('[''')
          s = s.replace(']''')
          s = s.replace('(''')
          s = s.replace(')''')
          # 注意”123“屬于字符串 不屬于數(shù)字 我們是不需要的
          s2 = ""
          # 記錄”的個數(shù)
          count = 0
          # 遍歷s
          # 統(tǒng)計“的個數(shù) 如果為偶數(shù)且不為” 說明為數(shù)字
          for i in s:
              if i == '"':
                  count += 1
              if count % 2 == 0 and i != '"':
                  s2 += i
          # 替換逗號
          s2 = s2.replace(','' ')
          # 注意可能兩個數(shù)中間原來有兩個逗號 替換后就有兩個空格
          # 再利用split() 提取元素 轉(zhuǎn)化為list類型
          s2 = s2.split()
          ans = 0
          # 遍歷s2 list類型
          for i in s2:
              ans += int(i)
          print(ans)
          image.png

          6-4 列表數(shù)字元素加權(quán)和(1) (40 分)

          題目

          輸入一個嵌套列表,嵌套層次不限,根據(jù)層次,求列表元素的加權(quán)和。第一層每個元素 的值為:元素值1,第二層每個元素的值為:元素值2,第三層每個元素的值為:元素值*3, ...,以此類推!

          輸入格式:

          ?

          在一行中輸入列表

          ?

          輸出格式:

          ?

          在一行中輸出加權(quán)和

          ?

          輸入樣例: 在這里給出一組輸入。例如:

          ?

          [1,2,[3,4,[5,6],7],8]

          ?

          輸出樣例: 在這里給出相應(yīng)的輸出。例如:

          ?

          72

          ?

          解答

          有幾個需要注意的地方:

          • 其中的數(shù)字可以為兩位數(shù)、三位數(shù)
          • 數(shù)字也可以為負數(shù)

          提供的一些測試數(shù)據(jù)

          • [1]
          • [-1]
          • [1,[19,1],2]
          • ......

          踩坑:如果開始以字符串讀取,再逐一讀取字符,需要注意每次讀取只得到一個字符。比如字符串“234”,讀取是2、3、4 這個地方易錯

          # 以字符串類型讀入數(shù)據(jù)
          s = input()
          # count:統(tǒng)計[、]字符的個數(shù) 遇到[ +1 遇到] -1
          count = 0
          # ans:最后結(jié)果
          ans = 0
          # 字符串索引
          index = 0
          # 判斷一個數(shù)是負數(shù)還是正數(shù)
          flag = 1

          # 遍歷字符串
          while index < len(s):
              # 遇到[ 層級+1
              if s[index] == '[':
                  count += 1
              # 遇到] 層級-1
              elif s[index] == ']':
                  count -= 1
              # 遇到 '-' 說明之后的數(shù)字為負數(shù)
              elif s[index] == '-':
                  flag = -1
              # 如果是一個數(shù)字 則需要判斷后面是否接著為數(shù)字
              # 如果是 還得拼接數(shù)字 比如23
              # 因為是逐個字符讀取
              # 每次只讀一個字符
              # 讀到2時 還需要判斷后面是否還是數(shù)字
              # 如果是 需要拼接為23
              elif s[index].isdigit():
                  index2 = index
                  num = 0
                  while s[index2].isdigit():
                      num = num*10+int(s[index2])
                      index2 += 1
                  # 更新index
                  index = index2-1
                  # 更新ans 注意正負號
                  ans = ans+count*num*flag
                  # 最后需要將flag再次設(shè)置為1
                  flag = 1
              index += 1
          print(ans)
          image.png

          6-5 列表元素個數(shù)的加權(quán)和(1) (40 分)

          題目

          輸入一個嵌套列表,嵌套層次不限,根據(jù)層次,求列表元素的加權(quán)個數(shù)和。第一層每個元素算一個元素,第二層每個元素算2個元素,第三層每個元素算3個元素,第四層每個元素算4個元素,...,以此類推!

          輸入格式:

          ?

          在一行中輸入一個列表。

          ?

          輸出格式:

          ?

          在一行中輸出加權(quán)元素個數(shù)值。

          ?

          輸入樣例: 在這里給出一組輸入。例如:

          ?

          [1,2,[3,4,[5,6],7],8]

          ?

          輸出樣例: 在這里給出相應(yīng)的輸出。例如:

          ?

          15

          ?

          解答

          在上一題思路上簡化即可

          s = input()
          count = 0
          ans = 0
          index = 0
          while index < len(s):
              if s[index] == '[':
                  count += 1
              elif s[index] == ']':
                  count -= 1
          #    elif s[index]=='-':
          #       flag=-1
              elif s[index].isdigit():
                  index2 = index
                  while s[index2].isdigit():
                      index2 += 1
                  index = index2-1
                  ans = ans+count
              index += 1
          print(ans)
          image.png

          第6章-6 求指定層的元素個數(shù) (40 分)

          題目

          輸入一個嵌套列表,再輸入層數(shù),求該層的數(shù)字元素個數(shù)。

          輸入格式:

          ?

          第一行輸入列表 第二行輸入層數(shù)

          ?

          輸出格式:

          ?

          在一行中輸出元素個數(shù)

          ?

          輸入樣例: 在這里給出一組輸入。例如:

          ?

          [1,2,[3,4,[5,6],7],8] 3

          ?

          輸出樣例: 在這里給出相應(yīng)的輸出。例如:

          ?

          2

          ?

          解答

          s = input()
          n=int(input())
          count = 0
          ans = {}
          index = 0
          while index < len(s):
              if s[index] == '[':
                  count += 1
              elif s[index] == ']':
                  count -= 1
              elif s[index].isdigit():
                  index2 = index
                  while s[index2].isdigit():
                      index2 += 1
                  index = index2-1
                  ans[count]=ans.get(count,0)+1
              index += 1
          print(ans[n])
          image.png

          6-7 找出總分最高的學(xué)生 (15 分)

          題目

          給定N個學(xué)生的基本信息,包括學(xué)號(由5個數(shù)字組成的字符串)、姓名(長度小于10的不包含空白字符的非空字符串)和3門課程的成績([0,100]區(qū)間內(nèi)的整數(shù)),要求輸出總分最高學(xué)生的姓名、學(xué)號和總分。

          輸入格式:

          ?

          輸入在一行中給出正整數(shù)N(≤10)。隨后N行,每行給出一位學(xué)生的信息,格式為“學(xué)號 姓名 成績1 成績2 成績3”,中間以空格分隔。

          ?

          輸出格式:

          ?

          在一行中輸出總分最高學(xué)生的姓名、學(xué)號和總分,間隔一個空格。題目保證這樣的學(xué)生是唯一的。

          ?

          輸入樣例:

          ?

          5 00001 huanglan 78 83 75 00002 wanghai 76 80 77 00003 shenqiang 87 83 76 10001 zhangfeng 92 88 78 21987 zhangmeng 80 82 75

          ?

          輸出樣例:

          ?

          zhangfeng 10001 258

          ?

          解答

          n = int(input())
          maxSumGrades = 0
          maxSumGradesIndex = 0
          students = []
          for i in range(n):
              student = list(input().split())
              sumGrades = 0
              for j in range(25):
                  sumGrades += int(student[j])
              if sumGrades > maxSumGrades:
                  maxSumGrades = sumGrades
                  maxSumGradesIndex = i
              students.append(student)
          print("{} {} {}".format(students[maxSumGradesIndex][1], students[maxSumGradesIndex][0], maxSumGrades))
          image.png

          6-8 輸出全排列 (20 分)

          題目

          輸入整數(shù)n(3<=n<=7),編寫程序輸出1,2,...,n整數(shù)的全排列,按字典序輸出。

          輸入格式:

          ?

          一行輸入正整數(shù)n。

          ?

          輸出格式:

          ?

          按字典序輸出1到n的全排列。每種排列占一行,數(shù)字間無空格。

          ?

          輸入樣例: 在這里給出一組輸入。例如:

          ?

          3

          ?

          輸出樣例: 在這里給出相應(yīng)的輸出。例如:

          ?

          123

          132

          213

          231

          312

          321

          ?

          解答

          1-n的全排列(3<=n<=7) 最小數(shù)一定是:123..45..n 最大數(shù)是:n..54...321 思路(暴力循環(huán)):

          • 從123...n 到 n...321 依次遍歷
          • 對其進行set操作
          • 當(dāng)set(num)==set("123...n")時
          • 說明是符合條件的全排列
          n = int(input())
          ls = [str(i) for i in range(1, n+1)]
          s = "1234567"
          # beg=123...n
          beg = int(s[:n])
          # end=n...321
          end = int(s[n-1::-1])
          for x in range(beg, end+1):
              if set(str(x)) == set(ls):
                  print(x)
          image.png

          結(jié)語

          文章僅作為學(xué)習(xí)筆記,記錄從0到1的一個過程

          希望對您有所幫助,如有錯誤歡迎小伙伴指正~

          瀏覽 261
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操逼的免费视频 | 日韩一区二区三区在线视频 | 成人片成人片 | 玩弄奶水刚产少妇 | 久久国产精品视频免费看 |