8.1
(a)C语句被执行
(b)D语句被执行
(c)B语句被执行
8.2循环
def jishu():
f = int(input('please input start number'))
t = int(input('please input least number'))
i = int(input('plaese input increment number'))
j = f
while j <= (t-i):
#为了保证j的输出不会大于t,因此限定条件是j <= t-i
j += i
print(j)
jishu()
8.3 range()
(a)range(10)
(b)range(3,19,3)
(c)range(-20,870,220)
8.4素数。
def isprime():
x = int(input('please input a number'))
y = int(x/2)
#把输入的数值除以2,舍弃后面的小数点
while y > 1:
if x % y == 0:
print(False)
break
else:
y -= 1
if y == 1:
print(True)
isprime()
8.5约数
def getfactors(num):
a = [num]
b = num
c = int(b / 2)
#从输入数的一半开始计算
while c >= 1:
if b % c == 0:
a.append(c)
c -= 1
print(a)
getfactors(50)
8.6结合上面2个函数,来给出任意一个数的素因子。
def isprime(num):
y = int(num/2)
#把输入的数值除以2,舍弃后面的小数点
while y > 1:
if num % y == 0:
return False
break
else:
y -= 1
if y == 1:
return True
def getfactors(num):
a = [num]
b = num
#从输入数的一半开始计算
c = int(b / 2)
while c >= 1:
if b % c == 0:
a.append(c)
c -= 1
**加粗样式** return a
def suyinzi(num):
a = isprime(num)
b = []
if a ==True:
#当要处理的数为素数时,返回1和他本身
print(1,num)
else:
c = int(num)
while c >=2:
#当被处理的数一直大于2时,一直进行找因数的循环
for i in range(1,int(c+1)):
#历遍从1到c的数,添加因数
if c%i == 0:
#如果有数能被整除,并且是素数,那么就在列表中增加这个数
if isprime(i):
b.append(i)
c /= i
print(b)
suyinzi(63)
8.7完全数
def isperfect(num):
a = []
b = num
c = int(b / 2)
while c >= 1:
if b % c == 0:
a.append(c)
c -= 1
if sum(a) == num:
print('good')
else:
print('bed')
isperfect(8)
8.8阶乘,指定N,返回N!。
def jiecheng(num):
if num == 1:
#基线条件是num=1时
return 1
else:
#递归条件是num大于1时
return num*jiecheng(num-1)
print(jiecheng(6))
8.9 斐波那契数列。下一个值是序列中前2个值之和。
def feibo(num1,num2):
a = [num1,num1]
for i in range(2,num2):
#循环从第三个数开始添加到第num2个数
b=a[i-1]+a[i-2]
a.append(b)
print(a[num2-1])
#第n个数在列表的索引为n-1
print(a)
feibo(1,10)
8.10文本处理。统计一句话中的元音,辅音以及单词的个数。附加题:编写处理这些特殊情况的代码。
由于我英文有点差,没看懂题意,此题答案转载自https://blog.csdn.net/czd327917086/article/details/6691435
def counteng(string):
'''8-10 统计一下一句话中元音,辅音,和单词的个数,忽略元音和辅音等特殊情况'''
# 所谓特殊情况就是某些单词用元音开头,但是不发元音,有些单词辅音开头但是发元音
# 如果要处理这些特殊单词,那么需要有特殊单词表或者规律,这个我就不做了,不难实现
# 思路:匹配单词,如果符合特殊规则或者单词表,那么元音[辅音]数量相应减1或者加1
# 我这里只要处理 a,e,i,o,u的个数即可
# 所谓单词数,特别是英文中,比较容易,只要用空格分隔就可
words = len(string.split())
string=string.upper()#换成大写,方便一点
yuans = fus = 0
# 统计元音数
for i in string:
# 只处理那啥字母,不处理特殊符号
# 大写元音的 ord 是65,69,73,79,85
# 大写字母即ord 65-90
n = ord(i)
if n in xrange(65,91):
if n in [65,69,73,79,85]:
yuans+=1
else:
fus+=1
return [yuans,fus,words]
8.11文本处理。
def nameshuru():
names = []
e = 0
while True:
a = str(input('''please input name,if you want quit input q\n'''))
b = a.strip()
#先把名字首尾的空格去掉
c = b.split(',',1)
#把名字根据逗号分成2部分
if c[0] == 'q':
#如果输入了q,那么退出输入
break
else:
if len(c) == 1:
#如果c长度为1,那么就是输入了空格,把名字根据空格重新隔开,然后再颠倒相加
e += 1
#错误+1
c = b.split(' ',1)
d = c[1]+','+c[0]
names.append(d)
else:
d = b
names.append(d)
names.sort()
print(names)
nameshuru()
8.12位操作。
def out():
'''8-12 输入整数1,整数2,显示一张表格,包括十进制,二进制,八进制,十六进制和ASCII'''
# ASCII中 0-32 127 这34个是控制符,不用输出
# 超过127的数字也不用输出,因为没有对应的ASCII
num1 = int(raw_input('Enter begin value:').strip())
num2 = int(raw_input('Enter end value:').strip())
# 这里的dl,bl,ol,hl,al表示每一列的宽度
dl,bl,ol,hl,al = \
len(str(num2))+5,len(bin(num2))+3,len(oct(num2))+4,len(hex(num2))+3,5
# 输出标题,居中
print 'DEC'.center(dl),'BIN'.center(bl),'OCT'.center(ol),'HEX'.center(hl),'ASCII'.center(al)
# 输出横线
print '-'*(sum([dl,bl,ol,hl,al])+5)
ascii = ''
for i in xrange(num1,num2+1):
# Ascii 只有在这个区间内才显示
if 32<i<127:ascii = chr(i)
print str(i).center(dl),bin(i)[2:].center(bl),oct(i)[1:].center(ol),hex(i)[2:].center(hl),ascii.center(al)
ascii=''
此题答案转载自https://blog.csdn.net/czd327917086/article/details/6691435
8.13程序执行性能。再8.5.2节中,我们介绍了2种迭代序列方法:(1)通过序列项(2)通过序列索引遍历。我们指出后一种方法在序列很长的时候性能不佳,你认为他的原因是什么?
因为它可能重复计算了序列的长度for i in range(list),由于每次迭代都要重新计算一次序列长度,所以消耗的时间变多了,而序列项不存在这样的问题。