编写python程序计算下面各表达式的值 根号派2+3_Python练习程序(持续更新)

1、九九乘法表

第一种写法,缺陷:每行之后多出一个空格

#!/usr/bin/python3

#-*- coding: UTF-8 -*-# author by :lukyfor i in range(1, 10):for j in range(1, i+1):

print('{}*{}={}\t'.format(j, i, i * j), end='')

print()

九九乘法表1

修改后可去除末尾的空格。

#!/usr/bin/python3

#-*- coding: UTF-8 -*-# author by :lukyfor i in range(1, 10):for j in range(1, i+1):if i ==j:

print('{}*{}={}'.format(j, i, i *j))else:

print('{}*{}={}'.format(j, i, i * j), end='\t')

九九乘法表2

2、求一个数是否为质数

输入任意数字求是否为质数

最基本的方法:

#!usr/bin/env python3

#-*- coding: UTF-8 -*-# author by : luky

num= int(input('请输入数字:'))for i in range(2, int(num*0.5)+1) :if num % i == 0:

print("不是质数")break

else:

print('{}是质数'.format(num))

代码

升级,缩小遍历范围,先除去偶数,遍历到根号下n即可

#!usr/bin/env python3

#-*- coding: UTF-8 -*-# author by : luky

num= int(input('请输入数字:'))if (num % 2 == 0 )and(int(num/2) )!= 1: #排除偶数,但不包含2

print("{}不是质数".format(num))else:for i in range(3, int(num**0.5)+1, 2): #遍历到根号下nif num % i == 0:

print("{}不是质数".format(num))break

else:

print("{}是质数".format(num))

算法改进后的代码

再升级,采用简单的筛子先除去一些数,采用6K的筛子,其中6K+2,6K+3,6K+4肯定不是质数,直接排除,然后只需要判断6K+1,6K+5是否为质数即可。

#!usr/bin/env python3

#-*- coding: UTF-8 -*-# author by : luky

#6N+1方法,实际上就是制作一个简单的筛子!!

num= int(input('请输入数字:'))

s= num % 6

if num < 6: #先罗列出较小数if(num==1 or num ==2 or num ==3 or num==5):

print('{}是质数'.format(num))else:

print('{}不是质数'.format(num))

elif s== 0 or s == 2 or s == 3 or s == 4: #用筛子先排除一部分

print('{}不是质数'.format(num))else:for i in range(3, int(num**0.5)+1, 2):if num % i == 0:

print('{}不是质数'.format(num))break

else:

print('{}是质数'.format(num))

再次改进

3、求一个数是否为质数

笨方法,从小到大开始计算。

#!/usr/bin/env python3

#-*- coding: utf-8 -*-#author by:luky

def max_g(x, y):if x >y:

min_num=yelse:

min_num=xfor i in range(1, min_num+1):if x % i ==0 and y % i ==0:

max_g=ireturnmax_g

x= int(input("请输入"))

y= int(input("请输入"))

print("{}和{}的最大公约数为:{}".format(x, y, max_g(x, y)))

代码1

升级,采用欧几里得算法,大大提高效率

算法依据定理:两个整数的最大公约数等于较小的数与两数相除的余数的最大公约数

#!/usr/bin/env python3

#-*- coding: utf-8 -*-#author by:luky

def max_g(x, y):while y != 0:

y , x= x % y , y #x, y = y, x %y,两个的执行结果一样,即同时执行。returnx

x= int(input("请输入:"))

y= int(input("请输入:"))

print("{}和{}的最大公约数为:{}".format(x, y, max_g(x, y)))

升级代码_欧几里得算法

4、日历

直接调用Python内置的库,方便简单。

#!usr/bin/env python3

#-*- coding: UTF-8 -*-#author by:luky

import calendar

years= int(input("请输入年份:"))

month= int(input("请输入月份:"))

print(calendar.month(years, month))

代码1

自己动手写的日历,显示的感觉没用标准库的好。在算法方面加了一些自己的想法

#!usr/bin/env python3

#-*- coding: UTF-8 -*-# author by:luky

date_day= {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}

