《Python语言程序设计》二级教程课后编程题及答案
答案不全,仅把本人敲出结果的代码整理如下。部分代码参考了网上文章,初学水平有限,难免存在些许错误,请读者见谅。第二章Python语言基本语法元素2.1获得用户输入的一个整数N,计算并输出N的32次方。N=eval(input('请输入'))a=N**32print("它的32次方是"+str(a))2.2获得用户输入的一段文字,将这段文字进行垂直输出。s=input("请输入一段文字:")i=0w
答案不全,仅把本人敲出结果的代码整理如下。大部分为本人思路,部分代码参考了网上文章,初学水平有限,若有错误请读者指出,感谢。
第二章 Python语言基本语法元素
2.1获得用户输入的一个整数N,计算并输出N的32次方。
N=eval(input('请输入'))
a=N**32
print("它的32次方是"+str(a))
2.2获得用户输入的一段文字,将这段文字进行垂直输出。
s=input("请输入一段文字:")
i=0
while i<len(s):
print(s[i])
i=i+1
2.3获得用户输入的一个合法算式,例如:1.2+3.4,输出运算结果。
a=input("输入一个带数算式:")
b=eval(a)
print("结果为:"+str(b))
2.4获得用户输入的一个小数,提取并输出其整数部分。
a=input("请输入一个小数:")
l=len(a)
i=0
while i<l:
print(a[i],end='')
i=i+1
if a[i]=='.':
break
2.5修改之后的代码如下:
n=eval(input("请输入整数N:"))
sum=0
for i in range(n):
sum+=i+1
print("1到N求和结果:{}".format(sum))
修改的地方:
1.要将input的字符串数字化
2.行末分号最好去掉
3.for后面加冒号
4.最后一行少了一个format对应的槽位置{}
第三章 基本数据类型
3.1获得用户输入的一个整数,输出该整数百位以上的数字。
a=input("请输入一个整数:")
b=eval(a)
if type(b)==type(1234):
l=len(a)-2
c=a[:l]
print(c)
else:
print("请输入一个整数!")
3.2获得用户输入的一个字符串,将字符串按照空格分隔,然后逐行打印出来。
s=input("请输入一个字符串:")
a=s.split()
l=len(a)
for i in range(l):
print(a[i])
3.3程序读入一个表示星期几的数字(1—7),输出对应的字符串名称。例如:输入3,返回“星期三”。
a=eval(input("请输入一个1—7的数字:"))
b=["一","二","三","四","五","六","日"]
print("星期"+b[a-1])
3.4设n是一任意自然数,如果n的各位数字反向排列所得自然数与n相等,则n被称为回文数。从键盘输入一个5位数字,请编写程序判断这个数字是不是回文数。
a=input("请输入一个5位自然数:")
b=a[::-1]
if a==b:
print("此数是回文数!")
else:
print("此数不是回文数!")
3.5输入一个十进制整数,分别输出其二进制,八进制,十六进制字符串。
s=eval(input("输入一个十进制整数:"))
print("二进制:{:b}".format(s))
print("八进制:{:o}".format(s))
print("十六进制:{:X}".format(s))
第四章 程序的控制结构
4.1输入一个年份,输出是否为闰年。(闰年:能被4整除但不能被100整除,或者能被400整除的年份都是闰年)
while True:
s=input('请输入一个年份:(输入q退出)')
if s=='q':
break
else:
try:
a=eval(s)
except:
print('请输入数字表示的年份!')
continue
if (a%4==0 and a%100!=0)or a%400==0:
print('此年份是闰年!')
else:
print('此年份不是闰年!')
4.2最大公约数计算。获得两个整数,求出这两个整数的最大公约数和最小公倍数。最大公约数的计算一般使用辗转相除法,最小公倍数使用两个数的乘积除以最大公约数。
先放个例子理解一下辗转相除法:
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
a=eval(input('请输入一个数:'))
b=eval(input('请输入另一个数:'))
d=a*b
if a>b:
while a%b!=0:
c=a%b
a=b
b=c
e=int(d/b)
print('两个数的最大公约数为:'+str(b)+'\n两个数的最小公倍数为:'+str(e))
elif a<b:
while b%a!=0:
c=b%a
b=a
a=c
e=int(d/a)
print('两个数的最大公约数为:'+str(a)+'\n两个数的最小公倍数为:'+str(e))
else:
print('最大公约数与最小公倍数都是'+str(a))
4.3统计不同字符个数。用户从键盘键入一行字符,编写一个程序,统计并输出其中英文字符,数字,空格和其他字符的个数。
symble=input('Enter your words:')
number=letter=space=other=0
i=0
for i in range(len(symble)):
if 'a'<=symble[i]<='z' or 'A'<=symble[i]<='Z':
letter+=1
elif '0'<=symble[i]<='9':
number+=1
elif symble[i]==' ':
space+=1
else:
other+=1
print('letter:'+str(letter)+' number:'+str(number)+' space:'+str(space)+' other:'+str(other))
4.4猜数游戏续。当用户输入的不是整数(如字母,浮点数)时,程序会终止执行退出。改编题目1中的程序,当用户输入出错时给出“输入内容必须为整数!”的提示,并让用户重新输入。
import random
target=random.randint(1,1000)
count=0
while True:
try:
guess=eval(input('请输入一个猜测的整数(1至1000):'))
except:
print('输入内容必须为整数!此次不计数猜测次数!')#解决输入不是数字的问题
continue
if type(guess)!=type(1):
print('输入内容必须为整数!此次不计数猜测次数!')#解决输入是浮点数的问题
continue
count=count+1
if guess<target:
print('猜小了')
elif guess>target:
print('猜大了')
else:
print('猜对了')
break
print('此次猜测的次数为:'+str(count))
5.羊车门问题。有三扇关闭的门,一扇门后停着汽车,blabla。。。。。。请使用random库对这个随机事件进行预测,分别输出参赛者改变选择和坚持选择获胜的概率。
这个问题我之前有一篇帖子阐述了一下帮助理解,下面代码原理看不懂的或者对这个问题有兴趣的可以看看,这里不赘述了,直接上代码:
import random
n=10000
success_time=0
fail_time=0
for i in range(n):
car_location=random.randint(1,3)
my_choose=random.randint(1,3)
if my_choose==car_location:
fail_time+=1
else:
success_time+=1
s=success_time/10000
f=fail_time/10000
print('换后成功概率为:'+str(s))
print('换后失败概率为:'+str(f))
第五章 函数和代码复用
5.1实现isNum()函数,参数为一个字符串,如果这个字符串属于整数,浮点数或者复数的表示,则返回True,否则返回False。
a=input("请输入数字")
def isnum(a):
try:
n=eval(a)
if type(n)==float or type(n)==int or type(n)==complex:
print('True')
else:
prit('False')
except:
print('False')
isnum(a)
5.2实现isNum()函数,参数为整数,要有异常处理。如果整数是质数,返回True,否则返回False。
from math import sqrt
def is_prime(a):
try:
n=eval(a)
if type(n)!=type(1):
print('请确认您输入的是整数!')#保证输入是整数
else:
if n==1:
return False
for i in range(2,int(sqrt(n))+1):
if n%i==0:
return False
return True
except:
print('请确认您输入的是数字!')#保证输入是数字
while True:
a=input('请输入一个整数,键入“q”退出:')
if a=='q':
break
else:
print(is_prime(a))
5.3编写一个函数计算传入字符串中数字,字母,空格以及其他字符的个数。
def tongji():
str1=input('请输入一个字符串:')
zimu=shuzi=kongge=qita=0
for p in str1:
if 'a'<=p<='z' or 'A'<=p<='Z':
zimu+=1
elif '0'<=p<='9':
shuzi+=1
elif p==' 'or p==' ':
kongge+=1
else:
qita+=1
print('字母{},数字{},空格{},其他{}'.format(zimu,shuzi,kongge,qita))
tongji()
5.4编写一个函数,打印200以内的所有素数,以空格分割。
from math import sqrt
def is_prime():
for i in range(2,201):
a=1
for j in range(2,int(sqrt(i))+1):
if i%j==0:
a=a*0
else:
a=a*1
if a==1:
print(i,end=' ')
is_prime()
5.5编写一个函数,参数为一个整数n。利用递归获取斐波那契数列中的第n个数并返回。
def fb(n):
a,b=1,1
count=0
while(count!=n-2):
a,b=b,a+b
count+=1
return b
n=eval(input('您想返回第几个数:'))
print(fb(n))
第六章 组合数据类型
6.1英文字符频率统计。编写一个程序,对给定字符串中出现的a–z字母频率进行分析,忽略大小写,采用降序方式输出。
txt=input("请输入一段英文文本:")
txt=txt.lower()
count={}
for word in txt:
if word in "abcdefghijklmnopqrstuvwxyz":
count[word]=count.get(word,0)+1
items=list(count.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(len(items)):
word,count=items[i]
print("{0:<10}{1:>5}".format(word,count))
6.2中文字符频率统计。编写一个程序,对给定字符串中出现的全部字符(含中文字符)频率进行分析,采用降序方式输出。
txt=input("请输入一段文本:")
txt=txt.lower()
count={}
for word in txt:
#if word in "abcdefghijklmnopqrstuvwxyz":
count[word]=count.get(word,0)+1
items=list(count.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(len(items)):
word,count=items[i]
print("{0:<10}{1:>5}".format(word,count))
#首先:‘我的{0}叫{1}’.format(name,jack),大括号里的数字,表示的是位置,也就是0对应的name,1对应的jack。同理,题中0对应的是Word,1对应的是count。
#其次,冒号是引导符,后面跟的是格式控制方法。<表示左对齐,>表示右对齐,数字表示宽度。同理,题中<10表示左对齐,并占10个位置,>5表示右对齐,占5个位置。
6.3随机密码生成。编写程序在26个字母大小写和9个数字组成的列表中随机生成10个8位密码。
import random
txt='1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
the_list=list(txt)
for i in range(10):
password=''
for j in range(8):
password+=random.choice(the_list)
print(password)
6.5重复元素判定续。利用集合的无重复性改编上一个程序,获得一个更快更简洁的版本。
def test(lis):
tem=set(lis)
if len(tem)<len(lis):
return True
else:
return False
def getlist():
lis=list(input("请输入判定元素,回车表示结束:"))
print(test(lis))
getlist()
既然更快更简洁了那6.4就不要了哈哈哈
第七章 文件和数据格式化
7.1输入一个文件和一个字符,统计该字符在文件中出现的次数。
def countstr(filename,str1):
filenames=filename+".txt"
f=open(filenames,'r')
count=0
for line in f:
for i in line:
if i==str1:
count+=1
print("'{}'字符在'{}'中出现的次数是'{}'".format(str1,filename,count))
def main():
filename=input("请输入文件名称:")
str1=input("请输入需要统计的字符:")
countstr(filename,str1)
main()
7.2假设有一个英文文本文件,编写一个程序读取其内容并将里面的大写字母变成小写字母,小写字母变成大写字母。
def transform(filename):
file=filename+".txt"
f=open(file,"r+")
fn=open("{}转化后.txt".format(filename),"w")
for line in f:
for word in line:
if word in "qwertyuiopasdfghjklzxcvbnm":
word=word.upper()
elif word in "QWERTYUIOPASDFGHJKLZXCVBNM":
word=word.lower()
fn.write(word)
f.close
fn.close
def main():
filename=input("请输入文件名称:")
transform(filename)
main()
7.3编写一个程序,生成一个10*10的随机矩阵并保存为文件(空格分隔行向量,换行分隔列向量),再写程序将刚才保存的矩阵文件另存为CSV格式,用Excel或文本编辑器打开看看结果对不对。
import random
def s_txt(low,high,txtname):
f=open("{}.txt".format(txtname),"w")
for line in range(10):
word=""
for row in range(10):
word=word+str(random.randrange(low,high))+" "
f.write(word+"\n")
f.close()
def s_csv(txtname,csvname):
f1=open("{}.txt".format(txtname),"r")
f2=open("{}.csv".format(csvname),"w")
for line in f1:
after=line.replace(" ",",")
f2.write(after)
f1.close()
f2.close()
def main():
low,high=eval(input("请输入随机数下限low、上限high,并用逗号隔开:"))
txtname=input("请输入txt文件名:")
s_txt(low,high,txtname)
csvname=input("请输入csv文件名:")
s_csv(txtname,csvname)
main()
7.5编写一个程序,要求能够将元素为任意Python支持的类型(包括含有半角逗号的字符串)的列表转储为CSV,并能够重新正确解析为列表。
def save_csv(ls, fname):
# 向列表中逐个添加元素
value = input('请向列表总添加一个元素:')
while value != '':
ls.append(value)
value = input('请向列表总添加一个元素:')
print('您输入的列表为:{}'.format(ls))
# 若元素中有半角逗号,将其替换成点
for i in range(len(ls)):
if ',' in ls[i]:
ls[i] = ls[i].replace(',', '.')
file_csv = open('{}.csv'.format(fname), 'w', encoding='utf-8')
file_csv.write(','.join(ls) + '\n')
file_csv.close()
print('恭喜!已成功保存<{}.csv>文件!'.format(fname))
def read_csv(lt, fname):
f = open('{}.csv'.format(fname), 'r', encoding='utf-8')
lt = f.read().strip('\n').split(',')
# 将替换后的点换成半角逗号
for i in range(len(lt)):
if '.' in lt[i]:
lt[i] = lt[i].replace('.', ',')
f.close()
print('<{}.csv>文件读取中...'.format(fname))
print(lt)
def main():
ls = []
fname = input('请将列表文件命名:')
save_csv(ls, fname)
lt = []
read_csv(lt,fname)
main()
完结撒花
更多推荐
所有评论(0)