鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: zltzlt

[已解决]Python:每日一题 258

[复制链接]
发表于 2019-10-19 09:37:20 | 显示全部楼层
不是特别理解这个题目的意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-19 11:06:48 | 显示全部楼层
god圣锋 发表于 2019-10-19 09:28
def print_num(numerator, denominator):
    conten = str(numerator/denominator)

输入 numerator = 1, denominator = 11 出错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 13:48:13 | 显示全部楼层
zltzlt 发表于 2019-10-19 11:06
输入 numerator = 1, denominator = 11 出错



  1. def print_num(numerator, denominator):
  2.     conten = str(numerator/denominator)

  3.     strerator, strminator = conten.split('.')
  4.     strminator = list(strminator)
  5.     copstrminator = strminator.copy()
  6.     setminator = list(set(strminator))

  7.     if len(setminator) < len(strminator)//2:
  8.         # print(setminator, copstrminator)
  9.         
  10.         for each_chr in setminator:
  11.             copstrminator.pop(copstrminator.index(each_chr))


  12.         strminator = ''.join(strminator).replace(''.join(copstrminator), '')
  13.         minator = ''.join(set(copstrminator))

  14.         return '\n\n{}.{}({})'.format(strerator, strminator.replace(minator, ''), minator)

  15.     else:
  16.         return str(conten)


  17. if __name__ == '__main__':
  18.     while True:
  19.         conten = input('\n\n.\w退出请输入两个整数按空格分隔:')

  20.         if conten == '.\w':
  21.             break

  22.         numtor, detor = conten.split(' ')
  23.         # int('as')

  24.         try:
  25.             print(print_num(int(numtor), int(detor)))
  26.         except ValueError as r:
  27.             print('输入错误', r)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 13:49:45 | 显示全部楼层
zltzlt 发表于 2019-10-19 11:06
输入 numerator = 1, denominator = 11 出错

嗯嗯我改了一下这下可以了



  1. def print_num(numerator, denominator):
  2.     conten = str(numerator/denominator)

  3.     strerator, strminator = conten.split('.')
  4.     strminator = list(strminator)
  5.     copstrminator = strminator.copy()
  6.     setminator = list(set(strminator))

  7.     if len(setminator) < len(strminator)//2:
  8.         # print(setminator, copstrminator)
  9.         
  10.         for each_chr in setminator:
  11.             copstrminator.pop(copstrminator.index(each_chr))


  12.         strminator = ''.join(strminator).replace(''.join(copstrminator), '')
  13.         minator = ''.join(set(copstrminator))

  14.         return '\n\n{}.{}({})'.format(strerator, strminator.replace(minator, ''), minator)

  15.     else:
  16.         return str(conten)


  17. if __name__ == '__main__':
  18.     while True:
  19.         conten = input('\n\n.\w退出请输入两个整数按空格分隔:')

  20.         if conten == '.\w':
  21.             break

  22.         numtor, detor = conten.split(' ')
  23.         # int('as')

  24.         try:
  25.             print(print_num(int(numtor), int(detor)))
  26.         except ValueError as r:
  27.             print('输入错误', r)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-19 13:51:07 | 显示全部楼层

解答错误

输入:numerator = 2, denominator = 1
输出:"2.0"
预期结果:"2"
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 13:52:10 | 显示全部楼层
god圣锋 发表于 2019-10-19 13:49
嗯嗯我改了一下这下可以了



  1. def print_num(numerator, denominator):
  2.     conten = str(numerator/denominator)

  3.     strerator, strminator = conten.split('.')
  4.     strminator = list(strminator)
  5.     copstrminator = strminator.copy()
  6.     setminator = list(set(strminator))

  7.     if len(setminator) < len(strminator)//2:
  8.         # print(setminator, copstrminator)
  9.         
  10.         for each_chr in setminator:
  11.             copstrminator.pop(copstrminator.index(each_chr))


  12.         strminator = ''.join(strminator).replace(''.join(copstrminator), '')
  13.         minator = ''.join(set(copstrminator))

  14.         return '\n\n{}.{}({})'.format(strerator, strminator.replace(minator, ''), minator)

  15.     else:
  16.         return str(conten)


  17. if __name__ == '__main__':
  18.     while True:
  19.         conten = input('\n\n.\w退出请输入两个整数按空格分隔:')

  20.         if conten == '.\w':
  21.             break

  22.         numtor, detor = conten.split(' ')
  23.         # int('as')

  24.         try:
  25.             print(print_num(int(numtor), int(detor)))
  26.         except Exception as r:
  27.             print('输入错误', r)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 13:59:46 | 显示全部楼层
zltzlt 发表于 2019-10-19 13:51
解答错误

