中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

第三章 課時(shí)6 While循環(huán)語句及程序?qū)崿F(xiàn) 教案 浙教版(2019)必修1(課件 學(xué)案 教案三份打包)

資源下載
  1. 二一教育資源

第三章 課時(shí)6 While循環(huán)語句及程序?qū)崿F(xiàn) 教案 浙教版(2019)必修1(課件 學(xué)案 教案三份打包)

資源簡介

課時(shí)6 While循環(huán)語句及程序?qū)崿F(xiàn)
課時(shí)目標(biāo)
1.掌握while循環(huán)語句的語法格式,理解while循環(huán)的功能。2.熟練使用while循環(huán)語句解決實(shí)際問題。
1.while循環(huán)的功能
While循環(huán)在執(zhí)行時(shí),首先會(huì)判斷條件是否為真,如果條件為真,執(zhí)行一次循環(huán)體,再次判斷條件是否為真,如果仍為真,那么再執(zhí)行一次循環(huán)體,以此類推,直到條件為假時(shí)退出while語句。
2.while循環(huán)語句格式
while<條件>:
<循環(huán)體>
3.while循環(huán)適用場合
(1)循環(huán)次數(shù)未知,但循環(huán)結(jié)束的條件已知。
(2)循環(huán)條件有兩個(gè)或兩個(gè)以上。
①在while循環(huán)前應(yīng)對(duì)變量賦初值。
②循環(huán)變量的變化要在循環(huán)體內(nèi)通過賦值語句來實(shí)現(xiàn)。
例1 輸入一個(gè)正整數(shù),輸出所有的質(zhì)因子。如24=2*2*2*3。實(shí)現(xiàn)上述功能的Python代碼如下:
n=int(input("輸入一個(gè)正整數(shù):"))
i=2
while ①      :
  if n %i==0:
   n=n/i
   print(i)
 else:
  ②     
(1)在程序劃線處填入合適的代碼。
(2)按照上述算法,輸入60,依次輸出的質(zhì)因子是      。
答案 (1)①n>1或n!=1 ②i+=1 (2)2 2 3 5
解析 最小的質(zhì)因數(shù)是2,如果能被2整除,則反復(fù)相除,當(dāng)不能被2整除時(shí),將i增加1,嘗試被3整除,如果還不能除通,往上增加到4,由于前面反復(fù)除2操作,因此不可能被不是質(zhì)數(shù)的數(shù)除通。當(dāng)相除的結(jié)果為1時(shí),終止循環(huán)。輸入60,可以被2除2次,被3除1次,被5除1次。
變式訓(xùn)練1 工作人員手中有人民幣100、50、20、10和1元5個(gè)幣種,輸入一個(gè)金額,按最大票面優(yōu)先兌換的原則,輸出相應(yīng)的人民幣及張數(shù)。實(shí)現(xiàn)上述功能的Python代碼如下:
je=int(input("請輸入金額!"))
rmb=[100,50,20,10,1]
i,t=0,0
while je>0:
  if①      :
    t=je∥rmb[i]
    ②     
    print("兌換"+str(rmb[i])+"元"+str(t)+"張")
  else:
    i+=1
(1)在程序劃線處填入合適的代碼。
(2)按照上述算法,輸入356,依次輸出人民幣100、50、20、10和1元5個(gè)幣種的總的數(shù)量是      。
答案 (1)①je>=rmb[i] ②je=je-rmb[i]*t (2)10
解析 當(dāng)所剩金額大于或等于當(dāng)前幣種時(shí),計(jì)算可以兌換的張數(shù)t,接著減去當(dāng)前幣種的金額,如果金額小于當(dāng)前金額時(shí),找到下一種較小的金額進(jìn)行嘗試,直到全部兌換完畢。輸入356元,可以換3張100元,1張50元和6張1元。
例2 十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù):十進(jìn)制可以用按權(quán)展開相加的表達(dá)式來表示,如13D=1×23+1×22+0×21+1×20。若十進(jìn)制數(shù)大于k位上的權(quán)值,則k位上數(shù)為1,否則為0。設(shè)計(jì)的Python程序如下所示:
n=int(input("輸入一個(gè)十進(jìn)制數(shù)"))
ss=""
k=0
while 2**k  k+=1
whilen>0 and k>0:
  t=2**(k-1)
  if n>=t:
    ss=ss+"1"
    ①     
  else:
    ss=ss+"0"
    ②     
print(ss)
(1)加框處代碼有誤,請修正這個(gè)錯(cuò)誤。
(2)請?jiān)诔绦騽澗€處填入合適的代碼。
答案 (1)n>0 or k>0 (2)①n=n-t ②k-=1
解析 變量k表示轉(zhuǎn)換成二進(jìn)制的長度,每次需減去k位上的權(quán)值t,若n大于等于t,表示該位上數(shù)為1,完成該位轉(zhuǎn)換,同時(shí)需減去該位上的可能權(quán)值。若n已經(jīng)為零,但k并沒有達(dá)到最低位0,例如12D,減去8減去4后,得到0,但只輸出2個(gè)1,此時(shí)k=2,還需輸出2個(gè)0。
變式訓(xùn)練2 下列程序的功能是:計(jì)算表達(dá)式1×3+2×3+3×3+…100×3的值,并輸出計(jì)算結(jié)果。
s=0
i=1
while i<=100:
       
  i+=1
print(s)
(1)剛退出循環(huán)時(shí),變量i的值是      。
(2)為了實(shí)現(xiàn)上述表達(dá)式的計(jì)算,程序中劃線處的語句為      。
答案 (1)101 (2)s=s+i*3或s+=i*3
解析 本題主要考查的是while循環(huán)的程序?qū)崿F(xiàn)。(1)循環(huán)變量i的初值為1,步長為1,循環(huán)條件為i<=100,即當(dāng)i=101時(shí),循環(huán)結(jié)束。(2)根據(jù)表達(dá)式可知,劃線處語句的功能是將i*3的值進(jìn)行累加,從print(s)語句可知,累加和存放在變量s中,因此劃線處的語句為s=s+i*3,也可以寫為s+=i*3。
例3 判斷一個(gè)字符串是否為回文串。如果一個(gè)字符串,從左到右讀和從右到左讀是完全一樣的,那么這個(gè)字符串稱為回文串。下面程序的功能是:輸入一個(gè)字符串,檢測是否為回文串。
s=input("輸入一個(gè)字符串")
i=0
j=len(s)-1
flag=True
while①      :
if s[i]==s[j]:
     i+=1
     j-=1
  else:
     ②     
print(flag)
(1)請?jiān)诔绦騽澗€處填入合適的代碼。
(2)上述程序的功能與語句print(s==s[::-1])功能    (填:是/否)一致。
答案 (1)①i解析 本題考查的是多條件循環(huán)。變量i和j分別表示首尾兩個(gè)位置,對(duì)首尾的字符依次比較,如果相等,分別后移和前移,如果不相等,表示不是回文,循環(huán)結(jié)束。s[::-1]表示將字符串s首尾互換,若兩者相等,表示是回文字符。
變式訓(xùn)練3 用下列公式計(jì)算的π近似值,直到最后一項(xiàng)的絕對(duì)值小于10-8為止。
提示:≈1-+-+-…
實(shí)現(xiàn)上述功能的程序如下,請?jiān)诔绦騽澗€處填入合適的代碼。
n=t=1
s=0
flag=1
while①      :
  s=s+t
  flag=-flag
  n=n+2
  ②     
print("π=%f"%(4*s),"t=",t,"n=",n)
運(yùn)行結(jié)果:π=3.141593 t=9.9999999e-09 n=100000001
答案 ①abs(t)>=1e-8 ②t=flag*1.0/n或t=flag*1/n
解析 本題主要考查的是while循環(huán)的靈活應(yīng)用。條件是最后一項(xiàng)的絕對(duì)值小于10-8,需要使用絕對(duì)值函數(shù)abs,10-8用科學(xué)計(jì)數(shù)法來表示為1e-8,因此①處代碼為abs(t)>=1e-8;用flag變量來表示正負(fù)符號(hào),每一項(xiàng)的值為實(shí)數(shù),用1.0/n來表示,因此②處代碼為t=flag*1.0/n。
例4 有如下Python程序段:
s=input("輸入字符串:")
n=len(s)
i,j=0,n-1
result=""
while i=n∥2:
  if s[i]>s[j]:
    result+=s[i]; j-=1
  elif s[i]    result+=s[j]; i+=1
  else:
    i+=1;j-=1
print(result)
執(zhí)行該程序段,分別輸入下列選項(xiàng)中的字符串,輸出結(jié)果不為“555”的是 (  )
                
A."51234" B."12535" C."54321" D."55123"
答案 B
解析 本題考查字符串的操作。該程序段的作用是將字符串 s 中左半部分與右半部分按照從大到小的順序交替排列,生成一個(gè)新的字符串 result。輸入 s 字符串為 12535 時(shí),輸出結(jié)果為 55。
                
1.有如下Python程序段:
n=int(input("請輸入一個(gè)正整數(shù):"))
s=0;i=1
while i  if n%i==0:
    s=s+i
  i=i+1
print(s)
運(yùn)行程序,輸入18輸出s的值是 (  )
A.5 B.21 C.39 D.6
答案 B
解析 本題考查循環(huán)結(jié)構(gòu)。把n的因子進(jìn)行相加。
2.有如下Python程序段:
m=int(input("輸入一個(gè)數(shù)字串"))
s=""
flag=True
while m>0:
  r=m%10
  m=m∥10
  if flag and r%2!=0:
    s=str(r)+s
    flag=not flag
