鱼C论坛

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

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

[复制链接]
发表于 2018-4-10 15:18:33 | 显示全部楼层

我好傻啊,还傻乎乎得转化成了int型……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-10 18:44:18 | 显示全部楼层

哦,我没看你列子,我看了题目就开始做了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-10 18:45:41 | 显示全部楼层
shigure_takimi 发表于 2018-4-10 11:08
:)出题本意就是4个数字,不是四位数,0123也可以。

是要求四位数啊,第一点就是计算机出一个四位数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 16:28:27 | 显示全部楼层
Chase_Kas 发表于 2018-4-8 11:38
玩了几把发现要猜对还真的不简单,比较考验逻辑推理

循环有问题,按Q退出不了,因为 if len(set(input_num)) != 4:
            continue  只要你输入长度不等于4,那么就会一直循环让你输入

else根本不管用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-12 01:08:45 | 显示全部楼层
Chase_Kas 发表于 2018-4-8 11:38
玩了几把发现要猜对还真的不简单,比较考验逻辑推理

代码有点瑕疵,不能退出和计算错误。
for i in range(4):
        if input_num == randnum:
            A += 1
        elif input_num in randnum:
            B += 1
    return A, B

if input_num != 'Q':
            if len(set(input_num)) != 4:
                continue

这两处修改了一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-12 01:09:18 | 显示全部楼层
Chase_Kas 发表于 2018-4-8 11:38
玩了几把发现要猜对还真的不简单,比较考验逻辑推理

代码有点瑕疵,不能退出和计算错误。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-12 11:18:13 | 显示全部楼层
  1. from random import randint

  2. def fun175(x):
  3.     dict_x = dict()
  4.     for i in x:
  5.         dict_x[i] = x.find(i)
  6.     count_A,count_B = 0,0
  7.     times = 1
  8.     result_list = []
  9.     while True:
  10.         guess = input('请输入不重复的四个数字,Q - 退出游戏:')
  11.         if guess == 'Q':
  12.             break
  13.         if not len(set(guess)) == 4:
  14.             print('数字有重复!')
  15.             continue
  16.         for i in guess:
  17.             if i in dict_x and guess.find(i) == dict_x[i]:
  18.                 count_A += 1
  19.             elif i in dict_x:
  20.                 count_B += 1
  21.         if count_A == 4:
  22.             print('恭喜你,猜对了!')
  23.             break
  24.         result_list.append('%s. %sA%sB'%(times,count_A,count_B))
  25.         for result in result_list:
  26.             print(result)
  27.         count_A,count_B = 0,0
  28.         times += 1

  29. if __name__ == '__main__':
  30.     x = randint(1234,9876)
  31.     while not len(set(str(x))) == 4:
  32.         x = randint(1234,9876)
  33.     fun175(str(x))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-12 17:38:59 | 显示全部楼层
本帖最后由 checkily 于 2018-4-12 17:44 编辑

几天没上鱼C,估计没有分了
  1. def main():
  2.     a, b, count = 0, 0, 0
  3.     while True:
  4.         guess = input('请输入不重複的四个数字,"q"退出:')
  5.         if guess == 'q':
  6.             break
  7.         if len(set(guess)) != 4:
  8.             continue
  9.         for i in guess:
  10.             if i in target:
  11.                 if guess.index(i) == target.index(i):
  12.                     a += 1
  13.                 else:
  14.                     b += 1
  15.         count += 1
  16.         temp = '第%d次  %s---->%dA%dB' % (count, guess, a, b)
  17.         history.append(temp)
  18.         print('\n'.join(history))
  19.         a, b = 0, 0


  20. if __name__ == '__main__':
  21.     import random
  22.     nums = [i for i in range(1000, 10000) if len(set(str(i))) == 4]
  23.     target = str(random.choice(nums))
  24.     history = ['History:']
  25.     print(target)    #打印目标数字,方便验证。
  26.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-14 12:48:12 | 显示全部楼层
  1. import random as r

  2. #随机生成一个4位数
  3. num = str(r.randint(1,9))
  4. while True:
  5.     num1 = str(r.randint(0,9))
  6.     if num1 in num:
  7.         continue
  8.     else:
  9.         num = num + num1
  10.         if len(num) == 4:
  11.             break
  12.         
  13. guess_dict = {} #构建字典存放历史数据
  14. #输入猜测答案
  15. while True:
  16.     guess = input('请输入不重複的四个数字, Q - 退出遊戲:')
  17.     #结束游戏
  18.     if guess == ('Q' or 'q'):
  19.         print('退出游戏')
  20.         break
  21.    
  22.     if len(guess) != 4:
  23.         print("只能输入四位数!")
  24.         continue
  25.    
  26.     elif guess.isdigit():
  27.         if guess != num:
  28.             length = -1
  29.             A = 0
  30.             B = 0
  31.             while True:
  32.                 length += 1
  33.                 if guess[length] == num[length]:
  34.                     A += 1
  35.                 elif guess[length] in num:
  36.                     B += 1
  37.                 if length == 3:
  38.                     guess = str(len(guess_dict)+1) + '. ' + guess
  39.                     guess_dict[guess] = "%sA%sB"%(A,B)
  40.                     print("HISTORY:")
  41.                     for each in guess_dict:
  42.                         print("%s --> %s"%(each,guess_dict[each]))
  43.                     break
  44.         else:
  45.             print("你猜中答案了!")
  46.             guess_dict.clear()  #猜中之后清空字典
  47.             break

  48.     else:
  49.         print('请输入纯数字!')
  50.         continue
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-17 01:03:23 | 显示全部楼层
本帖最后由 fan1993423 于 2018-4-17 01:12 编辑

