鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 202

[复制链接]
发表于 2018-8-24 15:15:17 | 显示全部楼层
  1. import random

  2. a = 1

  3. while a:
  4.     b = random.randint(10000000,99999999)
  5.     count = 0
  6.     for i in str(b):
  7.         count = count + int(i)
  8.         if count == 40:
  9.             a = 0
  10.             print(b)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-8-24 16:09:54 | 显示全部楼层
  1. import random
  2. import string

  3. seed = "0123456789"
  4. def judge(string):
  5.     count = 0
  6.     for each in string:
  7.         count += int(each)
  8.     if count == 40:
  9.         return True
  10.     return False
  11. flag = True
  12. while flag:
  13.     res = []
  14.     for i in range(8):
  15.         res.append(random.choice(seed))
  16.         ans = ''.join(res)
  17.     if judge(ans):
  18.         print(ans)
  19.         flag = False

复制代码
1.png

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-8-24 16:10:57 | 显示全部楼层
  1. import random

  2. def func202():
  3.     while 1:
  4.         tmp = 40
  5.         res = ''
  6.         for i in range(7):
  7.             ran = random.randint(0,9)
  8.             tmp = tmp - ran
  9.             res += str(ran)
  10.         if tmp >= 0 and tmp <= 9:
  11.             return res + str(tmp)

  12. print(func202())
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-8-24 16:21:57 | 显示全部楼层
  1. import random

  2. while True:
  3.     new_list = []

  4.     for i in range(0,8):
  5.         new_list.append(random.randint(0,9))
  6.     if sum(new_list) == 40:
  7.         break

  8. s = "".join(str(x) for x in new_list)
  9. print(s)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-24 16:29:26 | 显示全部楼层
import random,time


while 1:
    sum = 0
    s = ''
    for i in range(8):
        num=random.randint(0,10)
        print(num)
        sum+=num
        s+=str(num)
        print('-->',sum)


    if sum==40:
        print(s)
        break
    print('和:',sum)
    print('====================')
    time.sleep(3)

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-8-24 16:33:06 | 显示全部楼层
  1. import random
  2. def gent(num,sum):
  3.     rest=sum
  4.     for i in range(num):
  5.         a=random.randint(0,9)
  6.         rest=rest-a
  7.         while rest>9*(num-1-i) or rest<0:
  8.             rest+=a
  9.             a=random.randint(0,9)
  10.             rest-=a
  11.         b=str(a)
  12.         print(b,end="")
  13. gent(8,40)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-8-24 17:03:08 | 显示全部楼层
本帖最后由 fkmol 于 2018-8-25 12:51 编辑
  1. import random
  2. def j_40():
  3.     suiji = random.randint(0,9)#随机的0到9的数字
  4.     cisu = 8#字符的长度
  5.     su = ''
  6.     jiq=0
  7.     zh=40
  8.     while len(su)<8:#判断有几个字符
  9.         suiji = random.randint(0,9)
  10.         
  11.         if cisu>1 and zh-suiji>0 and (zh-suiji)/(cisu-1)<=9:#保证最后一个加进去的是余 不能小于0 保证不会有29 30时次数只有3次之类的场景
  12.             
  13.             jiq+=suiji
  14.             su+= str(suiji)
  15.             zh-=suiji
  16.                   
  17.             cisu-=1
  18.             
  19.         
  20.         elif cisu>1:
  21.             
  22.             continue
  23.             
  24.             
  25.         else :
  26.             su+=str(zh)
  27.             

  28.     print (su)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-8-24 18:05:26 | 显示全部楼层
import random

def temp8():
    while True:
        temp_list = []
        for i in range(8):
            temp = random.randint(0,9)
            temp_list.append(temp)

        if sum(temp_list) == 40:
            temp_z = ''
            for each in temp_list:
                temp_z += str(each)



            print(temp_z)
            break

temp8()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-24 22:20:54 | 显示全部楼层
本帖最后由 初来乍到的鱼油 于 2018-8-27 16:25 编辑

import random
list1 = []
d = 0
while d != 40:
    for i in range(0,8):
        a = random.randint(0,9)
        list1.append(str(a))
        b = int("".join(list1))
    num = b
    while num != 0:
            c = num % 10
            num = num // 10
            d += c
print(b)

点评

如果第一次没有算出结果,就什么也不输出结束了  发表于 2018-8-26 21:09

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

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

使用道具 举报

发表于 2018-8-24 22:55:59 | 显示全部楼层
  1. import random
  2. s =''
  3. sum_s = 0

  4. while True:
  5.     for i in range(7):
  6.         s += str(random.randint(0,9))

  7.     for j in range(7):
  8.         sum_s += int(s[j])

  9.     if sum_s in range(31,41):
  10.         s += str(40 - sum_s)
  11.         print(s)
  12.         break
  13.     s = ''
  14.     sum_s =0
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-8-24 23:01:01 | 显示全部楼层
  1. import random
  2. s =''
  3. sum_s = 0

  4. while True:
  5.     for i in range(8):
  6.         s += str(random.randint(0,9))

  7.     for j in range(8):
  8.         sum_s += int(s[j])

  9.     if sum_s == 40:
  10.         print(s)
  11.         break
  12.    
  13.     s = ''
  14.     sum_s =0
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-8-25 00:00:30 | 显示全部楼层
import string
import random

