第1题

题目
输入一个数n,对其进行分解质因数:(提示:先构造一个2到n的质数的列表,然后从列表中找到最大那个可以去整除n的数,如果这个数是x的话,那么x加入列表2:让n=n/x在列表中找到最大的能够找到可以真出n (新的)的数x (新的),加入列表2如此反复循环,直到n为1为止)。假设n=22142,求n的所有质因数的和p,如果p的值小于等于1000,则打印2的p次方,如果p大于1000,则打印p

  1. 解题思路:
  1. 求所有质数小于n所有质数列表a
  2. 遍历列表a,求出n的质数’因子,将其装入列表b
  3. 求出b列表元素和,与1000比较大小
  4. 得出最终的结论
  1. 用法补充
  1. join用法:
  1. 格式:a.join(b) a为字符串,b为全部元素为字符串的元组,集合或列表
  2. 功能:遍历每一个元素,并按顺序用a字符串将它们连起来
  1. map用法:
  1. 格式:map(a,b) a表示要将元素转换的类型,b表示要转换的元组,集合或列表
  2. 功能:元组,集合,列表将每一个元素执行一定的操作
  3. 补充:如果要变成原来的数据结构,需要强制类型转换

代码

a="x"         
 b1=[1,2,3,4]  #b中的元素是数值类型必须转换为字符串类型
 b=list(map(str,b1)) #对b1中的元素执行str(b1[i]),强制类型转换的操作
 a.join(b)

结果为:

python怎么把input的字符串变为数字_python


解法1:间接法

  1. 说明: 一个数是否为x质数,只需要从2开始一直判断到x的平方根加1
import math
x=input("请输入整数")#输入一个数字
n=int(x)
zhishulist=[]
for i in range(2,n+1):#从2开始遍历,一直到n
    flag=1  #flag作为一个判断符,判断i是否是因数
    for j in range(2,int(math.sqrt(i)+1)):#优化:最大值为开方数加1
        if i%j==0:#判断是否可以除尽,除尽则证明为非质数
            flag=0
            break
    if flag==1:#如果为质数加入列表
        zhishulist.append(i)
print(zhishulist)
zhishulist.reverse()#将列表倒置  由最大的开始除
yinzilist=[]
while n!=1:#n=1时表示
    for i in zhishulist:#遍历
        if n%i==0:#如果余数为0
            yinzilist.append(i)#将因数加入到列表
            n=n/i#除以最大因数
            break
print(yinzilist)#打印因数表
p=sum(yinzilist)

if p>1000:
    print("p=%d"%p)
else:
    print("2**%d=%d"%(2**p,p))

解法2:直接法

  1. 说明:最小不可分解的因数是质因数,可以直接进行计算
x=eval(input("请输入一个整数"))#输入一个整数
y=x
li=[]
for i in range(2,int(x/2+1)):  #由于从2开始一直到n,所以x的最大因子不超过int(x/2+1,当然最好为int(math.sqrt(x)+1))
    if(x%i==0):  #将因数加入列表中
        li.append(i)
        x=x/i         #对x分解后,继续求x的因数
        while(x%i==0):      #如果判断当前的i是否还是x的因数,是则继续加入,循环
            li.append(i)
            x=x/i
if li==[]:    #如果没有因数,就只有1和它本身
    li=[1,y]  
  
#打印输出一个因式分解的等式
p=list(map(str,li))   #将每一个元素由整型变成字符串类型
print("%d="%y+"x".join(p))  #在p的每一个字母间隔符之间加入一个符号,作为一个元素
print(p)  #打印因式
print(li)  


if sum(li)>1000:
    print(sum(li))
else:
    print(2**sum(li))

第2题

题目
输入一个日期(例如2008 01 12),求星期几,距离公元1年1月1日多少天,距离今天多少天
计算1750年4月2日到今天距离多天(正数),

  1. 用法补充
  1. datetime.datetime( )用来设置日期
  2. datetime.datetime.today获取今天的日期
  3. 如果d=datetime.datetime(2019,9,28)
    那么d.tuple()表示用元组的形式返回日期
    d.tuple()[:]表示在对其切片
    d.tuple()[:][i]表示返回具体的某一个部分
print("第一问")
import datetime
x=input("请输入一个具体日期")
y=x.split()
d1=datetime.datetime(int(y[0]),int(y[1]),int(y[2]))
print("当天是星期%d"%(d1.timetuple()[:][6]+1))#对应的日期为第7个切片断,所以是[6],而且是从0开始记录星期一,所以要对应加1**加粗样式**

print("第二问")
d2=datetime.datetime.today()
d3=datetime.datetime(1,1,1)
d4=d2-d3
print("公元1年1月1日,距离今天一共有%d"%d4.days)#d4.days表示以天数为衡量单位

print("第三问")
d5=datetime.datetime(1750,4,2)
d6=d2-d5
print("公元1750年4月2日,距离今天一共有%d"%d6.days)

第3题

题目
输入一个字符串,然后提示输入1,2,3,4,5,6.
如果输入1,则将字符串大写(全体输出),
如果输入2,将字符串小写输出,
如果输入3,将字符串反输出序(例如一二三,则输出三二一)。
如果输入4,则构造回文( 例如输入一二三,则输出一二三三二一),
如果输入5则统计字符串中出现的字母的频率
如果输入6则退出
如果输入其他字母,则提示输入错误

  1. 相关用法:
    1. x.upper():将字符串x中所有小写字母变成大写
    2. x.lower():将字符串x中所有大写字母变成小写
    3. x[::-1]:将字符串x用切片间隔为-1,将字符串x倒序
    4. di.get(i,0):获取字典di中i键对应的值,如果没有返回0
    5. di.keys():表示字典中所有键的集合
import string
x=input("请输入一个字符串")
print('''请输入1到6中的一个数字,执行以下功能:
          1.将字符串大写输出
          2.将字符串小写输出
          3.将字符串反序输出
          4.构造回文字符串输出
          5.统计字符串中出现字母的频率
          6.退出
          ''')
k=input("您输入的数是:")
k=int(k)

di={}
if   k==1:
    print("返回结果为:%s"%x.upper())
elif k==2:
    print("返回结果为:%s"%x.lower())
elif k==3:
    print("返回结果为:%s"%x[::-1])
elif k==4:
    print("返回结果为:%s"%(x+x[::-1]))#回文=正序的x+倒序的x
elif k==5:
    for i in x:
        if i in string.ascii_letters:  #ascii_letter表示含有所有字母的字符串
            di[i]=di.get(i,0)+1     #统计每个字母出现的次数
    for j in di.keys():           #计算每个字母的频率
        di[j]=di[j]/len(x)
        print("%s的频率为%f"%(j,di[j]))
elif k==6:
    print("退出成功")
else:
    print("输入错误")

第四题

爬取www.baidu.com,找出出现次数最多和最少的字母

import urllib.request  
r=urllib.request.urlopen("http://www.baidu.com")  #打开网页
s1=str(r.read())   #读取其中的字符并转化为字符串类型
di={}
for i in set(s1):         
    di[s1.count(i)]=i     #记录键为出现的次数,值为字符
klist=list(di.keys())     #对键的集合进行排序
klist.sort(reverse=True)  #倒序排列(大的放在前面)
print(di)
print(klist[0],di[klist[0]])   #打印出现次数最多的键值对
print(klist[len(klist)-1],di[klist[len(klist)-1]])   #打印出现次数最少的键值对