print(flag,s)
若輸入的值為“5201314”,執(zhí)行該程序段后,輸出的結(jié)果是 (  )
A.False 1 B.True 1 C.False 2 D.True 4
答案 A
解析 本題考查循環(huán)控制結(jié)構(gòu)和邏輯變量運(yùn)用。語句r=m%10取出m的個(gè)位數(shù),語句m=m∥10去除m的個(gè)位數(shù),因此該循環(huán)是從后向前取出數(shù)字串的各個(gè)數(shù)字,當(dāng)條件flag and r%2!=0成立時(shí),把r變成字符并聯(lián)接入s中,語句flag=not flag的作用是把flag的值變?yōu)镕alse,該程序的功能是找到第一個(gè)奇數(shù)。
3.有如下Python程序段:
s="CixiStudent"
f=[0]*26;t=s[4:];i=0
while i  if 'A'<=t[i]<="Z":
    i+=1
    continue
  elif 'a'<=t[i]<="z" and f[ord(t[i])-ord('a')]==0:
    f[ord(t[i])-ord('a')]=1
  i+=1
for i in range(26):
  if f[i]==1:
    print(chr(i+ord('a')),end='')
運(yùn)行以上程序段后,輸出的內(nèi)容為 (  )
A.dentu B.Student C.tuden D.deintux
答案 A
解析 本題考查循環(huán)控制結(jié)構(gòu)。continue語句用來告訴python跳過當(dāng)前循環(huán),進(jìn)行下一個(gè)循環(huán)。列表t中的值為'Student',f列表中有26個(gè)元素,可以看成一個(gè)桶,當(dāng)某個(gè)字母出現(xiàn),ord(t[i])-ord('a')對(duì)應(yīng)的索引號(hào)的元素值為1,表示該字母出現(xiàn)過。將出現(xiàn)過的字母從小到大輸出。
4.將一組數(shù)保存在列表a中,若a[0]=0,則在列表a中從左到右找到第一個(gè)大于零的元素,并與a[0]交換。用Python程序描述,下列選項(xiàng)中不可行的是 (  )
A.i=0
 while a[i]==0:
   i+=1
 a[0],a[i]=a[i],a[0]
B.for i in range(5):
  if a [i]>0:
    break
 a[0],a[i]=a[i],a[0]
C.i=0
 while True:
   if a[i]>0:
     break
   i+=1
 a[0],a[i]=a[i],a[0]
D.for i in a:
   if i>0:
    break
 a[0],a[i]=a[i],a[0]
答案 D
解析 本題考查循環(huán)結(jié)構(gòu)。D選項(xiàng)中變量i已經(jīng)是列表a中的元素,則最后進(jìn)行交換的并不是a[i],正確的交換語句為:a[0],i=i,a[0]。
5.有如下Python程序段:
s="akpboyogirlyygirlkp"
s1=s+"###";boy=0;girl=0;i=0
while i  a=s1[i];b=s1[i+1];c=s1[i+2];d=s1[i+3]
  if a=="b" or b=="o" or c=="y":
    boy=boy+1
  if a=="g" or b=="i" or c=="r" or d=="1":
    girl=girl+1
  i+=1
執(zhí)行該程序段后,變量boy及girl的值分別為 (  )
A.1 2 B.4 2 C.4 3 D.6 9
答案 B
解析 本題考查列表的枚舉。連續(xù)取出4個(gè)字符,若第1、2、3個(gè)字符中分別是b、o、y中一個(gè),則boy增加1。如i等于5時(shí),取出"yog",第2個(gè)字符是"o";取出"rly"、"lyy",第3個(gè)字符是"y"。
6.有如下Python程序段:
a=[3,4,2,5,6,7,7,1,2]
m,c,i=1,1,1
while i  if a[i]>=a[i-1]:
    c+=1
    m=max (m,c)
  else:
    c=1
  i+=1
print (c,m)
則程序執(zhí)行后,c和m的值分別是 (  )
A.1 5 B.1 4 C.2 5 D.2 4
答案 C
7.有如下Python程序段:
count=0;i=1
while i<100:
  if int(i**0.5)==i**0.5:
    count+=1
  i+=1
print(count)
運(yùn)行程序后,輸出的結(jié)果是 (  )
A.9 B.0 C.99 D.5
答案 A
8.對(duì)由小寫字母組成的長度相同的兩個(gè)字符串s1和s2進(jìn)行各字母數(shù)量檢測,如"abdac"與"aabcd"所含字母數(shù)量一致,與"aabcc"所含字母數(shù)量不一致。實(shí)現(xiàn)該功能的Python部分程序段如下:
s1="";s2=""
b=[0]*26
for i in range (len(s1)) :
  x=ord(s1[i])-97;b[x]+=1
  y=ord(s2[i])-97; (1) 
j=0
while j<26:
  if  (2) :
    break
  j+=1
if j==26:
  print("所含字母數(shù)量一致")
else:
  print("所含字母數(shù)量不一致")
上述程序段中劃線處可選語句為:
①b[y]+=1 ②b[y]-=1 ③b[j]!=0
④b[j]==0
則(1)(2)處語句依次應(yīng)為 (  )
A.①③ B.②④ C.②③ D.①④
答案 C
9.有如下Python程序:
a = [0] * 10 ; c = 0
n = int(input("輸入n的值:"))
while n > 0:
  a[n % 10] += 1
  if a[n % 10] == 2:
    c += 1
  n ∥= 10
print(c)
運(yùn)行該程序后,輸出結(jié)果為2,則輸入n的值可能為 (  )
A.135553 B.234125
C.202222 D.112233
答案 A
一、基礎(chǔ)鞏固
1.有如下Python程序段:
s1='blgr';s2='bollymgpric'
i=0;j=0;s3=''
while i<=len(s1)-1 and j<=len(s2)-1:
  if s1[i]==s2[j]:
    i+=1
  else:
    s3=s3+s2[j]
  j+=1
print(s3)
執(zhí)行該程序段后,輸出的內(nèi)容為 (  )
A.oymp B.olymp C.olympic D.oympic
答案 B
2.有如下Python程序段:
code="0123456789ABCDEF"
numstr=input("請輸入一個(gè)二進(jìn)制整數(shù):")
numlen=len(numstr)
s=0;ss=""
for i in range(numlen):
  x=int(numstr[i])*2**(numlen-i-1)
  s+=x
t=s
while t>0:
  ss=code[t%16]+ss
  t=t∥16
print(ss)
運(yùn)行該程序段,輸入1100111,程序結(jié)果為 (  )
A.110 B.103
C.67 D.1100111
答案 C
3.有如Python下程序段:
s1=[12,15,28]
s2=[15,28,32]
i=0
while i<=len(s1)-1:
  if s1[i] not in s2:
    print(s1[i])
  i=i+1
以下說法正確的是 (  )
A.該程序輸出結(jié)果為32
B.該程序的算法是解析算法
C.該程序輸出的結(jié)果為[12]
D.該程序?qū)崿F(xiàn)的功能是得到s1中有但s2中沒有的元素
答案 D
4.有下面一段程序:
a=[9,5,2,3,0,-9,5,0,7,-10]
s,i=0,0
while a[i]!=0 and i < len(a):
  s+=1
  i+=1
運(yùn)行該程序后s的值為 (  )
A.4 B.5 C.8 D.10
答案 A
解析 本題考查循環(huán)結(jié)構(gòu)while語句,當(dāng)i位置上的元素值不為0且滿足i比列表a長度來的小的時(shí)候可以進(jìn)入循環(huán),此時(shí)s,i的值分別+1,不滿足任一條件時(shí)循環(huán)結(jié)束,可以看到列表中有元素0,此時(shí)i的值為4,因此結(jié)束時(shí)s的值也是4。
5.小明用Python編寫了一個(gè)找最大值的程序,程序功能是:用戶輸入數(shù)字串,數(shù)據(jù)間用逗號(hào)分隔,最后以逗號(hào)結(jié)尾,程序執(zhí)行后輸出最大的數(shù)值。程序段如下,劃線處代碼正確的是 (  )
s=input("請輸入數(shù)字串:")
i=j=max=0
c=t=""
while j  c=s[j]
  if c==",":
    t=s[i:j]
    if int(t)>max:
      max=int(t)
    ① 
  ② 
print(max)
A.①i=i+1 ②j=j+1
B.①i=j+1 ②j=j+1
C.①j=j+1 ②i=i+1
D.①j=i+1 ②i=i+1
答案 B
解析 本題考查循環(huán)結(jié)構(gòu)嵌套分支結(jié)構(gòu)找最值模型,i表示數(shù)字的左索引,j表示數(shù)字后逗號(hào)的索引值,t為逗號(hào)前完整的數(shù)字,當(dāng)找到比當(dāng)前最大值還要大的值時(shí),更新最大值并且更新左邊界和右邊界的值繼續(xù)往下找,因此答案為B。
6.在一次抽獎(jiǎng)活動(dòng)中,需要在8人中隨機(jī)抽取3個(gè)幸運(yùn)獎(jiǎng),對(duì)應(yīng)的Python程序如下:
import random
xm=["A","B","C","D","E","F","G","H"]
             #用字母代表人名
hj=[""]*3
bz=[False]*8
i=0
while i<=2:
  n=random.randint(0,7) #產(chǎn)生一個(gè)0-7之間的整數(shù)n
    
print(hj)
程序劃線處代碼合適的是 (  )
A.if bz[n]==False:
  hj[i]=xm[n]
  bz[n]=True
  i+=1
B.if bz[n]==True:
  hj[i]=xm[n]
  bz[n]=False
  i+=1
C.if bz[i]==False:
  hj[n]=xm[i]
  bz[i]=True
  i+=1
D.if bz[i]==True:
  hj[n]=xm[i]
  bz[i]=True
  i+=1
答案 A
解析 本題考查隨機(jī)函數(shù)的應(yīng)用。列表bz中有8個(gè)元素,其初值均為False,表示該索引號(hào)對(duì)應(yīng)的xm元素沒有抽到獎(jiǎng)。變量i表示第幾個(gè)幸運(yùn)觀眾,變量n表示幸運(yùn)觀眾的索引號(hào)。
7.有如下Python程序段:
import random
a=[-1]*5
for i in range(len(a)):
  a[i]=random.randint(1,10) #產(chǎn)生一個(gè)[1,10]之間的整數(shù)
