Python练习之第四弹

1、求一个十进制的数值的二进制的0、1的个数


输入:

def ten_to_two(num):
    '''
    将十进制数据转换为二进制,并且统计其中的0和1的数量
    '''
    binary_num = bin(num)
    ls = list(str(binary_num))[2:]
    count_0 = 0
    count_1 = 0
    for i in ls:
        if int(i) == 0:
            count_0 += 1
        else:
            count_1 += 1
    return count_0, count_1


num = int(input('请输入一个整数:'))
print(f'将{num}转换为二进制为:{bin(num)[2:]}')
print(f'其中0的数量为:{ten_to_two(num)[0]}个')
print(f'其中1的数量为:{ten_to_two(num)[1]}个')

输出:


2、实现一个用户管理系统(要求使用容器保存数据)
[{name: xxx, pass: xxx, ……},{},{}]


输入:

person_list = []
  
  

def show_menu():
  print("=================== 用户管理系统V1.0 ===================")
  print("1. 注册用户")
  print("2. 删除用户")
  print("3. 修改用户信息")
  print("4. 查询用户信息")
  print("5. 显示所有用户信息")
  print("6. 退出")
  
  

def add_person():

  name = input("请输入的您的姓名:")
  age = input("请输入的您的年龄:")
  sex = input("请输入的您的性别:")
  
  person_dict = {"name":name, "age": age, "sex": sex}

  person_list.append(person_dict)
  print("注册成功!")
  print("\n")
  

def show_all_person():
  
  for index, person_dict in enumerate(person_list):
    
    person_no = index + 1
    print("编号: %d 姓名: %s 年龄: %s 性别: %s" % (person_no,
                        person_dict["name"],
                        person_dict["age"],
                        person_dict["sex"]))
  print("\n")
  

def remove_person():
  
  person_no = int(input("请输入您要删除用户的编号:"))

  index = person_no - 1
  
  if 0 <= index < len(person_list):
    
    person_dict = person_list.pop(index)
    print("%s, 删除成功!" % person_dict["name"])
    print("\n")
  else:
    print("请输入合法的编号!")
    print("\n")
  
  

def modify_person():
  
  person_no = int(input("请输入您要修改用户的编号:"))
  
  index = person_no - 1
  
  if 0 <= index < len(person_list):
   
    modify_person_dict = person_list[index]
    
    modify_person_dict["name"] = input("请输入您修改后的姓名:")
    modify_person_dict["age"] = input("请输入您修改后的年龄:")
    modify_person_dict["sex"] = input("请输入您修改后的性别:")
    print("修改成功!")
    print("\n")
  else:
    print("请输入您的合法编号!")
    print("\n")
  

def query_person():
 
  name = input("请输入要查询用户的姓名:")
  
  for index, person_dict in enumerate(person_list):
    if person_dict["name"] == name:
     
      person_no = index + 1
     
      print("编号: %d 姓名: %s 年龄: %s 性别: %s" % (person_no,
                          person_dict["name"],
                          person_dict["age"],
                          person_dict["sex"]))
      print("\n")
      break
  else:
    
    print("对不起,您查找的用户信息不存在!")
    print("\n")
  
  

def start():
  while True:
    
    show_menu()
    
    menu_option = input("请输入您要操作的功能选项:")
    
    if menu_option == "1":
      print("\n")
      add_person()
    
    elif menu_option == "2":
      print("\n")
      remove_person()
    elif menu_option == "3":
      print("\n")
      modify_person()
    elif menu_option == "4":
      print("\n")
      query_person()
    elif menu_option == "5":
      print("\n")
      show_all_person()
    elif menu_option == "6":
      print("期待您下次使用~")
      break
  
  
start()

输出:

 

 

 

 


3、求1~100之间不能被3整除的数之和

def func(num):
    '''
    求不能被3整除的数
    '''
    if num % 3 == 0:
        return False
    else:
        return True
 
sum_x = 0
for x in range(1,101):
    if func(x):
        sum_x += x
print(f'1~100之间不能被3整除的数之和为:{sum_x}')



4、给定一个正整数N,找出1到N(含)之间所有质数的总和:

