Python 的 random 模块包括一个函数 choice(data),可以从一个非空序列返回一个随机元素。Random模块还包含一个更基本的 randrange 函数,参数化类似于内置的 range 函数,可以在给定范围内返回一个随机数。只使用 randrange 函数,实现自己的 choice 函数。
1 2 3 4 5
from random import randrange def choice(data): return data[randrange(len(data)-1)]
print(choice([2**k for k in range(9)]))
C - 1.13
编写一个函数的伪代码描述,该函数用来逆置 n 个整数的列表,使这些以相反的顺序输出,并将该方法与可以实现相同功能的 Python 函数进行比较。
1 2 3 4 5 6 7 8 9 10 11 12
def resort(data): for i in data: if not isinstance(i,(int,float)): raise TypeError('elements must be numeric') #data.reverse() #return data #return data[::-1] return list(reversed(data))
data = [k for k in range(5)] print(data) print(resort(data))
def is_odd(data): for item in data: if not isinstance(item,int): raise TypeError('element must be numeric') a = [] for i in data: for j in data[data.index(i)+1:]: if i*j % 2 == 1 and i != j: a.append((i,j)) return a
a = [k for k in range(10)] print(is_odd(a))
C-1.15
编写一个 Python 函数,用来接收一个数字序列,并判断是否所有数字都互不相同。
1 2 3 4 5 6 7 8 9 10 11 12 13
def is_different(data): for item in data: if not isinstance(item,(int,float)): raise TypeError('element must be numeric') for i in data: for j in data[data.index(i) + 1:]: if i == j : return False
Python 的 random 模块包括一个函数 shuffle(data),它可以接受一个元素的列表和一个随机的重新排列元素,以使每个可能的序列发生概率相等。 random 模块还包括一个更基本的函数 randint(a, b),它可以返回一个 a 到 b (包括两个端点)的随机整数。只使用 randint 函数,实现自己的 shuffle 函数。
1 2 3 4 5 6 7 8 9 10 11 12
from random import * def my_shuffle(data): new =[] while len(data) > 0: a = randint(0,len(data)-1) new.append(data[a]) data.pop(a)
return new
data = [1,2,3,4,5] print(my_shuffle(data))
C-1.21
编写一个Python程序,反复从标准输入读取一行直到抛出 EOFError 异常,然后以相反的顺序输出这些行(用户可以通过键按 Ctrl + D 结束输入)。
1 2 3 4 5 6 7 8 9
def function(): a = [] while True: try: response = input("Please input:") a.append(response) except EOFError: for val in a[::-1]: print(val)
C-1.22
编写一个Python程序,用来接收长度为 n 的两个整型数组 a 和 b 并返回数组 a 和 b 的点积。也就是返回一个长度为 n 的数组 c,即 c[i] = a[i] ⋅ b[i], for i = 0, …, n-1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
def dot_product(data1,data2): for i in data1: if not isinstance(i,int): raise TypeError("element must be numeric")
for j in data2: if not isinstance(j,int): raise TypeError("element must be numeric")
if len(data1) != len(data2): raise KeyError("Their must have same length!")
new = [data1[i] * data2[i] for i in range(len(data1))]
return new a = [1,2,3,4,4] b =[2,3,9,8,4] print(dot_product(a,b))
C-1.23
给出一个 Python 代码片段的例子,编写一个索引可能越界的元素列表。如果索引越界,程序应该捕获异常结果并打印以下错误消息:“Don’t try buffer overflow attacks in Python!”
def is_Yuan(data): a = ['a','e','i','o','u'] number = 0 for i in data: if i in a: number += 1 return number data = 'wdefiojawn' num = is_Yuan(data) print(num)
import string def remove_mark(): pieces = [] reply = input("Please input something:") for k in reply: pieces.append(k) punctuation = string.punctuation for i in pieces: if i in punctuation: pieces.remove(i) a = ''.join(pieces) return a
print(remove_mark())
C-1.26
编写一个程序,需要从控制台输入 3 个整数 a、b、c,并确定它们是否可以在一个正确的算术公式(在给定的顺序)下成立,如“a + b = c” “a = b - c” 或 “a * b = c”。
1 2 3 4 5 6 7
def threeIntegers(): a = int(input("Please input three integers: ")) b = int(input("b:")) c = int(input("c:")) print('a+b=c 成立') if a+b ==c else print('a+b=c 不成立')
def solve(self,number): if number <= 2: raise ValueError("The number must bigger than 2!") if not isinstance(number,int): raise TypeError("The number must be an integer") self.division_num(number,0)
def division_num(self,number,num): if number < 2: print(num) return newNumber = number / 2 num+=1 self.division_num(newNumber,num)
def judge(self): a = float(input("You need to pay :")) b = float(input("Your money:")) if a == b: print("The business is finished !") elif a > b: raise ValueError("You don't have enough money!") else: self.change(b - a)
def change(self,number): par = [0.05,0.1,0.2,0.5,1.0,2.0,5.0,10.0,20.0,50.0,100.0] sum = float(number) i = len(par)-1 while i >= 0: if sum >= par[i]: n = int(sum // par[i]) change_m = n* par[i] sum = float("%.6f" %(sum-change_m)) if par[i] > 1: print("用了%d张%1.2f元纸币" %(n,par[i])) else: print("用了%d个%1.2f元硬币" %(n,par[i])) i -= 1
def Inuput(self): sequence =[] while 1: for i in range(len(sequence)): print(sequence[i],end='') print() print('*' * 20,end='\n') while 1: try: num = input("Please input with sapce (a + b):").split(" ") if num[0] == 'esc': # 用于清屏 sequence = self.clear(sequence) num = self.clear(num) elif num[0] == '=': result = self.calculate(sequence[0],sequence[1],sequence[2]) sequence = self.clear(sequence) num = self.clear(num) num += str(result) else: f = float(num[0]) k = float(num[2]) except ValueError: print("It's not a number!Please enter again!") else: break sequence = sequence + num
def clear(self,data): # 用于清屏 data = [] return data
def calculate(self,num1,mark,num2): num1 = float(num1) num2 = float(num2) if mark == '+': return num1+num2 elif mark == '-' : return num1-num2 elif mark == '*' : return num1*num2 elif mark == '-' : return num1/num2
if __name__ == '__main__': hand_held_calculator().Inuput()
P-1.34
一种惩罚学生的常见方法是让他们将一个句子重复写很多次。编写独立的 Python 程序,将以下句子 “I will never spam my friends again.” 写 100 次。程序应该对句子进行计数,另外,应该有 8 次不同的随机输入错误。
1 2 3 4 5 6 7 8
def random_mistake(): count = 1 string = "I will never spam my friends again." while count < 11: temp = input("Now : {} Please write phrase: \n".format(count)) if temp == string: count +=1 print("Finished!")
P-1.35
生日悖论是说,当房间中人数 n 超过 23 时,那么该房间里有两个人生日相同的可能性是一半以上。这其实不是一个悖论,但许多人觉得不可思议。设计一个 Python 程序,可以通过一系列随机生成的生日的实验来测试这个悖论,例如可以 n = 5, 10, 15, 20, …, 100 测试这个悖论.
def function(): str = input("Please input something :").split(" ") keys = list(set(str)) result = dict(zip(keys,[0]*len(keys))) for i in str: result[i] += 1 return result
print(function())
重点难点
使用两个print打印一行数据,更改print结尾参数:
print(‘’,end = ‘ ‘)
1 2 3
print (str.split( )) # 以空格为分隔符 print (str.split('i',1)) # 以 i 为分隔符 print (str.split('w')) # 以 w 为分隔符
split()通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num+1 个子字符串
str = " this is string example....wow!!! "; print( str.lstrip() ); str = "88888888this is string example....wow!!!8888888"; print( str.lstrip('8') ); 以上实例输出结果如下: this is string example....wow!!! this is string example....wow!!!8888888
rstrip()删除 string 字符串末尾的指定字符(默认为空格).
1 2 3 4 5 6 7
str = " this is string example....wow!!! " print (str.rstrip()) str = "*****this is string example....wow!!!*****" print (str.rstrip('*')) 以上实例输出结果如下: this is string example....wow!!! *****this is string example....wow!!!