输入:numerator = 2, denominator = 1



  1. def print_num(numerator, denominator):
  2.     conten = str(numerator/denominator)

  3.     strerator, strminator = conten.split('.')
  4.     strminator = list(strminator)
  5.     copstrminator = strminator.copy()
  6.     setminator = list(set(strminator))

  7.     if len(setminator) < len(strminator)//2 and len(setminator) > 1:
  8.         # print(setminator, copstrminator)
  9.         
  10.         for each_chr in setminator:
  11.             copstrminator.pop(copstrminator.index(each_chr))


  12.         strminator = ''.join(strminator).replace(''.join(copstrminator), '')
  13.         minator = ''.join(set(copstrminator))

  14.         return '\n\n{}.{}({})'.format(strerator, strminator.replace(minator, ''), minator)

  15.     else:
  16.         if len(setminator) <= 1:
  17.             return str(int(eval(conten)))
  18.         
  19.         return str(conten)


  20. if __name__ == '__main__':
  21.     while True:
  22.         conten = input('\n\n.\w退出请输入两个整数按空格分隔:')

  23.         if conten == '.\w':
  24.             break

  25.         numtor, detor = conten.split(' ')
  26.         # int('as')

  27.         try:
  28.             print(print_num(int(numtor), int(detor)))
  29.         except Exception as r:
  30.             print('输入错误', r)
复制代码


您再试一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-19 14:01:56 | 显示全部楼层

还是有错

输入:numerator = 1, denominator = 2
输出:"0"
预期结果:"0.5"
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 14:06:34 | 显示全部楼层
zltzlt 发表于 2019-10-19 14:01
还是有错

输入:numerator = 1, denominator = 2





  1. def print_num(numerator, denominator):
  2.     conten = str(numerator/denominator)

  3.     strerator, strminator = conten.split('.')
  4.     strminator = list(strminator)
  5.     copstrminator = strminator.copy()
  6.     setminator = list(set(strminator))

  7.     if len(setminator) < len(strminator)//2 and len(setminator) > 1:
  8.         # print(setminator, copstrminator)
  9.         
  10.         for each_chr in setminator:
  11.             copstrminator.pop(copstrminator.index(each_chr))


  12.         strminator = ''.join(strminator).replace(''.join(copstrminator), '')
  13.         minator = ''.join(set(copstrminator))

  14.         return '\n\n{}.{}({})'.format(strerator, strminator.replace(minator, ''), minator)

  15.     else:
  16.         if setminator[0] == '0':
  17.             return str(int(eval(conten)))
  18.         # print(setminator)
  19.         
  20.         return str(conten)


  21. if __name__ == '__main__':
  22.     while True:
  23.         conten = input('\n\n.\w退出请输入两个整数按空格分隔:')

  24.         if conten == '.\w':
  25.             break
  26.         
  27.         # int('as')

  28.         try:
  29.             numtor, detor = conten.split(' ')
  30.             print(print_num(int(numtor), int(detor)))
  31.         except Exception as r:
  32.             print('输入错误', r)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 14:07:17 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 14:09:21 | 显示全部楼层
zltzlt 发表于 2019-10-19 14:01
还是有错

输入:numerator = 1, denominator = 2

刚刚发的那个应该没错了吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 14:11:53 | 显示全部楼层
zltzlt 发表于 2019-10-19 14:01
还是有错

输入:numerator = 1, denominator = 2

我又改了一下看看,不行,我再改






  1. def print_num(numerator, denominator):
  2.     conten = str(numerator/denominator)

  3.     strerator, strminator = conten.split('.')
  4.     strminator = list(strminator)
  5.     copstrminator = strminator.copy()
  6.     setminator = list(set(strminator))

  7.     if len(setminator) < len(strminator)//2 and len(setminator) >= 1:
  8.         # print(setminator, copstrminator)
  9.         
  10.         for each_chr in setminator:
  11.             copstrminator.pop(copstrminator.index(each_chr))


  12.         strminator = ''.join(strminator).replace(''.join(copstrminator), '')
  13.         minator = ''.join(set(copstrminator))

  14.         return '\n\n{}.{}({})'.format(strerator, strminator.replace(minator, ''), minator)

  15.     else:
  16.         if setminator[0] == '0':
  17.             return str(int(eval(conten)))
  18.         # print(setminator)
  19.         
  20.         return str(conten)


  21. if __name__ == '__main__':
  22.     while True:
  23.         conten = input('\n\n.\w退出请输入两个整数按空格分隔:')

  24.         if conten == '.\w':
  25.             break
  26.         
  27.         # int('as')

  28.         try:
  29.             numtor, detor = conten.split(' ')
  30.             print(print_num(int(numtor), int(detor)))
  31.         except Exception as r:
  32.             print('输入错误', r)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-19 14:14:04 | 显示全部楼层
god圣锋 发表于 2019-10-19 14:11
我又改了一下看看,不行,我再改



输入:numerator = 4, denominator = 333
输出:"0.012(120)"
预期结果:"0.(012)"
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 14:43:08 | 显示全部楼层
zltzlt 发表于 2019-10-19 14:14
输入:numerator = 4, denominator = 333
输出:"0.012(120)"
预期结果:"0.(012)"