for i in range(2,4):
  key=a[i]
  j=i-1
  while j>=1 and key    a[j+1]=a[j]
    j-=1
  a[j+1]=key
執(zhí)行該程序段后,變量a可能的值為 (  )
A.[1,0,3,6,7] B.[3,2,6,7,1]
C.[1,3,2,5,7] D.[3,5,6,2,7]
答案 B
解析 本題考查隨機(jī)數(shù)應(yīng)用和順序查找。在循環(huán)體中,i的值為2或3,語句key=a[i]的功能是把a(bǔ)[i]的值保存到key中,同時(shí)可以騰出位置i,在他前面的數(shù)a[j],如果滿足key8.將有序數(shù)組 nums 中的重復(fù)項(xiàng)刪除,編寫的 Python 程序段如下:
nums=1
n=len(nums);i=1  
  (1)  
while i  if nums[i] !=nums[i-1]:
       (2)  
    k+=1
  i+=1
nums=nums[:k]
上述程序段中方框處可選代碼為:①k=0 ② k=1 ③nums[k]=nums[i] ④nums[i-1]=nums[i] 則(1)、(2)處代碼依次為 (  )
A.①③ B.①④ C.②③ D.②④
答案 C
解析 本題考查刪除重復(fù)項(xiàng)的代碼段理解。本題的思路是:從第二個(gè)字符開始遍歷有序字符串 s 的各個(gè)字符,若前后相鄰兩個(gè)字符不相等,把當(dāng)前字符重新賦值到字符串 s 中,此時(shí)的索引用 k 來表示,若前后兩個(gè)字符相等, 則跳過當(dāng)前字符,不組合。以["a","a","b","b","b","c"]為例,最終會(huì)得到["a","b","c"]。
9.有如下Python程序:
a = [1, 5, 3, 2, 1, 4, 5, 8, 4, 3]
i = 1;max_list = []
while i <= len(a)-2:
  if a[i-1] < a[i] and a[i] > a[i+1]:
    max_list.append(a[i]) #append()方法用于在列表末尾添加新的對(duì)象
  i += 1
print(max_list)
執(zhí)行該程序段后,列表 max_list 的值為 (  )
A.[1] B.[8] C.[5, 8] D.[5, 1, 8]
答案 C
10.有如下Python程序段:
s=input("請輸入字符串:")
i=0;j=1;t=0;s1="";maxs=""
while i  if s[i]<=s[i+1]:
    j+=1
    s1=s[t:t+j]
    if len(maxs)<=len(s1):
      maxs=s1
  else:
    s1=""
    t=i+1
    j=1
  i+=1
print(maxs)
執(zhí)行該程序,當(dāng)輸入“p8579yt559h6”時(shí),輸出的結(jié)果為 (  )
A.579 B.579y C.559h D.t559h
答案 C
二、能力提升
11.學(xué)校舉辦“十佳歌手”比賽,經(jīng)初賽選拔,共有15位同學(xué)進(jìn)入決賽。現(xiàn)需制定一個(gè)決賽出場順序,即為每位進(jìn)入決賽的同學(xué)隨機(jī)分配一個(gè)出場序號(hào)。編寫的Python程序段如下:
import random # 導(dǎo)入隨機(jī)模塊
name=["張**","李**","王*","許*","林**","王**","陳*","洪**","鮑**","羅*","張*","吳**","方*","鄭*","章*"]
seq={};a=[];i=0
while i<=14:
  m=random.randint(1,15) #產(chǎn)生[1,15]范圍內(nèi)的隨機(jī)整數(shù)
  if m not in a: # ①
    a+=[m]
    seq[name[i]]=m
    i+=1 # ②
print(seq) # ③
運(yùn)行上述程序段后,下列說法正確的是 (  )
A.列表a中的元素不會(huì)重復(fù)
B.①處語句最多執(zhí)行15次
C.②處語句縮進(jìn)應(yīng)與①處語句對(duì)齊,避免程序死循環(huán)
D.③處語句縮進(jìn)應(yīng)與①處語句對(duì)齊,否則只輸出一個(gè)序號(hào)
答案 A
解析 本題考查循環(huán)語句、字典和隨機(jī)函數(shù)。當(dāng)數(shù)m不在列表a中時(shí),才會(huì)將數(shù)m放入列表中,因此列表a中的元素不會(huì)重復(fù)。變量m是隨機(jī)產(chǎn)生的整數(shù),則并不能保住m每次都不同,若是產(chǎn)生了重復(fù)的數(shù),則程序會(huì)再次進(jìn)入循環(huán),重新產(chǎn)生隨機(jī)數(shù),因此①處語句是最少執(zhí)行15次。若②處語句縮進(jìn)應(yīng)與①處語句對(duì)齊,則不論變量m是否為重復(fù)的數(shù),i的值都會(huì)加1,while循環(huán)一共循環(huán)15次,會(huì)造成部分同學(xué)沒有序號(hào)的情況。若③處語句縮進(jìn)應(yīng)與①處語句對(duì)齊,則每進(jìn)入一次循環(huán),都會(huì)輸出字典seq的值。而在原程序中,若產(chǎn)生了一個(gè)不重復(fù)的新序號(hào),則會(huì)將該序號(hào)與一位同學(xué)對(duì)應(yīng)起來形成字典中的鍵值對(duì)。因此最終輸出的字典中存放了所有同學(xué)與之對(duì)應(yīng)的序號(hào)。
12.有如下程序段:
import random #導(dǎo)入隨機(jī)數(shù)模塊
n=random.randint(0,100) #產(chǎn)生0-100之間的隨機(jī)整數(shù),包含0和100
m=n;k=0;s=""
while n!=1:
  for i in range(2,n+1):
    if n%i==0:
      k=i
      n=n∥k
      s=s+str(k)+"*"
      break
print(m,"=",s[0:len(s)-1])
上述程序執(zhí)行后,輸出結(jié)果不可能的是 (  )
A.67=67 B.34=2*17
C.54=2*3*3*3 D.20=2*3*4
答案 D
13.有一組正整數(shù),要求對(duì)其中的奇偶數(shù)進(jìn)行交換。交換后偶數(shù)在前,奇數(shù)在后,并保持相對(duì)順序不變。
a=[5,10,21,7,24,14,9,11,36,37]
n=len(a);b=[0]*n
num=0;k=0
while k <10:
  if    ①   :
    b[num]=a[k]
    num+=1
  else:
      ②  
  k+=1
for j in range(n-num,n):
     ③  
print(a)
將加框處的代碼補(bǔ)充完整,正確的是 (  )
A.①a[k]%2==1 ②a[k-num]=a[k] ③a[j]=b[j-n+num]
B.①a[k]%2==0 ②b[k-num]=a[k] ③a[j]=b[j+num]
C.①a[k]%2==0 ②a[k-num]=a[k] ③a[j]=b[j+num]
D.①a[k]%2==1 ②b[k-num]=a[k] ③a[j]=b[j-n+num]
答案 A
14.奇偶校驗(yàn)是一種校驗(yàn)數(shù)據(jù)傳輸正確性的方法。其中奇校驗(yàn)方法:統(tǒng)計(jì)二進(jìn)制數(shù)據(jù)的數(shù)位中“1”的個(gè)數(shù),若個(gè)數(shù)為奇數(shù),則校驗(yàn)位值為0,否則校驗(yàn)位值為1。小李編寫了一個(gè)計(jì)算奇校驗(yàn)位的程序,功能如下:鍵盤輸入1~255十進(jìn)制待校驗(yàn)數(shù),輸出該數(shù)對(duì)應(yīng)的二進(jìn)制值及該數(shù)的校驗(yàn)位值。程序運(yùn)行界面如圖所示。
請輸入待校驗(yàn)數(shù):2020轉(zhuǎn)換為二進(jìn)制數(shù)為:11111100100 校驗(yàn)位值為:0>>>
實(shí)現(xiàn)上述功能的程序如下,請?jiān)诔绦騽澗€處填入合適的代碼。
n=int(input("請輸入待校驗(yàn)數(shù):"))
t=0
s=""
while n>0:
 a=n%2
 ①     
 t=t+a
 s=str(a)+s
②     
print("轉(zhuǎn)換為二進(jìn)制數(shù)為:",s,"校驗(yàn)位值為:",1-v)
答案 ①n=n∥2 ②v=t%2
解析 本題的算法思想是將整數(shù)n轉(zhuǎn)化為二進(jìn)制數(shù),然后統(tǒng)計(jì)1的個(gè)數(shù),再對(duì)統(tǒng)計(jì)個(gè)數(shù)進(jìn)行校驗(yàn)。十進(jìn)制化二進(jìn)制的方法為除2取余,每得到一個(gè)余數(shù),則將余數(shù)累加在變量t中,商為n∥2,因此①處為n=n∥2;根據(jù)print語句可知,結(jié)果為1-v,即v為1時(shí)校驗(yàn)位值為0,v為0時(shí)校驗(yàn)位值為1,因此可推斷出②處語句為v=t%2。
15.某次測試的答題結(jié)果存儲(chǔ)在asht.txt文件中,該文件每行記錄1個(gè)考生10道單選題的答案,每題有A、B、C、D四個(gè)選項(xiàng),空白的答案標(biāo)記為'K'。評(píng)分標(biāo)準(zhǔn):正確得3分,錯(cuò)誤得-1分,空白得0分。實(shí)現(xiàn)評(píng)分的Python程序如下。
ANS='ACBBCDADBC' #ANS 為標(biāo)準(zhǔn)答案
score=[]
for line in open('asht.txt','r'):
  score.append(0)
  i=len(score)-1
  j=0
  while j    if①      :
      score[i]+=3
    elif line[j]!='K':
      ②     
    j+=1