def isPrime(x):
    """
    判断是否为质数
    """
    if x == 1:
        return False
    for i in range(2,x//2 + 1):
        if x % i == 0:
            return False
    return True
 
N = int(input('请输入一个正整数N:'))
sum_Prime = 0
for x in range(1,N+1):
    if isPrime(x):
        sum_Prime += x
print(f'1到N(含)之间所有质数的总和为:{sum_Prime}')



5、计算PI(公式如下:PI=4(1-1/3+1/5-1/7+1/9-1.......)
 

def PI():
    '''
    计算PI(公式如下:PI=4(1-1/3+1/5-1/7+1/9-.......)
    '''
    n = 0
    sum_PI = 0
    for i in range(1,10000,2):
        sum_PI += ((-1)**n)*(1/i)
        n += 1
    PI = 4*sum_PI
    return PI
 
print(f'PI = {PI()}')



6、给定一个10个元素的列表,请完成排序(注意,不要使用系统api)

def selection_sort(ls=[]):
    '''
    选择排序法
    '''
    for i in range(len(ls)):
        index_min = i
        for j in range(i+1,len(ls)):
            if ls[index_min] > ls[j]:
                index_min = j
        ls[index_min],ls[i] = ls[i],ls[index_min]
    return ls
 
ls = [23,5,12,67,64,87,3,1,2,28]
print(f'原列表为:{ls}')
print(f'选择排序法排序后的列表为:{selection_sort(ls)}')



7、求 a+aa+aaa+.......+aaaaaaaaa=?其中a为1至9之中的一个数,项数也要可以指定。

def one_sum(a,n):
    '''
    求 a + aa + aaa +.......+ aaaaaaaaa = ? (其中a为1至9之中的一个数,项数可以指定)
    '''
    sum_a = 0
    for i in range(1,n+1):
        num = int(f'{a}'*i)
        sum_a += num
    return sum_a
 
a = int(input('请输入一个在区间[1,9]的正整数:'))
n = int(input('请输入指定的项数:'))
print(f'所求多项式的和为:{one_sum(a,n)}')



8、合并两个有序数组,合并后还是有序列表

def selection_sort(ls=[]):
    '''
    选择排序法
    '''
    for i in range(len(ls)):
        index_min = i
        for j in range(i+1,len(ls)):
            if ls[index_min] > ls[j]:
                index_min = j
        ls[index_min],ls[i] = ls[i],ls[index_min]
    return ls
 
ls_1 = [1,3,5,7,9]
ls_2 = [2,4,6,8,10]
print(f'原有序列表1为:{ls_1}')
print(f'原有序列表2为:{ls_2}')
ls_1.extend(ls_2)
print(f'合并后的有序列表为:{selection_sort(ls_1)}')



9、给定一个非负整数数组A,将该数组中的所有偶数都放在奇数元素之前

def before(ls=[]):
    '''
    将一个非负整数数组中的所有偶数都放在奇数元素之前
    '''
    for i in range(len(ls)):
        if ls[i] % 2 != 0:
            for j in range(i + 1, len(ls)):
                if ls[j] % 2 == 0:
                    ls[i], ls[j] = ls[j], ls[i]
                    break
    return ls


ls = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(f'原列表为:{ls}')
print(f'将偶数置于奇数前,列表变为:{before(ls)}')



10、给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),
可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数

def get_num_duplicate(nums):

	temp = 0
	for i in range(0, len(nums)):
		temp ^= i ^ nums[i]
	return temp

if __name__ == '__main__':
	nums = [1,2,8,3,4,5,6,7,7]
	d = get_num_duplicate(nums)
	print(f"数组中重复的是{d}")




11、找出10000以内能被5或6整除,但不能被两者同时整除的数(函数)

def math():
    ls = []
    for i in range(0,10001):
        flag = False
        if (i% 5 == 0 or i % 6 == 0) and i % 30 != 0:
            flag = True
        if flag:
            ls.append(i)
    print(ls)

math()



12、写一个方法,计算列表所有偶数下标元素的和(注意返回值)

def sum_even(ls):
	'''
    计算列表所有偶数下标元素的和
    '''
	sum_even = 0
	for i in range(0, len(ls), 2):
		sum_even += ls[i]
	return sum_even


if __name__ == '__main__':
	ls = [24,3602,3601,12138,99]
	print(f'{ls}中所有偶数下标元素的和为:{sum_even(ls)}')


作业(选做题):
某个人进入如下一个棋盘中,要求从左上角开始走,
最后从右下角出来(要求只能前进,不能后退),
问题:共有多少种走法?

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

def board(arr):
	if arr is None:
		return 0
	if len(arr) == 1 and len(arr[0]) == 1:
		return 1

	# 第一行只有一种走法
	for i in range(len(arr[0])):
		arr[0][i] = 1
	# 纵1
	for i in range(len(arr)):
		arr[i][0] = 1

	# 外层循环控制的纵轴
	for i in range(1, len(arr)):
		# 里层循环控制的横轴
		for j in range(1, len(arr[0])):
			arr[i][j] = arr[i - 1][j] + arr[i][j - 1]

	return arr[len(arr) - 1][len(arr[0]) - 1]



if __name__ == '__main__':
	ls = [
		[0, 0, 0, 0, 0, 0, 0, 0],
		[0, 0, 0, 0, 0, 0, 0, 0],
		[0, 0, 0, 0, 0, 0, 0, 0],
		[0, 0, 0, 0, 0, 0, 0, 0],
		[0, 0, 0, 0, 0, 0, 0, 0],
	]
	count = board(ls)
	print(f"从左上角开始走,到右下角,共有{count}种走法")


汉诺塔(选做题):

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值