hao
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-30 00:21:50 | 显示全部楼层
  1. #coding:utf-8

  2. import random
  3. from string import upper


  4. def compare(num):
  5.     result = []
  6.     input_num = num
  7.     for x in range(4):
  8.         result.append(input_num[x])
  9.         if input_num[x] in random_num:
  10.             result[x] = "B"
  11.         if input_num[x] == random_num[x]:
  12.             result[x] = "A"
  13.     return ''.join(result)


  14. if __name__ == "__main__":
  15.     random_num = random.sample('1234567890', 4)
  16.     prompt = "提示:\n" \
  17.              "出现”A“则该位置的数字正确\n" \
  18.              "出现“B”则该位置的数字在需猜的数字里面有出现\n"
  19.     while 1:
  20.         a = raw_input(prompt + ">>>")
  21.         if upper(a) == 'Q':
  22.             print 'OK bye !'
  23.             break
  24.         else:
  25.             b = compare(a)
  26.             if b == 'AAAA':
  27.                 print '恭喜你!猜对啦({})'.format(''.join(a))
  28.                 break
  29.             else:
  30.                 print '差一点点(提示:{})'.format(b)
  31.                 prompt = ''
  32.                 continue
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-6 08:48:22 | 显示全部楼层

没有验证输入的数字是否有重复,变相降低了难度~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-14 08:58:52 | 显示全部楼层
cum = random.sample(select_list,4)
num_list = []
ab = []
while True:
    num = input("请输入不重複的四个数字, Q - 退出遊戲:")
    if num == "Q":
        break
    else:
        if [int(i) for i in num] == cum:
            break
        else:            
            counta = 0
            countb = 0
            other = int(num)
            num = [int(i) for i in num]
            for i in range(4):
                if num[i] == cum[i]:
                    counta += 1
                elif num[i] in cum:
                    countb += 1
            num_list.append(other)
            ab.append((counta,countb))
            print("HISTORY")
            for i in range(len(num_list)):
                print("%s.%s--->%sA%sB"%(i+1, num_list[i], ab[i][0],ab[i][1]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-13 15:06:36 | 显示全部楼层
import random

# 生成不重复的4位数字
while True:
    result = str(random.randint(1000, 10000))
    for i in range(3):
        if result[i] in result[i+1:]:
            break
    else:
        break

exit = True
A, B = 0, 0
while exit:
    guess = input('请输入你猜的数字(1000-9999):')
    if guess == 'q':
        print('退出...result=%s' % result)
        break
    if guess == result:
        exit = False
        print('猜对了!')
        break
    for i in guess:
        if i in result:
            num = result.index(i)
            if num == guess.index(i):
                A += 1
            else:
                B += 1
    print('%s--->%dA%dB' % (guess, A, B))
    A, B = 0, 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-7 17:52:23 | 显示全部楼层
  1. def test175():
  2.     tarnum, inputnum = '0000', '0000'
  3.     while tarnum[0] == '0':
  4.         tarnum = ''.join(random.sample('0123456789', k=4))
  5.     history = 'HISTORY:'
  6.     count = 0
  7.     while inputnum != tarnum:
  8.         inputnum = input('请输入不重複的四个数字, Q - 退出遊戲:')
  9.         if inputnum.lower() == 'q':
  10.             print('遊戲退出!')
  11.             os._exit(0)
  12.         count += 1
  13.         A, B = 0, 0
  14.         for i in range(4):
  15.             if inputnum[i] == tarnum[i]:
  16.                 A += 1
  17.             elif inputnum[i] in tarnum:
  18.                 B += 1
  19.         history += '\n%d. %s --> %dA%dB' % (count, inputnum, A, B)
  20.         print(history)
  21.     print("\n恭喜你猜中了!")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-7 23:20:13 | 显示全部楼层
import logging

LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT)

import random
import sys

list = []

def CheckPcNumber(number):
    '''检测随机生成的数字的合法性'''
    if len(set(str(number))) < 4:
        return CheckPcNumber(random.randint(1000,9999))
    else:
        return number

def CheckHumenNumber(number):
    '''检测用户输入的数字的合法性'''
    if len(set(str(number))) < 4:
        num = int(input('您输入的数字内有重复出现的数字,请重新输入:'))
        return CheckHumenNumber(num)
    else:
        return number

def Comparison_results(x,y):
    count_A = 0
    count_B = 0
    for num in x:
        if num not in y:
            pass
        elif num in y and num != y[x.find(num)]:
            count_B+=1
        elif num in y and num == y[x.find(num)]:
            count_A += 1
    list.append('%s --------> %sA%sB'%(x,str(count_A),str(count_B)))
    count_B = 0
    count_A = 0

if __name__=='__main__':
    Pcnumber = CheckPcNumber(random.randint(1000, 9999))
    while True:
        try:
            HumenNumber = CheckHumenNumber(int(input('输入的数字内数字不能有重复\n\输入Q\q退出程序\n请输入您的数字:')))
        except ValueError:
            sys.exit()
        Comparison_results(str(HumenNumber),str(Pcnumber))
        print('\n'.join(list))
        if Pcnumber == HumenNumber :
            logging.debug('你很不错哦,这都能猜对... ...')
            logging.debug('结果为:',HumenNumber)
            break
        elif Pcnumber == 'Q' or Pcnumber == 'q':
            break
    del list
#用户输入没经过严谨的判断了,在这题上浪费太多时间了,以上代码基本功能已实现了。
输出展示:
输入的数字内数字不能有重复
\输入Q\q退出程序
请输入您的数字:3256
3256 --------> 0A1B
输入的数字内数字不能有重复
\输入Q\q退出程序
请输入您的数字:2231
您输入的数字内有重复出现的数字,请重新输入:q
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-8 21:16:45 | 显示全部楼层
#-*- coding:utf8-*-
"""
@author:Administrator
@file: seleniumStu_2.py
@time: 2019/02/{DAY}
"""
import logging

LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT)

