函数练习

1. 编制一个返回值为bool型的函数isPrimer(),用于判断参数是否为素数;

代码:

def isPrimer(n):
    for i in range(2, n):
        if not n % i:
            return False
            break
    else:
        return True

print(isPrimer(int(input())))

运行结果:

2. 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编程序计算共有多少种不同的走法?需求: 编制一个返回值为整型的函数Fib(n),用于获取n阶台阶的走法;


提示:(fib数列)
    设n阶台阶的走法数为f(n)。如果只有1个台阶,走法有1种(一步上1个台阶),即f(1)=1;如果有2个台阶,走法有2种(一种是上1阶,再上1阶,另一种是一步上2阶),即f(2)=2;当有n个台阶(n>3)时,我们缩小问题规模,可以这样想:最后是一步上1个台阶的话,之前上了n-1个台阶,走法为f(n-1)种,而最后是一步上2个台阶的话,之前上了n-2个台阶,走法为f(n-2)种,故而f(n)=f(n-1)+f(n-2)。

代码:

def fib(n):
    if n == 1:
        all = 1
    elif n ==2:
        all = 2
    else:
        all = fib(n-1)+fib(n-2)
    return all

print(fib(int(input('台阶数:'))))

运行结果:

3. 算法案例的拓展:
    
    1). 求满足条件n=a!+b!+c!的所有三位数n并输出,要求用自定义函数实现求阶乘。

代码:

def factorial(a):
    if a == 0:
        return 0
    fac = 1
    for i in range(1, a + 1):
        fac *= i
    return fac


def isComp(n):
    sum = 0
    for i in str(n):
        sum += factorial(int(i))
    if sum == n:
        return True
    else:
        return False

for n in range(100, 1000):
    if isComp(n):
        print(n)

运行结果:

    2). 输出1000以内的所有完全数;

代码:

def isPerfect(m):                              
    li = [s for s in range(1, m) if not m % s] 
    if m == sum(li):                           
        return True                            
    else:                                      
        return False                           

for n in range(1, 1001):           
    if isPerfect(n):               
        print(n)                   

运行结果:

    3). 输出1000以内的所有素数;

代码:

def isPrime(p):                               
    for i in range(2, p):                     
        if not p % i:                         
            return False                      
    else:                                     
        return True                           
                                              
for p in range(1,1
    if isPrime(p):
        print(p)  

运行结果:

    4). 输出10000以内的所有回文数;

代码:

def isPalindrome(h):                     
    if str(h) == str(h)[::-1]:           
        return True                      
    else:                                
        return False                     
                                         
for h in range(1, 10001):              
    if isPalindrome(h):                
        print(h)                       

运行结果:

    5). 输出输出10000以内的所有回文素数(提醒:某数是素数后再判断是否也是回文数。);

代码:

def isPrime(p):                                 
    for i in range(2, p):                       
        if not p % i:                           
            return False                        
    else:                                       
        return True                             
                                                
                                                
def isPalindrome(h):                            
    if str(h) == str(h)[::-1]:                  
        return True                             
    else:                                       
        return False                            

for i in range(1,10001):                                     
    if isPalindrome(i) and isPrime(i):                       
        print(i)                                             

运行结果:

    ** 总结:
    此类题目的共有特征是,需要考察一定范围内的数字符合某种特定的条件,从大的框架讲,就需要逐个考察相应范围内的每一个数字。因此,程的顶层结构是:
    """
    for i in range(下限, 上限+1):
        为构造条件进行相关的计算;
        if(条件成立) 输出符合要求的结果
    """

4. 选人:1班和2班两个班,1班同学的学号为1-41,2班同学的学号为42-84,现在每个班要抽签确定5名同学去参加组织的Linux挑战大赛,请编程完成这个“抽签”的工作。
编制一个返回值为列表的函数getId(start=1, end=40, count=5),用于获取参加比赛的学生学号;    

代码:

import random

def getId(start=1, end=40, count=5):
    li = [random.randint(start, end) for i in range(count)]
    return li

print('一斑:', getId(1, 41, 5))
print('二班:', getId(42, 84, 5))

运行结果:

打地鼠游戏:

代码:

import random

def beat():
    for i in range(5):
        n = int(input('洞口:'))
        mouse = random.choice([1,2,3,4,5])
        if n == mouse:
            print('you got it')
            break
        else:
            print('try again')

beat()

运行结果:

 

打字游戏:

代码:

def per(orginStr, userStr):
    correct = 0
    if len(orginStr) < len(userStr):
        return '输入超出范围。'

    else:
        for i in zip(orginStr, userStr):
            if i[0] == i[1]:
                correct += 1
        per = 100*(correct/len(orginStr))
        return '%.2f%%' %per

print(per('hello', 'helle'))

运行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编写Python函数练习题可以帮助您提高对Python函数的理解和运用能力。以下是一些Python函数练习题的示例: 1. 编写一个函数,接受用户输入的两个数字,并返回它们的和。您可以使用下面的代码作为参考: ```python def add_numbers(a, b): return a + b num1 = int(input("请输入第一个数字: ")) num2 = int(input("请输入第二个数字: ")) result = add_numbers(num1, num2) print("两个数字的和为:", result) ``` 2. 编写一个函数,接受用户输入的字符串,并将其中的字符倒序输出,但保留标点符号的位置不变。例如,将字符串"I enjoy reading!"经过函数调用后变为"!gnidaer yojne I"。您可以使用下面的代码作为参考: ```python def reverse_string(string): punctuation = ['!', ',', '.', '?'] # 标点符号列表 new_string = '' for i in range(len(string)): if string[i in punctuation: # 如果字符是标点符号,则保持位置不变 new_string += string[i] else: new_string += string[len(string)-i-1 # 其他字符倒序输出 return new_string user_input = input("请输入一个字符串: ") result = reverse_string(user_input) print("倒序输出后的字符串为:", result) ``` 3. 编写一个函数,接受用户输入的一个数字n,然后输出小于等于n的所有H(n)值。H(n)是指将一个数的各个数位的平方相加,然后再重复这个过程,直到最后得到的数字是1或者循环结束。您可以使用以下代码作为参考: ```python def calculate_hn(n): hn_values = [] for i in range(n+1): num = i while num != 1 and num != 4: # H(n)的循环结束条件是1或者循环结束 num = sum(int(digit)**2 for digit in str(num)) if num == 1: hn_values.append(i) return hn_values user_input = int(input("请输入参数n: ")) result = calculate_hn(user_input) print("H(n)小于等于参数n的所有值为:", result) ``` 4. 编写一个函数,实现折半查找。折半查找是一种在有序列表中查找指定元素的方法,通过将列表分成两半并比较中间值来确定要查找的元素在哪一半中。您可以使用以下代码作为参考: ```python def binary_search(array, target): low = 0 high = len(array) - 1 while low <= high: mid = (low + high) // 2 if array[mid == target: return mid elif array[mid < target: low = mid + 1 else: high = mid - 1 return -1 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] target_number = int(input("请输入要查找的数字: ")) result = binary_search(numbers, target_number) if result != -1: print("数字在列表中的索引位置为:", result) else: print("数字不在列表中") ``` 希望这些示例可以帮助您开始练习Python函数。如果您有更多的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值