date_month= {1: 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June',7: 'July', 8: 'August', 9: 'September', 10: 'October', 11: 'November', 12: 'December'}

date_week= {1: 'Mon', 2: 'Tue', 3: 'Wen', 4: 'Thu', 5: 'Fri', 6: 'Sat', 7: 'Sun'}

#找一个参考标准

ref_years= 2018ref_month= 1ref_week= 1#月份第一天是星期几

#判断是否是闰年

def if_LeapYear(year):if year % 100 == 0 and year % 400 == 0:returnTrue

elif year% 4 == 0:returnTrueelse:returnFalse

#当为闰年时修改天数

def chage_month2(year):globaldate_day

if_leap=if_LeapYear(year)if if_leap == 1:

date_day[2] = 29

else:

date_day[2] = 28#计算和参考时间的天数差

def get_week(year, month):globaldate_dayglobaldate_week

leap_num= 0num_day= 0s1= 4 - (year + 1) % 4s= 4 - ref_years % 4print(s1)if (year + month) >= (ref_years +ref_month):for i in range(ref_years + s, year, 4):if if_LeapYear(i) == 1 and s != 0:

leap_num+= 1chage_month2(ref_years)for i in range(ref_month, 13):

num_day= num_day +date_day[i]

chage_month2(year)for i in range(1, month):

num_day= num_day +date_day[i]

num_day= 365 * (year - ref_years - 1) + leap_num +num_day

print(leap_num)

print(num_day)

week= num_day % 7week= week +ref_weekif week > 7:

week= week - 7

else:for i in range(year + 1 + s1, ref_years + 1, 4):if if_LeapYear(i) == 1:

leap_num+= 1chage_month2(ref_years)for i in range(1, ref_month):

num_day= num_day +date_day[i]

chage_month2(year)for i in range(month, 13):

num_day= num_day +date_day[i]

num_day= 365 * (ref_years - year - 1) + leap_num +num_day

print(leap_num)

week= num_day % 7week= ref_week -weekif week < 1:

week= week + 7

returnweek

# 显示日历

def show(year, month):

week=get_week(year, month)

print(week)

print('\t\t{} {}'.format(date_month[month], year))

print('{}{}{}{}{}{}{}'.format('Mon', 'Tue', 'Wen', 'Thu', 'Fri', 'Sat', 'Sun'))

print(' ' + ' ' * (week - 1), end='')for i in range(1, date_day[month] + 1):if week == 7:

print(str(i)+ ' ' * (4 -len(str(i))))

elif week== 1:

print(' ' + str(i) + ' ' * (4 - len(str(i))), end='')else:

print(str(i)+ ' ' * (4 - len(str(i))), end='')

i+= 1week+= 1

if week == 8:

week= 1year= int(input("输入年份:"))

month= int(input("输入月份:"))

show(year, month)

日历2

5、找出文件中内容相同的行

先读取每一行,再逐次比较每行。

#!usr/bin/env python3

#-*- coding: UTF-8 -*-f1= open("C:/Users/luky/Desktop/1.txt", "r+")

f2= open("C:/Users/luky/Desktop/2.txt", "r+")

f3= open("C:/Users/luky/Desktop/3.txt", "w+")

all1=f1.readlines() # 先取出文件1中所有行取出

all2=f2.readlines() # 再取出文件2中所有行取出

f1.close()

f2.close()for l1 inall1:for l2 inall2:if l1.strip() ==l2.strip(): # 比较行中内容是否一样,strip()表示移除字符串头尾指定的字符(默认为空格)

f3.write(l2)else:continue

else:

pass

f3.close()

代码

注:strip([chars]):Python的字符串内置函数,作用:移除字符串头尾指定的字符(默认为空格)

6、反向读取文件

先将文件中的内容取出,在反向遍历输出即可,在取出文件的内容时,有以下两个函数:

file1.readlines() #表示将整个文本取出

file1.readline() #取出每一行的内容,一次只取一行

#!usr/bin/env python3

#-*- coding: UTF-8 -*-# author by:luky

file1= open('C:/Users/luky/Desktop/1.txt', 'r')

#list1=[] # 用一个空列表用于存放每行的内容

list1=file1.readlines() #读取每一行,一次性读完

i=len(list1)for j in list1[::-1]:

list1[i-1] =j.strip()

print(list1[i-1])

i-= 1file1.close()

使用readlines

file1 = open('C:/Users/luky/Desktop/1.txt', 'r')

list1=[] # 用一个空列表用于存放每行的内容whileTrue:

line=file1.readline()

list1.append(line.strip())if len(line) == 0:break

for l in list1[::-1]: # 反向遍历,然后依次读取出来

print(l)

file1.close()

使用readline

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值