print(score)
(1)若標(biāo)準(zhǔn)答案為:'ACBBCDADBC',則答案ACBBDDADKC'的得分為    。
(2)完善上述①②處代碼。
答案 (1)23 (2)①line[j]==ANS[j]
②score[i]-=1
解析 本題考查順序查找算法。line表示asht.txt文件中每一條記錄,每條記錄有10道單選題答案。語句score.append(0)表示每讀取一條記錄,該列表增加一個(gè)值為0的元素,i表示score列表中最后一個(gè)元素的索引值。j初值為0,終值為len(ANS)-1,表示在標(biāo)準(zhǔn)答案中比對(duì)當(dāng)前記錄中答案,如果line[j]==ANS[j]表示當(dāng)前答案與標(biāo)準(zhǔn)答案一致,得3分,不正確將扣1分。
16.分解質(zhì)因數(shù)是指一個(gè)整數(shù)可以寫成幾個(gè)質(zhì)數(shù)相乘的形式。現(xiàn)有如下Python程序段實(shí)現(xiàn)對(duì)一個(gè)整數(shù)(可以為負(fù)整數(shù))分解質(zhì)因數(shù),如輸入正整數(shù) 30,輸出結(jié)果為:30=2*3*5,輸入負(fù)整數(shù)-4,輸出結(jié)果為:-4=-1*2*2。
t=int(input("輸入一個(gè)整數(shù):"))
ans = str(t)+"="
if t<0:
  t=-t
  ans += "-1*"
i=2
while t>1:
  while t%i==0:
    ans += str(i)+"*"
    ①   
  i+=1
print(②     )
(1)當(dāng)輸入整數(shù)-56時(shí),輸出的結(jié)果為        。
(2)請?jiān)趧澗€處填入合適的代碼。
答案 (1)-56=-1*2*2*2*7 (2)① t∥=i② ans[:-1] 或 ans[0:len(ans)-1]
17.尼克斯徹定理:任何一個(gè)大于等于 1 的整數(shù)的立方等于一串連續(xù)奇數(shù)之和。如:33=7+9+11,編寫一個(gè)Python 程序驗(yàn)證尼克斯徹定理,程序運(yùn)行時(shí),輸入一個(gè)大于等于1的整數(shù),輸出驗(yàn)證結(jié)果如下圖所示:
請輸入一個(gè)大于1的整數(shù):33**3=7+9+11
(1)若輸入數(shù)字2,輸出的結(jié)果為    
(2)完善劃線處的代碼。
n=int(input("請輸入一個(gè)大于等于 1 的整數(shù):"))
for i in range(1,n**3+1,2):
  sum1=0
  t=i
  while sum1    ①   
    t+=2
  if sum1==n**3:
    break
s=str(n)+"**"+str(3)+"="
while sum1>0:
  sum1-=i
  if ②    :
    s+=str(i)
  else:
    s+=str(i)+"+"
    i=③   
print(s)
答案 (1)2**3=3+5 (2)①sum1+=t
②sum1==0 ③i+2
18.如果集合a的任意一個(gè)元素都是集合b的元素,那么集合a稱為集合b的子集。例如集合a的元素依次為[1,3,5],集合b的元素依次為[1,2,3,4,5],集合a的任意一個(gè)元素都是集合b中的元素,所以集合a稱為集合b的子集。編寫Python程序,用于判斷集合a是否是集合b的子集,功能如下:程序運(yùn)行時(shí)隨機(jī)產(chǎn)生na個(gè)不重復(fù)的整數(shù)存儲(chǔ)在集合a中,隨機(jī)產(chǎn)生nb個(gè)不重復(fù)的整數(shù)存儲(chǔ)在集合b中。顯示判斷的結(jié)果,程序運(yùn)行界面如圖所示。
[2,8,18][5,14,19,10,12,18,4,2,7,17]a不是b的子集
(1)集合a中元素為[3,6,7],集合b中元素為[6,19,7,13,2,10,3],集合a是否為集合b的子集    (填字母。A.是 B.否)
(2)完善劃線處代碼。
import random
na=3;nb=10
#隨機(jī)產(chǎn)生 na 個(gè)不重復(fù)的整數(shù)存儲(chǔ)在列表 a 中,隨機(jī)產(chǎn)生 nb 個(gè)不重復(fù)的整數(shù)存儲(chǔ)在列表 b 中,代碼略
print(a);print(b)
①   
i=0
while ②    :
  j=0
  while j    if ③    :
      break
    j+=1
  if j==nb:
    flag=False
  i+=1
if flag:
  print("a 是 b 的子集")
else:
  print("a 不是b 的子集")
答案 (1)A (2)①flag=True ②i19.下列程序統(tǒng)計(jì)字符串(由數(shù)字或字母組成)中同一字符連續(xù)出現(xiàn)最多的次數(shù),如果有多個(gè)字符連續(xù)出現(xiàn)次數(shù)并列最多,輸出第一個(gè)字符,例如程序運(yùn)行時(shí),輸入字符串:“aabb33ddddf88888q",輸出結(jié)果為:8出現(xiàn)的次數(shù)最多,最多共連續(xù)出現(xiàn)了5次
Python程序如下:
s=input("請輸入字符串:")
c=0;m=0;dic={}
maxlen=0;d=0
while c+1<=len(s):
  if s[c] not in dic:
    dic[s[c]]=1
  while s[c]==s[c+m]:
    m+=1
    if c+m==len(s):
      ①   
  if m>maxlen:
    dic[s[c]]=m
    d=c
    ②   
  c+=m
  m=0
print(③     +"出現(xiàn)的次數(shù)最多")
print("最多共連續(xù)出現(xiàn)了"+str(maxlen),"次")
print("位于字符串的第",d+1,"位到第",d+maxlen+1 ,"位")
(1)請?jiān)趧澗€處填入合適的代碼。
(2)加框處的代碼還可以用    代替。
答案 (1)①break ②maxlen=m ③s[d] (2)dic[s[d]](共85張PPT)
課時(shí)6 While循環(huán)語句及程序?qū)崿F(xiàn)
第三章 算法的程序?qū)崿F(xiàn)
1.掌握while循環(huán)語句的語法格式,理解while循環(huán)的功能。
2.熟練使用while循環(huán)語句解決實(shí)際問題。
目 錄
CONTENTS
知識(shí)梳理
01
例題精析
02
隨堂檢測
03
鞏固與提升
04
知識(shí)梳理
1
1.while循環(huán)的功能
While循環(huán)在執(zhí)行時(shí),首先會(huì)判斷條件是否為真,如果條件為真,執(zhí)行一次循環(huán)體,再次判斷條件是否為真,如果仍為真,那么再執(zhí)行一次循環(huán)體,以此類推,直到條件為假時(shí)退出while語句。
2.while循環(huán)語句格式
while<條件>:
<循環(huán)體>
3.while循環(huán)適用場合
(1)循環(huán)次數(shù)未知,但循環(huán)結(jié)束的條件已知。
(2)循環(huán)條件有兩個(gè)或兩個(gè)以上。
①在while循環(huán)前應(yīng)對(duì)變量賦初值。
②循環(huán)變量的變化要在循環(huán)體內(nèi)通過賦值語句來實(shí)現(xiàn)。
例題精析
2
例1 輸入一個(gè)正整數(shù),輸出所有的質(zhì)因子。如24=2*2*2*3。實(shí)現(xiàn)上述功能的Python代碼如下:
n=int(input("輸入一個(gè)正整數(shù):"))
i=2
while ①      :
  if n %i==0:
   n=n/i
   print(i)
 else:
  ②     
(1)在程序劃線處填入合適的代碼。
(2)按照上述算法,輸入60,依次輸出的質(zhì)因子是      。
答案 (1)①n>1或n!=1 ②i+=1 (2)2 2 3 5
解析 最小的質(zhì)因數(shù)是2,如果能被2整除,則反復(fù)相除,當(dāng)不能被2整除時(shí),將i增加1,嘗試被3整除,如果還不能除通,往上增加到4,由于前面反復(fù)除2操作,因此不可能被不是質(zhì)數(shù)的數(shù)除通。當(dāng)相除的結(jié)果為1時(shí),終止循環(huán)。輸入60,可以被2除2次,被3除1次,被5除1次。
變式訓(xùn)練1 工作人員手中有人民幣100、50、20、10和1元5個(gè)幣種,輸入一個(gè)金額,按最大票面優(yōu)先兌換的原則,輸出相應(yīng)的人民幣及張數(shù)。實(shí)現(xiàn)上述功能的Python代碼如下:
je=int(input("請輸入金額!"))
rmb=[100,50,20,10,1]
i,t=0,0
while je>0:
  if①      :
D
    t=je∥rmb[i]
    ②     
    print("兌換"+str(rmb[i])+"元"+str(t)+"張")
  else:
    i+=1
(1)在程序劃線處填入合適的代碼。
(2)按照上述算法,輸入356,依次輸出人民幣100、50、20、10和1元5個(gè)幣種的總的數(shù)量是      。
答案 (1)①je>=rmb[i] ②je=je-rmb[i]*t (2)10
解析 當(dāng)所剩金額大于或等于當(dāng)前幣種時(shí),計(jì)算可以兌換的張數(shù)t,接著減去當(dāng)前幣種的金額,如果金額小于當(dāng)前金額時(shí),找到下一種較小的金額進(jìn)行嘗試,直到全部兌換完畢。輸入356元,可以換3張100元,1張50元和6張1元。
例2 十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù):十進(jìn)制可以用按權(quán)展開相加的表達(dá)式來表示,如13D=1×23+1×22+0×21+1×20。若十進(jìn)制數(shù)大于k位上的權(quán)值,則k位上數(shù)為1,否則為0。設(shè)計(jì)的Python程序如下所示:
n=int(input("輸入一個(gè)十進(jìn)制數(shù)"))
ss=""
k=0
while 2**k  k+=1
  t=2**(k-1)
  if n>=t:
    ss=ss+"1"
    ①     
  else:
    ss=ss+"0"
    ②     