def main():
    number=[random.choice(string.digits) for i in range(8)]
    return number
In [126]: while True:
     ...:     a=0
     ...:     S=main()
     ...:     for i in S:
     ...:         a+=int(i)
     ...:     time.sleep(0.5)
     ...:     print(''.join(S))
     ...:     print(a)
     ...:     if a==40:
     ...:         print(''.join(S))
     ...:         break

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-8-25 01:12:23 | 显示全部楼层
  1. #coding:utf-8

  2. #随机生成一个由8位的数字组成的字符串,要求各位数字之和等于40。
  3. #例如:
  4. #54735781
  5. #01496488
  6. #27392296


  7. import random,sys

  8. def result():
  9.     num = 0
  10.     a = random.sample(range(0,10),8)
  11.     if sum(a) == 40:
  12.         print(a)
  13.     return result()

  14. sys.setrecursionlimit(1000000)
  15. result()
复制代码

点评

只要输出一个结果  发表于 2018-8-26 21:14

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-8-25 08:16:45 | 显示全部楼层
本帖最后由 jiaozhu80 于 2018-8-25 10:41 编辑

sum=0
i=0
flag=1
import random
import string
each=string.digits
while flag:
    ypass = random.sample(each, 8)
    for i in range(len(ypass)):
        sum+=int(ypass[i])
    if sum>=40:
        print("".join(ypass))
        flag=0
    sum=0

点评

ypass是列表,不能转为整数  发表于 2018-8-26 21:16
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-25 10:01:34 | 显示全部楼层
  1. 迟了的爱~
  2. >>> def fun( s, n):
  3.         if n <= 0 or (s/n>9) or s < 0:
  4.                 return "-1"
  5.         import random as R
  6.         res = ""
  7.         used = 0
  8.         for i in range(1,n+1):
  9.                 unused = s - used
  10.                 ma = min(9, unused)
  11.                 mi = unused if i==n else max(0,unused - 9 * (n-i))
  12.                 t = R.randint(mi,ma)
  13.                 res += str(t)
  14.                 used += t
  15.         lres = list(res)
  16.         R.shuffle(lres)
  17.         return "".join(lres)

  18. >>> fun(40,8)
  19. '21428869'
  20. >>> def ct( n ):
  21.         fs = {}
  22.         for i in range(n):
  23.                 t = fun(1,10)
  24.                 k = t.index("1")
  25.                 r = fs.get(k)
  26.                 if r == None:
  27.                         r = 1
  28.                 else:
  29.                         r += 1
  30.                 fs[k] = r
  31.         print(fs)

  32.        
  33. >>> ct(10000)
  34. {4: 1031, 8: 956, 0: 1008, 6: 948, 9: 982, 3: 1048, 5: 956, 7: 980, 1: 1030, 2: 1061}
  35. >>>
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-8-25 10:39:58 | 显示全部楼层
sum=0
i=0
flag=1
import random
import string
each=string.digits
while flag:
    ypass = random.sample(each, 8)
    for i in range(len(ypass)):
        sum+=int(ypass[i])
    if sum>=40:
        print("".join(ypass))
        flag=0
    sum=0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-25 21:07:31 | 显示全部楼层
  1. import random as r
  2. def py202():
  3.     ranNum = [0 for x in range(8)]  #初始化8位数字列表,数值都为0
  4.     for each in range(40):
  5.         ranNum[r.randint(0,7)] += 1 #随机给列表的某个位增一,循环40次
  6.     ranStr = ''
  7.     for each in range(8):
  8.         ranStr += str(ranNum[each]) #组成字符串
  9.     return ranStr

  10. print(py202())
复制代码

点评

构思很巧妙,但没有考虑某一位超过10的情况。  发表于 2018-8-26 21:21
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-25 23:42:19 | 显示全部楼层
import random
while (1):
    temp = random.randint(10000000,99999999)
    i = str(temp)
    number = list(i)
    sum = int(number[0])+int(number[1])+int(number[2])+int(number[3])+int(number[4])+int(number[5])+int(number[6])+int(number[7])
    if sum == 40:
        print("符合条件的随机数字是:",i)
        break

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

发表于 2018-8-26 09:38:09 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-26 10:14:59 | 显示全部楼层

  1. numList = []
  2. filterNum = []
  3. for i in range(1000000,100000000):
  4.         res = str(i)
  5.         if len(res) == 7:
  6.                 res = '0' + res

  7.         for j in range(len(res)):
  8.                 num = res[j:j+1]
  9.                 numList.append(num)
  10.         total = 0
  11.         for index in numList:
  12.                 total += int(index)
  13.                 if total == 40:
  14.                         filterNum.append(res)

  15. print(filterNum)
复制代码


感觉这种方式太耗性能了 ,半天没反应 ,按道理是正确的

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 03:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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