import random
import sys

list = []

def CheckPcNumber(number):
    '''检测随机生成的数字的合法性'''
    if len(set(str(number))) < 4:
        return CheckPcNumber(random.randint(1000,9999))
    else:
        return number

def CheckHumenNumber(number):
    '''检测用户输入的数字的合法性'''
    if len(set(str(number))) < 4:
        num = int(input('您输入的数字内有重复出现的数字,请重新输入:'))
        return CheckHumenNumber(num)
    else:
        return number

def Comparison_results(x,y):
    count_A = 0
    count_B = 0

    for num in x:
        if num not in y:
            pass
        elif num in y and num != y[x.find(num)]:
            count_B+=1
        elif num in y and num == y[x.find(num)]:
            count_A += 1
    propmt = '%s --------> %sA%sB' % (x, str(count_A), str(count_B))
    #如果结果在列表里,就不再添加
    if propmt not in list:
        list.append(propmt)

    #初始化两个计数器
    count_B = 0
    count_A = 0

if __name__=='__main__':
    Pcnumber = CheckPcNumber(random.randint(1000, 9999))
    print(__name__.__dir__)
    while True:
        try:
            HumenNumber = CheckHumenNumber(int(input('输入的数字内数字不能有重复\n输入\Q\q退出程序\n请输入您的数字:')))
        except ValueError:
            sys.exit()
        if Pcnumber == HumenNumber :
            logging.debug('你很不错哦,这都能猜对... ...')
            logging.debug('结果为:%s'%HumenNumber)
            break
        Comparison_results(str(HumenNumber), str(Pcnumber))
        print('\n'.join(list))
    del list




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 22:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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