print(ss)
(1)加框處代碼有誤,請修正這個(gè)錯(cuò)誤。
(2)請?jiān)诔绦騽澗€處填入合適的代碼。
答案 (1)n>0 or k>0 (2)①n=n-t ②k-=1
解析 變量k表示轉(zhuǎn)換成二進(jìn)制的長度,每次需減去k位上的權(quán)值t,若n大于等于t,表示該位上數(shù)為1,完成該位轉(zhuǎn)換,同時(shí)需減去該位上的可能權(quán)值。若n已經(jīng)為零,但k并沒有達(dá)到最低位0,例如12D,減去8減去4后,得到0,但只輸出2個(gè)1,此時(shí)k=2,還需輸出2個(gè)0。
變式訓(xùn)練2 下列程序的功能是:計(jì)算表達(dá)式1×3+2×3+3×3+…100×3的值,并輸出計(jì)算結(jié)果。
s=0
i=1
while i<=100:
       
  i+=1
print(s)
(1)剛退出循環(huán)時(shí),變量i的值是      。
(2)為了實(shí)現(xiàn)上述表達(dá)式的計(jì)算,程序中劃線處的語句為      。
答案 (1)101 (2)s=s+i*3或s+=i*3
解析 本題主要考查的是while循環(huán)的程序?qū)崿F(xiàn)。(1)循環(huán)變量i的初值為1,步長為1,循環(huán)條件為i<=100,即當(dāng)i=101時(shí),循環(huán)結(jié)束。(2)根據(jù)表達(dá)式可知,劃線處語句的功能是將i*3的值進(jìn)行累加,從print(s)語句可知,累加和存放在變量s中,因此劃線處的語句為s=s+i*3,也可以寫為s+=i*3。
例3 判斷一個(gè)字符串是否為回文串。如果一個(gè)字符串,從左到右讀和從右到左讀是完全一樣的,那么這個(gè)字符串稱為回文串。下面程序的功能是:輸入一個(gè)字符串,檢測是否為回文串。
s=input("輸入一個(gè)字符串")
i=0
j=len(s)-1
flag=True
while①      :
if s[i]==s[j]:
     i+=1
     j-=1
  else:
     ②     
print(flag)
(1)請?jiān)诔绦騽澗€處填入合適的代碼。
(2)上述程序的功能與語句print(s==s[::-1])功能    (填:是/否)一致。
答案 (1)①i解析 本題考查的是多條件循環(huán)。變量i和j分別表示首尾兩個(gè)位置,對(duì)首尾的字符依次比較,如果相等,分別后移和前移,如果不相等,表示不是回文,循環(huán)結(jié)束。s[::-1]表示將字符串s首尾互換,若兩者相等,表示是回文字符。
  flag=-flag
  n=n+2
  ②     
print("π=%f"%(4*s),"t=",t,"n=",n)
運(yùn)行結(jié)果:
π=3.141593 t=9.9999999e-09 n=100000001
答案 ①abs(t)>=1e-8 ②t=flag*1.0/n或t=flag*1/n
解析 本題主要考查的是while循環(huán)的靈活應(yīng)用。條件是最后一項(xiàng)的絕對(duì)值小于10-8,需要使用絕對(duì)值函數(shù)abs,10-8用科學(xué)計(jì)數(shù)法來表示為1e-8,因此①處代碼為abs(t)>=1e-8;用flag變量來表示正負(fù)符號(hào),每一項(xiàng)的值為實(shí)數(shù),用1.0/n來表示,因此②處代碼為t=flag*1.0/n。
例4 有如下Python程序段:
s=input("輸入字符串:")
n=len(s)
i,j=0,n-1
result=""
while i=n∥2:
  if s[i]>s[j]:
    result+=s[i]; j-=1
  elif s[i]    result+=s[j]; i+=1
  else:
    i+=1;j-=1
print(result)
執(zhí)行該程序段,分別輸入下列選項(xiàng)中的字符串,輸出結(jié)果不為“555”的是(  )
A."51234" B."12535" C."54321“ D."55123"
解析 本題考查字符串的操作。該程序段的作用是將字符串 s 中左半部分與右半部分按照從大到小的順序交替排列,生成一個(gè)新的字符串 result。輸入 s 字符串為 12535 時(shí),輸出結(jié)果為 55。
B
隨堂檢測
3
1.有如下Python程序段:
n=int(input("請輸入一個(gè)正整數(shù):"))
s=0;i=1
while i  if n%i==0:
    s=s+i
  i=i+1
print(s)
運(yùn)行程序,輸入18輸出s的值是(  )
A.5 B.21 C.39 D.6
B
解析 本題考查循環(huán)結(jié)構(gòu)。把n的因子進(jìn)行相加。
2.有如下Python程序段:
m=int(input("輸入一個(gè)數(shù)字串"))
s=""
flag=True
while m>0:
  r=m%10
  m=m∥10
  if flag and r%2!=0:
    s=str(r)+s
    flag=not flag
print(flag,s)
若輸入的值為“5201314”,執(zhí)行該程序段后,輸出的結(jié)果是 (  )
A.False 1 B.True 1 C.False 2 D.True 4
解析 本題考查循環(huán)控制結(jié)構(gòu)和邏輯變量運(yùn)用。語句r=m%10取出m的個(gè)位數(shù),語句m=m∥10去除m的個(gè)位數(shù),因此該循環(huán)是從后向前取出數(shù)字串的各個(gè)數(shù)字,當(dāng)條件flag and r%2!=0成立時(shí),把r變成字符并聯(lián)接入s中,語句flag=not flag的作用是把flag的值變?yōu)镕alse,該程序的功能是找到第一個(gè)奇數(shù)。
A
3.有如下Python程序段:
s="CixiStudent"
f=[0]*26;t=s[4:];i=0
while i  if 'A'<=t[i]<="Z":
    i+=1
    continue
  elif 'a'<=t[i]<="z" and f[ord(t[i])-ord('a')]==0:
    f[ord(t[i])-ord('a')]=1
  i+=1
for i in range(26):
  if f[i]==1:
    print(chr(i+ord('a')),end='')
A
運(yùn)行以上程序段后,輸出的內(nèi)容為 (  )
A.dentu B.Student C.tuden D.deintux
解析 本題考查循環(huán)控制結(jié)構(gòu)。continue語句用來告訴python跳過當(dāng)前循環(huán),進(jìn)行下一個(gè)循環(huán)。列表t中的值為'Student',f列表中有26個(gè)元素,可以看成一個(gè)桶,當(dāng)某個(gè)字母出現(xiàn),ord(t[i])-ord('a')對(duì)應(yīng)的索引號(hào)的元素值為1,表示該字母出現(xiàn)過。將出現(xiàn)過的字母從小到大輸出。
B.for i in range(5):
  if a [i]>0:
    break
 a[0],a[i]=a[i],a[0]
D
A.i=0
 while a[i]==0:
   i+=1
 a[0],a[i]=a[i],a[0]
C.i=0
 while True:
   if a[i]>0:
     break
   i+=1
 a[0],a[i]=a[i],a[0]
D.for i in a:
   if i>0:
    break
 a[0],a[i]=a[i],a[0]
解析 本題考查循環(huán)結(jié)構(gòu)。D選項(xiàng)中變量i已經(jīng)是列表a中的元素,則最后進(jìn)行交換的并不是a[i],正確的交換語句為:a[0],i=i,a[0]。
5.有如下Python程序段:
s="akpboyogirlyygirlkp"
s1=s+"###";boy=0;girl=0;i=0
while i  a=s1[i];b=s1[i+1];c=s1[i+2];d=s1[i+3]
  if a=="b" or b=="o" or c=="y":
    boy=boy+1
  if a=="g" or b=="i" or c=="r" or d=="1":
    girl=girl+1
  i+=1
B
執(zhí)行該程序段后,變量boy及girl的值分別為 (  )
A.1 2 B.4 2 C.4 3 D.6 9
解析 本題考查列表的枚舉。連續(xù)取出4個(gè)字符,若第1、2、3個(gè)字符中分別是b、o、y中一個(gè),則boy增加1。如i等于5時(shí),取出"yog",第2個(gè)字符是"o";取出"rly"、"lyy",第3個(gè)字符是"y"。
6.有如下Python程序段:
a=[3,4,2,5,6,7,7,1,2]
m,c,i=1,1,1
while i  if a[i]>=a[i-1]:
    c+=1
    m=max (m,c)
  else:
    c=1
  i+=1
print (c,m)
則程序執(zhí)行后,c和m的值分別是(  )
A.1 5 B.1 4 C.2 5 D.2 4
C
7.有如下Python程序段:
count=0;i=1
while i<100:
  if int(i**0.5)==i**0.5:
    count+=1
  i+=1
print(count)
運(yùn)行程序后,輸出的結(jié)果是(  )
A.9 B.0 C.99 D.5
A
8.對(duì)由小寫字母組成的長度相同的兩個(gè)字符串s1和s2進(jìn)行各字母數(shù)量檢測,如"abdac"與"aabcd"所含字母數(shù)量一致,與"aabcc"所含字母數(shù)量不一致。實(shí)現(xiàn)該功能的Python部分程序段如下:
s1="";s2=""
b=[0]*26
for i in range (len(s1)) :
  x=ord(s1[i])-97;b[x]+=1
  y=ord(s2[i])-97; (1) 
j=0
while j<26:
  if  (2) :
    break
  j+=1
if j==26:
  print("所含字母數(shù)量一致")
else:
  print("所含字母數(shù)量不一致")
上述程序段中劃線處可選語句為:
①b[y]+=1 ②b[y]-=1 ③b[j]!=0
④b[j]==0
則(1)(2)處語句依次應(yīng)為(  )
A.①③ B.②④ C.②③ D.①④
C
9.有如下Python程序:
a = [0] * 10 ; c = 0
n = int(input("輸入n的值:"))
while n > 0:
  a[n % 10] += 1
  if a[n % 10] == 2:
    c += 1
  n ∥= 10