不行我再改,麻烦了




  1. def print_num(numerator, denominator):
  2.     conten = str(numerator/denominator)

  3.     strerator, strminator = conten.split('.')
  4.     strminator = list(strminator)
  5.     copstrminator = strminator.copy()
  6.     setminator = list(set(strminator))

  7.     if len(setminator) < len(strminator)//2:
  8.         
  9.         for each_chr in setminator:
  10.             copstrminator.pop(copstrminator.index(each_chr))


  11.         strminator = ''.join(strminator).replace(''.join(copstrminator), '')
  12.         min_num = 0 - len(''.join(set(copstrminator)))
  13.         minator = strminator[min_num:]
  14.         # print(strminator, minator, min_num)

  15.         return '\n\n{}.{}({})'.format(strerator, strminator.replace(minator, ''), minator)

  16.     else:
  17.         if setminator[0] == '0':
  18.             return str(int(eval(conten)))
  19.         # print(setminator)
  20.         
  21.         return str(conten)


  22. if __name__ == '__main__':
  23.     while True:
  24.         conten = input('\n\n.\w退出请输入两个整数按空格分隔:')

  25.         if conten == '.\w':
  26.             break
  27.         
  28.         # int('as')

  29.         try:
  30.             numtor, detor = conten.split(' ')
  31.             print(print_num(int(numtor), int(detor)))
  32.         except Exception as r:
  33.             print('输入错误', r)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 14:49:21 | 显示全部楼层
god圣锋 发表于 2019-10-19 14:09
刚刚发的那个应该没错了吧

哎算了,我这个方法行不通,改不下去了,还是有错,得换个思路了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 16:06:50 | 显示全部楼层

2/31有循环小数?为什么也有括号?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-21 12:54:54 | 显示全部楼层
god圣锋 发表于 2019-10-19 16:06
2/31有循环小数?为什么也有括号?

2Div31.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-22 13:44:35 | 显示全部楼层

大佬可否说出你这是用的什么算法,为什么可以算出来循环的数,你那个while rem那块 我愣是看不懂用了什么方法计算的,好蒙
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-23 22:06:16 | 显示全部楼层
  1. import re
  2. def getvalue(num1,num2): #num1,num2均为整数
  3.     tennum=0
  4.     while num2%10==0:   #num2分成一个整数与10的tennum次方乘积
  5.         tennum +=1
  6.         num2 //=10
  7.     intstr=num1//num2
  8.     remainder=num1%num2
  9.     if remainder !=0:
  10.         intstr=str(intstr)+'.'
  11.     flag=[]
  12.     startflag=0
  13.     while remainder !=0:
  14.          flag.append(remainder)
  15.          zeronum=0
  16.          while remainder<num2:
  17.              zeronum +=1
  18.              remainder *=10
  19.          bitstr='0'*(zeronum-1)+str(remainder//num2)
  20.          remainder %=num2
  21.          #print('flag is %s,bitstr is %s,remainder is %s'%(str(flag),bitstr,remainder))
  22.          if remainder in flag and flag.count(remainder)==2 and startflag==0:     #循环
  23.             intstr+=('('+bitstr)
  24.             startflag+=1
  25.          elif remainder in flag and flag.count(remainder)==3:
  26.             intstr+=')'
  27.             return (intstr,tennum,num2)
  28.          else:
  29.             intstr+=bitstr
  30.     return (str(intstr),tennum,num2)

  31. def func258(numerator,denominator):
  32.     (numerator,tennum,denominator)=getvalue(numerator,denominator)
  33.     reslist=numerator.split('.')    #获取整数部分和小数部分
  34.     length =len(reslist[0])     #整数部分长度
  35.     if len(reslist)==1:
  36.         floatstr=''
  37.     else:
  38.         floatstr=reslist[1]
  39.     #print('numerator is%s'%numerator)
  40.     #print(reslist)
  41.     if length>tennum:
  42.         intstr=reslist[0][:length-tennum]
  43.         floatstr=reslist[0][length-tennum:]+floatstr
  44.     else:
  45.         intstr='0'
  46.         floatstr='0'*(tennum-length)+intstr+floatstr

  47.     #print('intstr is%s,floatstr is %s'%(intstr,floatstr))

  48.     if floatstr.find('(') !=-1:     #有循环
  49.         start=floatstr.find('(')
  50.         samestr=floatstr[start+1:-1]
  51.         rplstr=floatstr[start:]
  52.         pattern=samestr+rplstr
  53.         
  54.         while pattern in floatstr:
  55.             floatstr=floatstr.replace(pattern,rplstr)
  56.     if len(floatstr) !=0:
  57.         start=floatstr.find('(')
  58.         while start>0:
  59.             if floatstr[start-1]==samestr[-1]:
  60.                 samestr=floatstr[start-1]+samestr[:-1]
  61.                 floatstr=floatstr[:start-1]+'('+samestr+')'
  62.                 start=floatstr.find('(')
  63.             else:
  64.                 break
  65.         intstr +='.'+floatstr
  66.     return intstr
复制代码


每天半小时,搞了好久了,最后堆成这个样了,尝试的结果
>>> func258(20,21)
'0.(952380)'
>>> func258(20,210)
'0.(095238)'
>>> func258(1,3)
'0.(3)'
>>> func258(6,3)
'2'
>>> func258(6,12)
'0.5'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 17:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表