鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: 冬雪雪冬

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

[复制链接]
发表于 2018-8-26 10:27:39 | 显示全部楼层

  1. import  random
  2. numlist = []
  3. for i in range(8):
  4.         ran = random.randint(0, 9)
  5.         numlist.append(str(ran))
  6. print(''.join(numlist))
复制代码


这才是正确姿势嘛  

点评

没有考虑之和=40  发表于 2018-8-26 21:23
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-26 10:47:46 | 显示全部楼层
  1. import itertools
  2. for each in itertools.permutations('0123456789',8):
  3.     if sum(list(map(int,each))) == 40:
  4.         print(''.join(each))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-27 16:28:47 | 显示全部楼层
凌九霄 发表于 2018-8-23 20:53
稍改下,来个效率高的

第10行 x -= 1 应该在 if 里吧0.0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-27 16:43:15 | 显示全部楼层
有事耽误了没赶上啊,壮着够胆来请大腿看卷子~

  1. import random

  2. def fun202():
  3.     s = 40  #想要到达数字字符串的和总和
  4.     s_len_max = 8 #长度
  5.    
  6.     s_list = []
  7.     s_len = 1
  8.     while s_len <= s_len_max:
  9.         each_s = random.randint(0,9)
  10.         if s >= sum(s_list) +  each_s >= s - (s_len_max - s_len) * 9:  #到了倒数的位数时 检测如果达不到限值 重来
  11.             s_list.append(each_s)
  12.             s_len += 1
  13.     return "".join([str(i) for i in s_list])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-27 16:51:12 | 显示全部楼层
Wangzy1025 发表于 2018-8-27 16:28
第10行 x -= 1 应该在 if 里吧0.0

谢谢指正。确实应该放if里面,万一某个值不够减,就丢失了一次减的机会,造成最后的和不为40
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-27 23:10:09 | 显示全部楼层

import random
while (1):
    num=random.randint(10000000,99999999)
    str_num=str(num)
    list_num=[]
    for each in str_num:
        each=int(each)
        list_num.append(each)
    if sum(list_num)==40:
        break
print(num)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-27 23:12:42 | 显示全部楼层

import random
while (1):
    a = random.randint(10000000, 99999999)
    b = 0
    for i in str(a):
        b += int(i)
    if b == 40:
        print(a)
        break
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-28 10:52:50 | 显示全部楼层
def sumdigit(x):
        res=0       
        while x>0:
                res+=x%10
                x//=10
        return res

import random
while True:               
        a=random.randint(100,999)
        b=random.randint(1000,9999)
        t=sumdigit(a)+sumdigit(b)
        if 0<=40-t<10:
                print(str(a)+str(b)+str(40-t))               
                break
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-8-28 11:51:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-28 23:21:38 | 显示全部楼层
CoderWGB 发表于 2018-8-26 10:27
这才是正确姿势嘛
  1.     while True:
  2.         numlist = []
  3.         for i in range(8):
  4.                 ran = random.randint(0, 9)
  5.                 numlist.append(str(ran))
  6.         result = []
  7.         numCount = 0
  8.         for j in numlist:
  9.                 numCount+=int(j)
  10.         if numCount == 40:
  11.                 print(''.join(numlist))
  12.                 break
复制代码


大意了 , &#128516;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-29 19:54:32 | 显示全部楼层

也是!!!!感谢提醒!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-5 11:25:06 | 显示全部楼层
  1. # 思路:随机生成8个数字,大了就减,小了就加
  2. import random
  3. def num_40():
  4.     # 初始化
  5.     number = []
  6.     number_str = ""
  7.     # 生成8个随机数(0,9)之间
  8.     for i in range(8):
  9.         value = random.randint(0,9)
  10.         number.append(value)
  11.     # 生成等于40 的数
  12.     if sum(number) < 40:
  13.         add_num_40(number)
  14.     else:
  15.         sub_num_40(number)

  16.     for j in range(8):
  17.         number_str += str(number[j])
  18.     return number_str

  19. # 定义加法模式
  20. def add_num_40(addnum):
  21.     add_value = 40 - sum(addnum)
  22.     while add_value !=0:
  23.         for each in addnum:
  24.             if add_value + addnum[each] <= 9:
  25.                 add_every_value = random.randint(0,add_value)
  26.                 add_value -= add_every_value
  27.                 addnum[each] += add_every_value
  28.                 if add_value == 0:
  29.                     break
  30.             else:
  31.                 add_every_value = random.randint(0,9-addnum[each])
  32.                 add_value -= add_every_value
  33.                 addnum[each] += add_every_value
  34.                 if add_value == 0:
  35.                     break
  36.     return addnum

  37. # 定义减法模式
  38. def sub_num_40(subnum):
  39.     sub_value = sum(subnum) - 40
  40.     while sub_value != 0:
  41.         for each in subnum:
  42.             if sub_value <= subnum[each]:
  43.                 sub_every_value = random.randint(0,sub_value)
  44.                 sub_value -= sub_every_value
  45.                 subnum[each] -= sub_every_value
  46.                 if sub_value == 0:
  47.                     break
  48.             else:
  49.                 sub_every_value = random.randint(0,subnum[each])
  50.                 sub_value -= sub_every_value
  51.                 subnum[each] -= sub_every_value
  52.                 if sub_value == 0:
  53.                     break
  54.     return subnum

  55. print(num_40())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-28 16:10:43 | 显示全部楼层

这个代码存在一个问题,不会有0开头的字符串产生
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-20 15:51:16 | 显示全部楼层

能不能请鱼友帮我讲解下if s>9-a[i]:在里面是什么意思呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-20 15:57:31 | 显示全部楼层
人随世俗变 发表于 2018-11-20 15:51
能不能请鱼友帮我讲解下if s>9-a:在里面是什么意思呢?

如果s的剩余值还够给第i位数字a[i]充值,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 17:44:55 | 显示全部楼层
def test202(sumcount=8, sumnum=40):
    a = [0] * sumcount
    while sumcount > 1:
        ranmin, ranmax = sumnum - (sumcount - 1) * 9 if sumnum > (sumcount - 1) * 9 else 0, sumnum if sumnum < 9 else 9
        a[sumcount - 1] = random.randint(ranmin, ranmax)
        sumnum -= a[sumcount - 1]
        sumcount -= 1
    a[0] = sumnum
    print(''.join([str(i) for i in a]), sum(a))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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