print(c)
運(yùn)行該程序后,輸出結(jié)果為2,則輸入n的值可能為 (  )
A.135553 B.234125 C.202222 D.112233
A
4
鞏固與提升
基礎(chǔ)鞏固
能力提升
1.有如下Python程序段:
s1='blgr';s2='bollymgpric'
i=0;j=0;s3=''
while i<=len(s1)-1 and j<=len(s2)-1:
  if s1[i]==s2[j]:
    i+=1
  else:
    s3=s3+s2[j]
  j+=1
print(s3)
執(zhí)行該程序段后,輸出的內(nèi)容為(  )
A.oymp B.olymp C.olympic D.oympic
B
2.有如下Python程序段:
code="0123456789ABCDEF"
numstr=input("請輸入一個(gè)二進(jìn)制整數(shù):")
numlen=len(numstr)
s=0;ss=""
for i in range(numlen):
  x=int(numstr[i])*2**(numlen-i-1)
  s+=x
t=s
while t>0:
  ss=code[t%16]+ss
  t=t∥16
print(ss)
運(yùn)行該程序段,輸入1100111,程序結(jié)果為(  )
A.110 B.103
C.67 D.1100111
C
3.有如Python下程序段:
s1=[12,15,28]
s2=[15,28,32]
i=0
while i<=len(s1)-1:
  if s1[i] not in s2:
    print(s1[i])
  i=i+1
以下說法正確的是 (  )
A.該程序輸出結(jié)果為32
B.該程序的算法是解析算法
C.該程序輸出的結(jié)果為[12]
D.該程序?qū)崿F(xiàn)的功能是得到s1中有但s2中沒有的元素
D
4.有下面一段程序:
a=[9,5,2,3,0,-9,5,0,7,-10]
s,i=0,0
while a[i]!=0 and i < len(a):
  s+=1
  i+=1
運(yùn)行該程序后s的值為(  )
A.4 B.5 C.8 D.10
A
解析 本題考查循環(huán)結(jié)構(gòu)while語句,當(dāng)i位置上的元素值不為0且滿足i比列表a長度來的小的時(shí)候可以進(jìn)入循環(huán),此時(shí)s,i的值分別+1,不滿足任一條件時(shí)循環(huán)結(jié)束,可以看到列表中有元素0,此時(shí)i的值為4,因此結(jié)束時(shí)s的值也是4。
5.小明用Python編寫了一個(gè)找最大值的程序,程序功能是:用戶輸入數(shù)字串,數(shù)據(jù)間用逗號(hào)分隔,最后以逗號(hào)結(jié)尾,程序執(zhí)行后輸出最大的數(shù)值。程序段如下,劃線處代碼正確的是 (  )
s=input("請輸入數(shù)字串:")
i=j=max=0
c=t=""
while j  c=s[j]
  if c==",":
    t=s[i:j]
B
    if int(t)>max:
      max=int(t)
    ① 
  ② 
print(max)
A.①i=i+1 ②j=j+1
B.①i=j+1 ②j=j+1
C.①j=j+1 ②i=i+1
D.①j=i+1 ②i=i+1
解析 本題考查循環(huán)結(jié)構(gòu)嵌套分支結(jié)構(gòu)找最值模型,i表示數(shù)字的左索引,j表示數(shù)字后逗號(hào)的索引值,t為逗號(hào)前完整的數(shù)字,當(dāng)找到比當(dāng)前最大值還要大的值時(shí),更新最大值并且更新左邊界和右邊界的值繼續(xù)往下找,因此答案為B。
6.在一次抽獎(jiǎng)活動(dòng)中,需要在8人中隨機(jī)抽取3個(gè)幸運(yùn)獎(jiǎng),對(duì)應(yīng)的Python程序如下:
import random
xm=["A","B","C","D","E","F","G","H"]
             #用字母代表人名
hj=[""]*3
bz=[False]*8
i=0
while i<=2:
  n=random.randint(0,7) #產(chǎn)生一個(gè)0-7之間的整數(shù)n
    
print(hj)
程序劃線處代碼合適的是 (  )
A
A.if bz[n]==False:
  hj[i]=xm[n]
  bz[n]=True
  i+=1
B.if bz[n]==True:
  hj[i]=xm[n]
  bz[n]=False
  i+=1
C.if bz[i]==False:
  hj[n]=xm[i]
  bz[i]=True
  i+=1
D.if bz[i]==True:
  hj[n]=xm[i]
  bz[i]=True
  i+=1
解析 本題考查隨機(jī)函數(shù)的應(yīng)用。列表bz中有8個(gè)元素,其初值均為False,表示該索引號(hào)對(duì)應(yīng)的xm元素沒有抽到獎(jiǎng)。變量i表示第幾個(gè)幸運(yùn)觀眾,變量n表示幸運(yùn)觀眾的索引號(hào)。
7.有如下Python程序段:
import random
a=[-1]*5
for i in range(len(a)):
  a[i]=random.randint(1,10) #產(chǎn)生一個(gè)[1,10]之間的整數(shù)
for i in range(2,4):
  key=a[i]
  j=i-1
  while j>=1 and key    a[j+1]=a[j]
    j-=1
  a[j+1]=key
執(zhí)行該程序段后,變量a可能的值為 (  )
A.[1,0,3,6,7] B.[3,2,6,7,1]
C.[1,3,2,5,7] D.[3,5,6,2,7]
解析 本題考查隨機(jī)數(shù)應(yīng)用和順序查找。在循環(huán)體中,i的值為2或3,語句key=a[i]的功能是把a(bǔ)[i]的值保存到key中,同時(shí)可以騰出位置i,在他前面的數(shù)a[j],如果滿足keyB
上述程序段中方框處可選代碼為:①k=0 ② k=1 ③nums[k]=nums[i] ④nums[i-1]=nums[i] 則(1)、(2)處代碼依次為 (  )
A.①③ B.①④ C.②③ D.②④
解析 本題考查刪除重復(fù)項(xiàng)的代碼段理解。本題的思路是:從第二個(gè)字符開始遍歷有序字符串 s 的各個(gè)字符,若前后相鄰兩個(gè)字符不相等,把當(dāng)前字符重新賦值到字符串 s 中,此時(shí)的索引用 k 來表示,若前后兩個(gè)字符相等, 則跳過當(dāng)前字符,不組合。以["a","a","b","b","b","c"]為例,最終會(huì)得到["a","b","c"]。
C
9.有如下Python程序:
a = [1, 5, 3, 2, 1, 4, 5, 8, 4, 3]
i = 1;max_list = []
while i <= len(a)-2:
  if a[i-1] < a[i] and a[i] > a[i+1]:
    max_list.append(a[i]) #append()方法用于在列表末尾添加新的對(duì)象
  i += 1
print(max_list)
執(zhí)行該程序段后,列表 max_list 的值為(  )
A.[1] B.[8] C.[5, 8] D.[5, 1, 8]
C
10.有如下Python程序段:
s=input("請輸入字符串:")
i=0;j=1;t=0;s1="";maxs=""
while i  if s[i]<=s[i+1]:
    j+=1
    s1=s[t:t+j]
    if len(maxs)<=len(s1):
      maxs=s1
  else:
    s1=""
    t=i+1
    j=1
  i+=1
print(maxs)
執(zhí)行該程序,當(dāng)輸入“p8579yt559h6”時(shí),輸出的結(jié)果為(  )
A.579 B.579y C.559h D.t559h
C
11.學(xué)校舉辦“十佳歌手”比賽,經(jīng)初賽選拔,共有15位同學(xué)進(jìn)入決賽。現(xiàn)需制定一個(gè)決賽出場順序,即為每位進(jìn)入決賽的同學(xué)隨機(jī)分配一個(gè)出場序號(hào)。編寫的Python程序段如下:
import random # 導(dǎo)入隨機(jī)模塊
name=["張**","李**","王*","許*","林**","王**","陳*","洪**","鮑**","羅*","張*","吳**","方*","鄭*","章*"]
seq={};a=[];i=0
while i<=14:
  m=random.randint(1,15) #產(chǎn)生[1,15]范圍內(nèi)的隨機(jī)整數(shù)
  if m not in a: # ①
    a+=[m]
    seq[name[i]]=m
    i+=1 # ②
print(seq) # ③
運(yùn)行上述程序段后,下列說法正確的是(  )
A.列表a中的元素不會(huì)重復(fù)
B.①處語句最多執(zhí)行15次
C.②處語句縮進(jìn)應(yīng)與①處語句對(duì)齊,避免程序死循環(huán)
D.③處語句縮進(jìn)應(yīng)與①處語句對(duì)齊,否則只輸出一個(gè)序號(hào)
A
解析 本題考查循環(huán)語句、字典和隨機(jī)函數(shù)。當(dāng)數(shù)m不在列表a中時(shí),才會(huì)將數(shù)m放入列表中,因此列表a中的元素不會(huì)重復(fù)。變量m是隨機(jī)產(chǎn)生的整數(shù),則并不能保住m每次都不同,若是產(chǎn)生了重復(fù)的數(shù),則程序會(huì)再次進(jìn)入循環(huán),重新產(chǎn)生隨機(jī)數(shù),因此①處語句是最少執(zhí)行15次。若②處語句縮進(jìn)應(yīng)與①處語句對(duì)齊,則不論變量m是否為重復(fù)的數(shù),i的值都會(huì)加1,while循環(huán)一共循環(huán)15次,會(huì)造成部分同學(xué)沒有序號(hào)的情況。若③處語句縮進(jìn)應(yīng)與①處語句對(duì)齊,則每進(jìn)入一次循環(huán),都會(huì)輸出字典seq的值。而在原程序中,若產(chǎn)生了一個(gè)不重復(fù)的新序號(hào),則會(huì)將該序號(hào)與一位同學(xué)對(duì)應(yīng)起來形成字典中的鍵值對(duì)。因此最終輸出的字典中存放了所有同學(xué)與之對(duì)應(yīng)的序號(hào)。
12.有如下程序段:
import random #導(dǎo)入隨機(jī)數(shù)模塊
n=random.randint(0,100) #產(chǎn)生0-100之間的隨機(jī)整數(shù),包含0和100
m=n;k=0;s=""
while n!=1:
  for i in range(2,n+1):
    if n%i==0:
      k=i
      n=n∥k
      s=s+str(k)+"*"
      break
print(m,"=",s[0:len(s)-1])
D
A
14.奇偶校驗(yàn)是一種校驗(yàn)數(shù)據(jù)傳輸正確性的方法。其中奇校驗(yàn)方法:統(tǒng)計(jì)二進(jìn)制數(shù)據(jù)的數(shù)位中“1”的個(gè)數(shù),若個(gè)數(shù)為奇數(shù),則校驗(yàn)位值為0,否則校驗(yàn)位值為1。小李編寫了一個(gè)計(jì)算奇校驗(yàn)位的程序,功能如下:鍵盤輸入1~255十進(jìn)制待校驗(yàn)數(shù),輸出該數(shù)對(duì)應(yīng)的二進(jìn)制值及該數(shù)的校驗(yàn)位值。程序運(yùn)行界面如圖所示。
實(shí)現(xiàn)上述功能的程序如下,請?jiān)诔绦騽澗€處填入合適的代碼。
n=int(input("請輸入待校驗(yàn)數(shù):"))
t=0
s=""
請輸入待校驗(yàn)數(shù):2020
轉(zhuǎn)換為二進(jìn)制數(shù)為:11111100100 校驗(yàn)位值為:0
>>>
while n>0:
 a=n%2
 ①     
 t=t+a
 s=str(a)+s
②     
print("轉(zhuǎn)換為二進(jìn)制數(shù)為:",s,"校驗(yàn)位值為:",1-v)
答案 ①n=n∥2 ②v=t%2
解析 本題的算法思想是將整數(shù)n轉(zhuǎn)化為二進(jìn)制數(shù),然后統(tǒng)計(jì)1的個(gè)數(shù),再對(duì)統(tǒng)計(jì)個(gè)數(shù)進(jìn)行校驗(yàn)。十進(jìn)制化二進(jìn)制的方法為除2取余,每得到一個(gè)余數(shù),則將余數(shù)累加在變量t中,商為n∥2,因此①處為n=n∥2;根據(jù)print語句可知,結(jié)果為1-v,即v為1時(shí)校驗(yàn)位值為0,v為0時(shí)校驗(yàn)位值為1,因此可推斷出②處語句為v=t%2。
15.某次測試的答題結(jié)果存儲(chǔ)在asht.txt文件中,該文件每行記錄1個(gè)考生10道單選題的答案,每題有A、B、C、D四個(gè)選項(xiàng),空白的答案標(biāo)記為'K'。評(píng)分標(biāo)準(zhǔn):正確得3分,錯(cuò)誤得-1分,空白得0分。實(shí)現(xiàn)評(píng)分的Python程序如下。
ANS='ACBBCDADBC' #ANS 為標(biāo)準(zhǔn)答案
score=[]
for line in open('asht.txt','r'):
  score.append(0)
  i=len(score)-1
  j=0
  while j    if①      :
      score[i]+=3
    elif line[j]!='K':
      ②     
    j+=1
print(score)
(1)若標(biāo)準(zhǔn)答案為:'ACBBCDADBC',則答案
'ACBBDDADKC'的得分為    。
(2)完善上述①②處代碼。
答案 (1)23 (2)①line[j]==ANS[j] ②score[i]-=1
解析 本題考查順序查找算法。line表示asht.txt文件中每一條記錄,每條記錄有10道單選題答案。語句score.append(0)表示每讀取一條記錄,該列表增加一個(gè)值為0的元素,i表示score列表中最后一個(gè)元素的索引值。j初值為0,終值為len(ANS)-1,表示在標(biāo)準(zhǔn)答案中比對(duì)當(dāng)前記錄中答案,如果line[j]==ANS[j]表示當(dāng)前答案與標(biāo)準(zhǔn)答案一致,得3分,不正確將扣1分。
16.分解質(zhì)因數(shù)是指一個(gè)整數(shù)可以寫成幾個(gè)質(zhì)數(shù)相乘的形式。現(xiàn)有如下Python程序段實(shí)現(xiàn)對(duì)一個(gè)整數(shù)(可以為負(fù)整數(shù))分解質(zhì)因數(shù),如輸入正整數(shù) 30,輸出結(jié)果為:30=2*3*5,輸入負(fù)整數(shù)-4,輸出結(jié)果為:-4=-1*2*2。
t=int(input("輸入一個(gè)整數(shù):"))
ans = str(t)+"="
if t<0:
  t=-t
  ans += "-1*"
i=2
while t>1:
  while t%i==0:
    ans += str(i)+"*"
    ①   
  i+=1
print(②     )
(1)當(dāng)輸入整數(shù)-56時(shí),輸出的結(jié)果為        。
(2)請?jiān)趧澗€處填入合適的代碼。
答案 (1)-56=-1*2*2*2*7 (2)① t∥=i② ans[:-1] 或 ans[0:len(ans)-1]
17.尼克斯徹定理:任何一個(gè)大于等于 1 的整數(shù)的立方等于一串連續(xù)奇數(shù)之和。如:33=7+9+11,編寫一個(gè)Python 程序驗(yàn)證尼克斯徹定理,程序運(yùn)行時(shí),輸入一個(gè)大于等于1的整數(shù),輸出驗(yàn)證結(jié)果如下圖所示:
(1)若輸入數(shù)字2,輸出的結(jié)果為     。
(2)完善劃線處的代碼。
n=int(input("請輸入一個(gè)大于等于 1 的整數(shù):"))
for i in range(1,n**3+1,2):
請輸入一個(gè)大于1的整數(shù):3
3**3=7+9+11
  sum1=0
  t=i
  while sum1    ①   
    t+=2
  if sum1==n**3:
    break
s=str(n)+"**"+str(3)+"="
while sum1>0:
  sum1-=i
  if ②    :
    s+=str(i)
  else:
    s+=str(i)+"+"
    i=③   
print(s)
答案 (1)2**3=3+5 (2)①sum1+=t ②sum1==0 ③i+2
18.如果集合a的任意一個(gè)元素都是集合b的元素,那么集合a稱為集合b的子集。例如集合a的元素依次為[1,3,5],集合b的元素依次為[1,2,3,4,5],集合a的任意一個(gè)元素都是集合b中的元素,所以集合a稱為集合b的子集。編寫Python程序,用于判斷集合a是否是集合b的子集,功能如下:程序運(yùn)行時(shí)隨機(jī)產(chǎn)生na個(gè)不重復(fù)的整數(shù)存儲(chǔ)在集合a中,隨機(jī)產(chǎn)生nb個(gè)不重復(fù)的整數(shù)存儲(chǔ)在集合b中。顯示判斷的結(jié)果,程序運(yùn)行界面如圖所示。
[2,8,18]
[5,14,19,10,12,18,4,2,7,17]
a不是b的子集
(1)集合a中元素為[3,6,7],集合b中元素為[6,19,7,13,2,10,3],集合a是否為集合b的子集    (填字母。A.是 B.否) 。
(2)完善劃線處代碼。
import random
na=3;nb=10
#隨機(jī)產(chǎn)生 na 個(gè)不重復(fù)的整數(shù)存儲(chǔ)在列表 a 中,隨機(jī)產(chǎn)生 nb 個(gè)不重復(fù)的整數(shù)存儲(chǔ)在列表 b 中,代碼略
print(a);print(b)
①   
i=0
while ②    :
  j=0
  while j    if ③    :
      break
    j+=1
  if j==nb:
    flag=False
  i+=1
if flag:
  print("a 是 b 的子集")
else:
  print("a 不是b 的子集")
答案 (1)A (2)①flag=True ②i19.下列程序統(tǒng)計(jì)字符串(由數(shù)字或字母組成)中同一字符連續(xù)出現(xiàn)最多的次數(shù),如果有多個(gè)字符連續(xù)出現(xiàn)次數(shù)并列最多,輸出第一個(gè)字符,例如程序運(yùn)行時(shí),輸入字符串:“aabb33ddddf88888q",輸出結(jié)果為:8出現(xiàn)的次數(shù)最多,最多共連續(xù)出現(xiàn)了5次
Python程序如下:
s=input("請輸入字符串:")
c=0;m=0;dic={}
maxlen=0;d=0
while c+1<=len(s):
  if s[c] not in dic:
    dic[s[c]]=1
  while s[c]==s[c+m]:
    m+=1
    if c+m==len(s):
      ①   
  if m>maxlen:
    dic[s[c]]=m
    d=c
    ②   
  c+=m
  m=0
print(③     +"出現(xiàn)的次數(shù)最多")
print("最多共連續(xù)出現(xiàn)了"+str( maxlen ),"次")
print("位于字符串的第",d+1,"位到第",d+maxlen+1 ,"位")
(1)請?jiān)趧澗€處填入合適的代碼。
(2)加框處的代碼還可以用    代替。
答案 (1)①break ②maxlen=m ③s[d] (2)dic[s[d]]課時(shí)6 While循環(huán)語句及程序?qū)崿F(xiàn)
課時(shí)目標(biāo)
1.掌握while循環(huán)語句的語法格式,理解while循環(huán)的功能。2.熟練使用while循環(huán)語句解決實(shí)際問題。
1.while循環(huán)的功能
While循環(huán)在執(zhí)行時(shí),首先會(huì)判斷條件是否為真,如果條件為真,執(zhí)行一次循環(huán)體,再次判斷條件是否為真,如果仍為真,那么再執(zhí)行一次循環(huán)體,以此類推,直到條件為假時(shí)退出while語句。
2.while循環(huán)語句格式
while〈條件〉:
〈循環(huán)體〉
3.while循環(huán)適用場合
(1)循環(huán)次數(shù)未知,但循環(huán)結(jié)束的條件已知。
(2)循環(huán)條件有兩個(gè)或兩個(gè)以上。
①在while循環(huán)前應(yīng)對(duì)變量賦初值。
②循環(huán)變量的變化要在循環(huán)體內(nèi)通過賦值語句來實(shí)現(xiàn)。
例1 輸入一個(gè)正整數(shù),輸出所有的質(zhì)因子。如24=2*2*2*3。實(shí)現(xiàn)上述功能的Python代碼如下:
n=int(input(″輸入一個(gè)正整數(shù):″))
i=2
while ①____________:
 if n % i==0:
n=n/i
print(i)
else:
②____________
(1)在程序劃線處填入合適的代碼。
(2)按照上述算法,輸入60,依次輸出的質(zhì)因子是____________。
聽課筆記:                                    
                                    
                                    
                                    
                                    
                                    
變式訓(xùn)練1 工作人員手中有人民幣100、50、20、10和1元5個(gè)幣種,輸入一個(gè)金額,按最大票面優(yōu)先兌換的原則,輸出相應(yīng)的人民幣及張數(shù)。實(shí)現(xiàn)上述功能的Python代碼如下:
je=int(input(″請輸入金額!″))
rmb=[100,50,20,10,1]
i,t=0,0
while je>0:
  if①____________:
   t=j(luò)e∥rmb[i]
   ②____________
   print(″兌換″+str(rmb[i])+″元″+str(t)+″張″)
 else:
   i+=1
(1)在程序劃線處填入合適的代碼。
(2)按照上述算法,輸入356,依次輸出人民幣100、50、20、10和1元5個(gè)幣種的總的數(shù)量是____________。
例2 十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù):十進(jìn)制可以用按權(quán)展開相加的表達(dá)式來表示,如13D=1×23+1×22+0×21+1×20。若十進(jìn)制數(shù)大于k位上的權(quán)值,則k位上數(shù)為1,否則為0。設(shè)計(jì)的Python程序如下所示:
n=int(input(″輸入一個(gè)十進(jìn)制數(shù)″))
ss=″″
k=0
while 2**k k+=1
while:
 t=2**(k-1)
 if n>=t:
ss=ss+″1″
①____________
 else:
ss=ss+″0″
②____________
print(ss)
(1)加框處代碼有誤,請修正這個(gè)錯(cuò)誤。
(2)請?jiān)诔绦騽澗€處填入合適的代碼。
聽課筆記:                                    
                                    
                                    
變式訓(xùn)練2 下列程序的功能是:計(jì)算表達(dá)式1×3+2×3+3×3+…100×3的值,并輸出計(jì)算結(jié)果。
s=0
i=1
while i<=100:
  ____________
  i+=1
print(s)
(1)剛退出循環(huán)時(shí),變量i的值是____________。
(2)為了實(shí)現(xiàn)上述表達(dá)式的計(jì)算,程序中劃線處的語句為____________。
例3 判斷一個(gè)字符串是否為回文串。如果一個(gè)字符串,從左到右讀和從右到左讀是完全一樣的,那么這個(gè)字符串稱為回文串。下面程序的功能是:輸入一個(gè)字符串,檢測是否為回文串。
s=input(″輸入一個(gè)字符串″)
i=0
j=len(s)-1
flag=True
while①____________:
  if s[i]==s[j]:
     i+=1
     j-=1
  else:
    ②____________
print(flag)
(1)請?jiān)诔绦騽澗€處填入合適的代碼。
(2)上述程序的功能與語句print(s==s[::-1])功能________(填:是/否)一致。
聽課筆記:                                    
                                    
                                    
變式訓(xùn)練3 用下列公式計(jì)算的π近似值,直到最后一項(xiàng)的絕對(duì)值小于10-8為止。
提示:≈1-+-+-…
實(shí)現(xiàn)上述功能的程序如下,請?jiān)诔绦騽澗€處填入合適的代碼。
n=t=1
s=0
flag=1
while①____________:
  s=s+t
  flag=-flag
  n=n+2
  ②____________
print(″π=%f″%(4*s),″t=″,t,″n=″,n)
運(yùn)行結(jié)果:π=3.141593 t=9.9999999e-09 n=100000001
例4 有如下Python程序段:
s=input(″輸入字符串:″)
n=len(s)
i,j=0,n-1
result=″″
while i=n∥2:
  if s[i]>s[j]:
   result+=s[i]; j-=1
  elif s[i]   result+=s[j]; i+=1
else:
   i+=1;j-=1
print(result)
執(zhí)行該程序段,分別輸入下列選項(xiàng)中的字符串,輸出結(jié)果不為“555”的是(  )
A.″51234″ B.″12535″
C.″54321″ D.″55123″
聽課筆記:                                    
                                    
                                    
                                    
1.有如下Python程序段:
n=int(input("請輸入一個(gè)正整數(shù):"))
s=0;i=1
while i  if n%i==0:
    s=s+i
  i=i+1
print(s)
運(yùn)行程序,輸入18輸出s的值是 (  )
A.5 B.21 C.39 D.6
2.有如下Python程序段:
m=int(input("輸入一個(gè)數(shù)字串"))
s=""
flag=True
while m>0:
  r=m%10
  m=m∥10
  if flag and r%2!=0:
    s=str(r)+s
    flag=not flag
print(flag,s)
若輸入的值為“5201314”,執(zhí)行該程序段后,輸出的結(jié)果是 (  )
A.False 1 B.True 1 C.False 2 D.True 4
3.有如下Python程序段:
s="CixiStudent"
f=[0]*26;t=s[4:];i=0
while i  if 'A'<=t[i]<="Z":
    i+=1
    continue
  elif 'a'<=t[i]<="z" and f[ord(t[i])-ord('a')]==0:
    f[ord(t[i])-ord('a')]=1
  i+=1
for i in range(26):
  if f[i]==1:
    print(chr(i+ord('a')),end='')
運(yùn)行以上程序段后,輸出的內(nèi)容為 (  )
A.dentu B.Student C.tuden D.deintux
4.將一組數(shù)保存在列表a中,若a[0]=0,則在列表a中從左到右找到第一個(gè)大于零的元素,并與a[0]交換。用Python程序描述,下列選項(xiàng)中不可行的是 (  )
A.i=0
 while a[i]==0:
   i+=1
 a[0],a[i]=a[i],a[0]
B.for i in range(5):
  if a [i]>0:
    break
 a[0],a[i]=a[i],a[0]
C.i=0
 while True:
   if a[i]>0:
     break
   i+=1
 a[0],a[i]=a[i],a[0]
D.for i in a:
   if i>0:
    break
 a[0],a[i]=a[i],a[0]
5.有如下Python程序段:
s="akpboyogirlyygirlkp"
s1=s+"###";boy=0;girl=0;i=0
while i  a=s1[i];b=s1[i+1];c=s1[i+2];d=s1[i+3]
  if a=="b" or b=="o" or c=="y":
    boy=boy+1
  if a=="g" or b=="i" or c=="r" or d=="1":
    girl=girl+1
  i+=1
執(zhí)行該程序段后,變量boy及girl的值分別為 (  )
A.1 2 B.4 2 C.4 3 D.6 9
6.有如下Python程序段:
a=[3,4,2,5,6,7,7,1,2]
m,c,i=1,1,1
while i  if a[i]>=a[i-1]:
    c+=1
    m=max (m,c)
  else:
    c=1
  i+=1
print (c,m)
則程序執(zhí)行后,c和m的值分別是 (  )
A.1 5 B.1 4 C.2 5 D.2 4
7.有如下Python程序段:
count=0;i=1
while i<100:
  if int(i**0.5)==i**0.5:
    count+=1
  i+=1
print(count)
運(yùn)行程序后,輸出的結(jié)果是 (  )
A.9 B.0 C.99 D.5
8.對(duì)由小寫字母組成的長度相同的兩個(gè)字符串s1和s2進(jìn)行各字母數(shù)量檢測,如"abdac"與"aabcd"所含字母數(shù)量一致,與"aabcc"所含字母數(shù)量不一致。實(shí)現(xiàn)該功能的Python部分程序段如下:
s1="";s2=""
b=[0]*26
for i in range (len(s1)) :
  x=ord(s1[i])-97;b[x]+=1
  y=ord(s2[i])-97; (1) 
j=0
while j<26:
  if  (2) :
    break
  j+=1
if j==26:
  print("所含字母數(shù)量一致")
else:
  print("所含字母數(shù)量不一致")
上述程序段中劃線處可選語句為:
①b[y]+=1 ②b[y]-=1 ③b[j]!=0
④b[j]==0
則(1)(2)處語句依次應(yīng)為 (  )
A.①③ B.②④ C.②③ D.①④
9.有如下Python程序:
a = [0] * 10 ; c = 0
n = int(input("輸入n的值:"))
while n > 0:
  a[n % 10] += 1
  if a[n % 10] == 2:
    c += 1
  n ∥= 10
print(c)
運(yùn)行該程序后,輸出結(jié)果為2,則輸入n的值可能為 (  )
A.135553 B.234125
C.202222 D.112233

展開更多......

收起↑

資源列表

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 隆林| 翼城县| 忻城县| 曲阜市| 万源市| 云和县| 绥德县| 集安市| 临湘市| 龙门县| 古蔺县| 哈巴河县| 大田县| 来凤县| 渝北区| 叶城县| 思茅市| 宜丰县| 保定市| 乐昌市| 车险| 灵石县| 日土县| 安阳市| 洛南县| 乐清市| 汕尾市| 宁陵县| 于都县| 泰和县| 南溪县| 巫溪县| 随州市| 卓尼县| 南充市| 芮城县| 东源县| 云林县| 徐州市| 醴陵市| 安宁市|